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 the planner's design. This may be **creating a new workflow** or **modifying an existing one**. 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 / make structural changes 2. Second pass: implement role logic 3. Third pass: fix build/lint errors ## Workflow file structure Each workflow must have: - \`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 For **new workflows**, also 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 changes from the plan are implemented - \`cd workflows/ && 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.`; }