# All files / src/agent/prompts shared.ts

100% Statements 10/10
100% Branches 0/0
100% Functions 1/1
100% Lines 10/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123

    19x

    19x

    19x

    19x

    19x

    19x

    19x

    19x

    19x

    8x

     /**
     * Shared prompt instructions reused across agent types.
     */

    export const SIGNAL_FORMAT = `
    ## Signal Output

    As your final action, write \`.cw/output/signal.json\`:
    - Done: \`{ "status": "done" }\`
    - Need clarification: \`{ "status": "questions", "questions": [{ "id": "q1", "question": "..." }] }\`
    - Unrecoverable error: \`{ "status": "error", "error": "..." }\``;

    export const INPUT_FILES = `
    ## Input Files

    Read \`.cw/input/manifest.json\` first, then read listed files from \`.cw/input/\`.

    ### Assignment Files
    - \`initiative.md\` — frontmatter: id, name, status
    - \`phase.md\` — frontmatter: id, name, status; body: description
    - \`task.md\` — frontmatter: id, name, category, type, priority, status; body: description
    - \`pages/\` — one per page; frontmatter: title, parentPageId, sortOrder; body: markdown

    ### Context Files (read-only)
    Present when \`contextFiles\` exists in manifest:
    - \`context/phases/\` — frontmatter: id, name, status, dependsOn; body: description
    - \`context/tasks/\` — frontmatter: id, name, phaseId, parentTaskId, category, type, priority, status; body: description

    Do not duplicate or contradict context file content in your output.`;

    export const ID_GENERATION = `
    ## ID Generation

    When creating new entities (phases, tasks, decisions), generate a unique ID by running:
    \`\`\`
    cw id
    \`\`\`
    Use the output as the filename (e.g., \`{id}.md\`).`;

    export const DEVIATION_RULES = `
    ## Deviation Decision Tree

    1. **Typo in assigned files** → Fix silently
    2. **Bug in files you're modifying** → Fix if < 10 lines, otherwise note and move on
    3. **Missing dependency** → Check context files for another agent's work; \`cw ask\` if yes, create if within scope
    4. **Architectural mismatch** → STOP. Signal "questions" with what you found vs. what the task assumes
    5. **Ambiguous requirement** → STOP. Signal "questions" with the ambiguity and 2-3 concrete options
    6. **Task wrong or impossible** → STOP. Signal "error" explaining why

    Never silently reinterpret a task.`;

    export const GIT_WORKFLOW = `
    ## Git Workflow

    You are in an isolated git worktree. Other agents work in parallel on separate branches.

    - Stage specific files with \`git add <file>\`, not \`git add .\`
    - Never force-push
    - Run \`git status\` before committing`;

    export const CONTEXT_MANAGEMENT = `
    ## Context Management

    When reading multiple files or running independent commands, execute them in parallel rather than sequentially. After each commit, update your progress file (see Progress Tracking).`;

    export const TEST_INTEGRITY = `
    ## Test Integrity Rules

    1. **Never mirror implementation logic in assertions.** Hardcode expected values from requirements, don't recalculate them.
    2. **Never modify existing test assertions to make them pass.** If a test expects X and your code produces Y, fix your code. Exception: your task explicitly changes expected behavior.
    3. **Never skip or disable tests.** No \`it.skip()\`, \`.todo()\`, or commenting out. If unfixable, signal error.
    4. **Each test must be independent.** No shared mutable state, no order dependence.
    5. **Run the full relevant test suite**, not just your new tests.`;

    export const SESSION_STARTUP = `
    ## Session Startup

    1. \`pwd\` — confirm working directory
    2. \`git status\` — check for unexpected state
    3. Run test suite — establish green baseline. If already failing, signal "error". Don't build on a broken foundation.
    4. Read \`.cw/input/manifest.json\` and all listed input files`;

    export const PROGRESS_TRACKING = `
    ## Progress Tracking

    Update \`.cw/output/progress.md\` after each commit:

    \`\`\`markdown
    ## Current Status
    [What you just completed]

    ## Next Steps
    [What you're working on next]

    ## Blockers
    [Any issues or questions — empty if none]
    \`\`\`

    Survives context compaction — read this first if your context is refreshed.`;

    export function buildInterAgentCommunication(agentId: string): string {
      return `
    ## Inter-Agent Communication

    Your agent ID: **${agentId}**

    ### CLI Commands

    - \`cw listen --agent-id ${agentId}\` — Waits for incoming question. Prints JSON (\`{ conversationId, fromAgentId, question, phaseId, taskId }\`) and exits.
    - \`cw ask "<question>" --from ${agentId} --agent-id <TARGET>\` — Blocks until answered. Target with one of: \`--agent-id <id>\`, \`--task-id <id>\`, \`--phase-id <id>\`.
    - \`cw answer "<answer>" --conversation-id <ID>\` — Answer a pending question.

    ### Usage Pattern

    Run \`cw listen > "$file" &\` at session start. Check periodically. On question: answer, restart listener. Before signal.json: kill listener, clean up.

    ### When to Communicate
    - Need interface/schema/API contract info from another agent
    - About to modify a shared resource
    - Have a dependency on another agent's work
    - Don't ask questions you can answer by reading the codebase`;
    }