/** * Workspace layout section describing the agent's working directory. */ import { readdirSync } from 'node:fs'; import { join } from 'node:path'; export function buildWorkspaceLayout(agentCwd: string): string { let entries: string[]; try { entries = readdirSync(agentCwd, { withFileTypes: true }) .filter(d => d.isDirectory() && d.name !== '.cw') .map(d => d.name); } catch { return ''; } if (entries.length === 0) { return ` Your working directory is: ${agentCwd} This is an isolated git worktree. Other agents may be working in parallel on separate branches — do not assume you have exclusive access to the repository. `; } const lines = entries.map( name => `- \`${name}/\` — ${join(agentCwd, name)}` ); return ` Your working directory is: ${agentCwd} This is an isolated git worktree. Other agents may be working in parallel on separate branches — do not assume you have exclusive access to the repository. The following project directories contain the source code (git worktrees): ${lines.join('\n')} **IMPORTANT**: All \`.cw/output/\` paths (signal.json, progress.md, etc.) are relative to this working directory (\`${agentCwd}\`), NOT to any project subdirectory. Always write to \`${join(agentCwd, '.cw/output/')}\` regardless of your current \`cd\` location. `; }