/**
* 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.
`;
}