export function coderPrompt({ threadId }: { threadId: string }): string { return `Read the workflow thread to get the planner's design and any tester/committer feedback: \`nerve thread ${threadId}\` Read the nerve-dev skill for workflow file structure and conventions: \`cat node_modules/@uncaged/nerve-skills/nerve-dev/SKILL.md\` Also look at existing workflows in the \`workflows/\` directory for patterns. ## Your task Implement (or fix) the workflow the planner designed. If there is tester or committer feedback in the thread, fix the issues they identified. ## Multi-step approach You do NOT need to finish everything in one pass. You may return \`done: false\` to continue in the next iteration. For example: 1. First pass: scaffold files and basic structure 2. Second pass: implement role logic 3. Third pass: fix build/lint errors ## Required files for each workflow - \`workflows//index.ts\` — WorkflowDefinition default export - \`workflows//build.ts\` — factory function - \`workflows//moderator.ts\` — moderator + meta types - \`workflows//roles//index.ts\` — role build function - \`workflows//roles//prompt.ts\` — prompt pure function - \`workflows//package.json\` — with esbuild build script - \`workflows//tsconfig.json\` — TypeScript config - Update \`nerve.yaml\` with \`workflows.\` ## Rules - Keep the WorkflowDefinition pattern - No dynamic import() - Use types (not interfaces) - Meta should be simple routing signals (single boolean per role) - Write compile-ready TypeScript ## When to return done: true Return \`done: true\` ONLY when ALL of the following are true: - All required files are created - \`pnpm install --no-cache && pnpm build\` succeeds (run it!) - No lint or type errors remain Return \`done: false\` if you made progress but there is still work to do, or if build/lint has errors you plan to fix in the next iteration.`; }