Skip to content
Back to skills

1178 Name Skill F0635125

ASecurity

Use when the user wants to execute an implementation plan and build a companion project. Triggers on requests to build, execute tickets, start implementation, or run the shaping phase. Requires /plan to have been completed first with a tickets.yaml in place.

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added June 1, 2026
code-qualityrustbashdebuggingapi

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned June 1, 2026

npx -y skills add tools-only/X-Skills --skill 1178-name-skill_f0635125 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 1178 Name Skill F0635125?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 1178 Name Skill F0635125
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-1178-name-skill-f0635125/badge)](https://www.skillsdirectory.com/skills/tools-only-1178-name-skill-f0635125)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: build
description: >
  Use when the user wants to execute an implementation plan and build a companion project. Triggers on
  requests to build, execute tickets, start implementation, or run the shaping phase. Requires /plan
  to have been completed first with a tickets.yaml in place.
disable-model-invocation: true
argument-hint: "[client/companion]"
---

# /build -- Execute Implementation Plan

Orchestrate sub-agents to execute tickets and build the project.

**Usage:**
- `/build` -- Use current companion
- `/build [client/companion]` -- Override for specific companion

---

## Phase 1: Validate -- Resolve Companion and Load Ticket Data

### Step 1: Determine the Companion

1. If `$ARGUMENTS` contains a companion path, use that
2. Otherwise, read `tracking/current-companion.md` for the current companion
3. If no companion is set:
   ```
   No companion set. Use /companion to set or create one first.
   ```

Store the companion path (e.g., `acme-corp/api-service`) and the full directory path (`companions/[client]/[companion]/`).

---

### Step 2: Load Ticket Data and Validate Schema

**Load tickets.yaml:**

1. Check for `companions/[client]/[companion]/docs/plans/tickets.yaml`
2. If not exists, STOP:
   ```
   No tickets.yaml found for [companion].
   Run /plan first to create tickets.
   ```
3. Parse the file and extract:
   - `project_path` -- absolute path to project directory
   - `spec_file` -- relative path to implementation spec
   - `linear_parent_issue` -- parent Linear issue
   - `tickets` -- list of ticket objects

**Validate schema (MANDATORY -- do not skip):**

Check that tickets.yaml has the required structure. For each ticket, verify these fields exist:

| Field | Check |
|-------|-------|
| `id` | integer (1, 2, 3...) |
| `title` | non-empty string |
| `status` | one of: pending, in_progress, completed, skipped |
| `blocked_by` | list (may be empty) |
| `description` | non-empty string |
| `input_files` | list (may be empty) |
| `output_files` | list with at least one entry |
| `acceptance_criteria` | list with at least one entry |

Also verify top-level fields exist:
- `project_path` -- must be an absolute path that exists on disk
- `spec_file` -- must point to a file that exists

**If validation fails, STOP:**
```
## tickets.yaml Schema Validation Failed

Missing or malformed fields:
- [list each problem]

Fix tickets.yaml or re-run /plan to regenerate it.
```

**Do NOT proceed with a malformed tickets.yaml.** This is the #1 cause of silent build failures.

**Check for prior progress:**

Check `companions/[client]/[companion]/docs/plans/build-progress.md` for prior progress:
- If some tickets show `completed`, verify those output files still exist on disk
- If output files exist, skip those tickets
- If output files are missing despite "completed" status, reset those tickets to `pending`
- Resume from first `pending` ticket
- Report: "Resuming build from ticket #N (tickets 1-M already complete and verified)"

---

**Compliance Checkpoint -- Phase 1 Complete:**

```
Phase 1 Complete. Collected values:
- Companion: [client/companion]
- Project path: [project_path value]
- Spec file: [spec_file value]
- Linear parent: [linear_parent_issue value]
- Total tickets: [N]
- Schema validation: PASSED
- Previously completed: [N] (if resuming, else 0)

Proceeding to Phase 2.
```

---

## Phase 2: Dispatch -- Build Execution Order and Execute Tickets

### Step 3: Build Execution Order

From the tickets (yaml or Linear):

1. **Identify all tickets** -- These are the actual work items to execute
2. **Parse dependencies** -- Check `dependencies` field (yaml) or `blockedBy` relationships (Linear)
3. **Build execution order** using topological sort:
   - Tickets with no dependencies come first
   - Tickets are ordered so dependencies are completed before dependents
   - Identify tickets at the same "depth" that could theoretically run in parallel

Create an ordered list of tickets to execute.

---

### Step 4: Present Execution Plan and Confirm

Display the plan for user review:

```
## Build Plan: [companion]

**Source:** [tickets.yaml | Linear]
**Tickets to execute:** [N]
**Previously completed:** [N] (if resuming)

### Execution Order

| # | Ticket | Dependencies | Status |
|---|--------|--------------|--------|
| 1 | [Title] | None | pending |
| 2 | [Title] | After #1 | pending |
| 3 | [Title] | After #1 | pending |
| 4 | [Title] | After #2, #3 | pending |
...

**Estimated context sessions:** [N] (one per ticket)

---

Proceed with build? (yes/no)
```

**Wait for explicit user confirmation before proceeding.**

If user says no, ask what they'd like to adjust.

**After user confirms, set parent ticket to In Progress:**

If `linear_parent_issue` exists in tickets.yaml, update it to "In Progress":

1. Get the "In Progress" state ID from workflow states (using `mcp__linear__linear_getWorkflowStates`)
2. Update the parent issue: `mcp__linear__linear_updateIssue` with `id: [linear_parent_issue]` and `stateId: [in_progress_state_id]`

```
Build started -- [linear_parent_issue] -> In Progress
```

---

**Compliance Checkpoint -- Execution Plan Confirmed:**

```
Execution plan confirmed by user. Values:
- Tickets in order: [list ticket IDs in execution order]
- Parallel opportunities: [list any parallel groups]
- Linear parent status: In Progress

Proceeding to ticket execution.
```

---

### Step 5: Execute Tickets Sequentially

For each ticket in the execution order:

#### 5a. Announce the Ticket

```
---
## Executing Ticket [#]/[total]: [Title]
---
```

#### 5b. Read Full Ticket Details

**From tickets.yaml:**
- Title, description, acceptance criteria
- Input files and output files
- Any additional context

**From Linear (fallback):**
Use `mcp__linear__linear_getIssueById` with the ticket ID to get:
- Full title
- Complete description
- Acceptance criteria
- Any comments with additional context

#### 5b-ii. Update Linear Status to In Progress

If the ticket has a `linear_id`, update its status to "In Progress":

1. Get the team's workflow states using `mcp__linear__linear_getWorkflowStates` (team ID from prior lookup)
2. Find the state ID for "In Progress"
3. Update the issue: `mcp__linear__linear_updateIssue` with `id: [linear_id]` and `stateId: [in_progress_state_id]`

```
Ticket [#]: [Title] -- Linear status -> In Progress
```

#### 5c. Invoke Ticket Executor Agent

**This step uses the Task tool to spawn a real subagent. Do NOT simulate or reason about what the agent would do.**

**Step 5c-i: Read the agent definition**

Read `.claude/agents/ticket-executor.md`. Extract from frontmatter:
- `model:` -- the model to use (e.g., opus)
- `tools:` -- available tools (for reference)
- `skills:` -- reference skills preloaded into the agent (e.g., companion-standards)

The executor agent has `skills: [companion-standards]` in its frontmatter. This means companion-standards is preloaded into the agent automatically. Do NOT include instructions telling the agent to "read" or "load" the companion-standards skill -- it is already injected.

**Step 5c-ii: Build the complete prompt**

Construct the full prompt with ALL actual values filled in. No placeholders.

```
You are the ticket-executor agent. Your job is to implement a single ticket.

## Project Context

**Project Directory:** [ACTUAL absolute path from project_path]
**Implementation Spec:** [ACTUAL absolute path: project_path + "/" + spec_file]

## Ticket: [ACTUAL title from tickets.yaml]

**Description:**
[ACTUAL description from tickets.yaml -- full text, not a reference]

## Instructions

[ACTUAL description from tickets.yaml -- includes all implementation details]

## Acceptance Criteria

[ACTUAL acceptance_criteria list from tickets.yaml, numbered]
1. [criterion 1]
2. [criterion 2]
...

## Input Files (read these for context)

[ACTUAL input_files from tickets.yaml, as absolute paths: project_path + "/" + each path]
- [absolute path 1]
- [absolute path 2]
...

## Output Files (create or modify these)

[ACTUAL output_files from tickets.yaml, as absolute paths: project_path + "/" + each path]
- [absolute path 1]
...

## Instructions

1. Read the implementation spec for architecture context
2. Read all input files
3. Implement the changes -- create/modify the output files
4. Self-check against each acceptance criterion
5. Return your execution report in the format below

## Report Format

Return EXACTLY this format:

**Status:** COMPLETED | PARTIAL | BLOCKED

**Files Created:**
- [absolute path]

**Files Modified:**
- [absolute path]

**Acceptance Criteria Status:**
- [x] [Criterion] -- [how it was met]
- [ ] [Criterion] -- [why not met]

**Issues Encountered:**
- [any problems]
```

**Step 5c-iii: Show the prompt to the user**

Display the constructed prompt so the user can verify all values are correct.

**Step 5c-iv: Dispatch via Task tool**

```
Task tool call:
  subagent_type: general-purpose
  model: [from agent frontmatter, e.g., "opus"]
  description: "Execute ticket [#]: [short title]"
  prompt: [the complete prompt from step 5c-ii]
```

Wait for the Task tool to return the executor's report.

#### 5d. Invoke Ticket Verifier Agent

**Same pattern: real Task tool dispatch, not simulation.**

**Step 5d-i: Read the agent definition**

Read `.claude/agents/ticket-verifier.md`. Extract `model:` from frontmatter (e.g., sonnet).

The verifier agent also has `skills: [companion-standards]` preloaded. Do NOT include instructions telling the agent to "read" or "load" the skill.

**Step 5d-ii: Build the verifier prompt**

```
You are the ticket-verifier agent. You verify that a ticket was correctly implemented. You do NOT make changes -- only observe and report.

## Project Directory

[ACTUAL absolute path from project_path]

## Expected Output Files

[ACTUAL output_files as absolute paths]
- [absolute path 1]
...

## Acceptance Criteria

[ACTUAL acceptance_criteria, numbered]
1. [criterion 1]
2. [criterion 2]
...

## Executor's Report

[PASTE the executor's actual report from Step 5c]

## Instructions

1. Check that each expected output file EXISTS on disk (use Glob or Read)
2. Read each file and verify it meets the acceptance criteria
3. Cross-reference the executor's claims against actual file contents
4. Return your verification report

## Report Format

**Status:** PASS | FAIL | PARTIAL

**Files Verified:**
- [path] -- EXISTS | MISSING -- [notes]

**Acceptance Criteria:**
- [x] [Criterion] -- VERIFIED -- [evidence]
- [ ] [Criterion] -- FAILED -- [what's wrong]

**Recommendation:** PROCEED | RETRY | ESCALATE

**Issues Found:**
- [specific problems]
```

**Step 5d-iii: Dispatch via Task tool**

```
Task tool call:
  subagent_type: general-purpose
  model: [from agent frontmatter, e.g., "sonnet"]
  description: "Verify ticket [#]: [short title]"
  prompt: [the complete verifier prompt]
```

#### 5e. Orchestrator File-Existence Check (MANDATORY)

**After the verifier returns, the orchestrator MUST independently verify that output files exist.**

This is a hard guardrail. Even if the verifier says "PASS", check yourself:

```bash
ls -la [project_path]/[output_file_1]
ls -la [project_path]/[output_file_2]
...
```

For EACH output file in the ticket's `output_files` list:
- If file exists and is non-empty -> CONFIRMED
- If file is missing or empty -> FAIL (regardless of what executor/verifier claimed)

**If any output file is missing:**
```
## Orchestrator Check FAILED

Ticket [#]: [Title]
Executor claimed: COMPLETED
Verifier claimed: PASS
But these files do not exist:
- [missing file 1]
- [missing file 2]

This means the executor simulated the work instead of executing it.
Retrying with explicit instructions...
```

Then retry (see 5f).

#### 5f. Handle Results

Based on verifier recommendation AND orchestrator file check:

- **PROCEED (verifier PASS + all files confirmed):** Continue to next ticket
- **RETRY:**
  1. Pass verifier's issues AND orchestrator's missing files to executor
  2. Re-run executor with: "Previous attempt failed. These specific problems must be fixed: [list]. These files MUST exist on disk after you finish: [list]."
  3. Re-run verifier
  4. Re-run orchestrator file check
  5. Max 2 retries, then escalate
- **ESCALATE:** Stop and present issues to user

#### 5g. Update Local Progress (ONLY after file-existence confirmed)

**NEVER update build-progress.md until Step 5e confirms files exist.**

After each ticket completes AND files are confirmed:

Update `companions/[client]/[companion]/docs/plans/build-progress.md`:
- Change ticket status from `pending` to `completed`
- Add timestamp
- Log any issues that were resolved

Update `tickets.yaml`:
- Change the ticket's `status` from `pending` to `completed`

This enables recovery if context is lost mid-build.

Also report progress:
```
Ticket [#]/[total] complete: [Title]
- Files confirmed on disk: [list]
- Issues resolved: [list, if any]
```

**Update Linear status to Done:**

If the ticket has a `linear_id`, update its status to "Done":

1. Get the "Done" state ID from workflow states (cached from earlier lookup)
2. Update the issue: `mcp__linear__linear_updateIssue` with `id: [linear_id]` and `stateId: [done_state_id]`

```
Ticket [#]: [Title] -- Linear status -> Done
```

---

**Compliance Checkpoint -- After each ticket:**

```
Ticket [#]/[total] checkpoint:
- Title: [title]
- Executor status: [COMPLETED/PARTIAL/BLOCKED]
- Verifier status: [PASS/FAIL/PARTIAL]
- File existence: [ALL CONFIRMED / N missing]
- Linear status: Done
- Cumulative progress: [N]/[total] tickets complete

Proceeding to ticket [#+1].
```

---

## Phase 3: Present -- Complete Build and Report

### Step 6: Handle Failures

If executor or verifier fails:

#### Executor Failure

The implementation agent couldn't complete the ticket.
- Check if ticket is under-specified
- Check if dependencies are actually complete
- Review executor's error output

#### Verifier Failure

Implementation was attempted but doesn't pass verification.
- Review verifier's specific issues
- May need to clarify acceptance criteria
- Check if acceptance criteria are testable

#### Escalation Flow

After max retries, pause and escalate:

```
## Build Paused

**Failed ticket:** [Title] (#[N])

**Failure type:** [Executor | Verifier]

**What happened:**
[Description of the failure - specific issues from executor/verifier]

**Attempts:** [N]/2

---

**Options:**
1. **Provide additional guidance** -- I'll pass your instructions to the agent and retry
2. **Skip this ticket** -- Mark as blocked, continue (may break dependent tickets)
3. **Abort build** -- Stop here and revise the plan

Choose an option (1/2/3):
```

Handle each option:
- **Option 1:** Ask user for guidance, re-run executor with that context, re-run verifier
- **Option 2:** Mark ticket as skipped in build-progress.md, warn about dependent tickets, continue
- **Option 3:** Stop execution, summarize what was completed

---

### Step 7: Complete Build

After all tickets complete (or are skipped):

```
## Build Complete: [companion]

**Tickets completed:** [N]/[total]
**Tickets skipped:** [N] (if any)

### Files Created
- [full path to each new file]

### Files Modified
- [full path to each modified file]

### Skipped Tickets (if any)
- [Ticket title] (#N) -- [reason]

---

## Next Steps

1. **Review the companion** at `companions/[client]/[companion]/`
2. **Test the implementation** -- Run any commands or workflows
3. **Run /checkpoint** to capture session state

The project is ready for review.
```

**Set parent ticket to Done:**

If `linear_parent_issue` exists, update it to "Done":

1. Get the "Done" state ID from workflow states (cached from earlier lookup)
2. Update the parent issue: `mcp__linear__linear_updateIssue` with `id: [linear_parent_issue]` and `stateId: [done_state_id]`

```
Build complete -- [linear_parent_issue] -> Done
```

---

**Compliance Checkpoint -- Phase 3 Complete (Build Summary):**

```
Build complete. Final values:
- Companion: [client/companion]
- Tickets completed: [N]/[total]
- Tickets skipped: [N]
- Total files created: [N]
- Total files modified: [N]
- Linear parent: Done
```

---

## Phase 4: Gate -- Update Reference Projects

### Step 8: Update Reference Projects (if persona was used)

After the build completes, check whether this project was created from a persona:

1. **Check for persona** -- Read `context/decisions.md` and look for a "Persona:" entry (recorded by `/intake` Step 2b)
2. **If no persona was used** -- Skip this step
3. **If a persona was used:**

   a. Determine the organization from the project path (client portion)

   b. Locate the persona's `reference-projects.md`:
      - `companion-kits/public-kits/personas/[persona]/reference-projects.md` or
      - `companion-kits/private-kits/[org]-companion-kit/personas/[persona]/reference-projects.md`

   c. If `reference-projects.md` doesn't exist yet, create it using the template from another persona's reference-projects.md

   d. Read the built project's key files to extract reference data:
      - `CLAUDE.md` -- Configuration and voice
      - `context/decisions.md` -- Key decisions with rationale
      - `context/requirements.md` -- What was built and why
      - `context/constraints.md` -- Constraints that shaped the project

   e. Append a new reference project entry:

   ```markdown
   ## [Project Name]

   **Location:** `companions/[client]/[companion]/`
   **Client:** [client name]
   **Status:** Active, newly built

   ### Configuration

   | Dimension | Setting |
   |-----------|---------|
   | [Persona-relevant dimension] | [Value] |
   ...

   ### Key Decisions

   1. [Decision] -- [Rationale]
   ...

   ### What Works Well

   - [Learnings from the build -- what patterns emerged]

   ### Files Worth Studying

   - `[path]` -- [Why it's worth reading]
   ...
   ```

   f. If prior reference projects exist, add a comparison section:
   ```markdown
   ### Differences from [Prior Project]

   | Aspect | [Prior] | [This Project] |
   |--------|---------|----------------|
   ...
   ```

4. **Report the update:**
   ```
   Updated reference-projects.md for the [persona] persona with [companion] as a new reference implementation.
   ```

**Why this matters:** Reference projects are the most valuable part of a persona. Each successful build makes the persona better for the next project. This step captures learnings while context is fresh -- you'll never have a better view of what worked than right after building it.

---

## Key Principles

### Execute, Don't Simulate

**The #1 failure mode is reasoning about what agents would do instead of dispatching them.**

When this skill says "invoke the executor agent", it means:
1. Read the agent definition file
2. Build a complete prompt with actual values
3. Call the Task tool with the correct model
4. Wait for the real result

It does NOT mean: imagine what the agent would produce and write a plausible report.

### Agent Skills Are Preloaded

Both `ticket-executor` and `ticket-verifier` agents have `skills: [companion-standards]` in their frontmatter. This means companion-standards is injected into the agent's context at startup. Do NOT tell agents to "read" or "load" companion-standards -- it is already there. Instructing them to read it wastes tokens and creates confusion.

### Three-Layer Verification

Never trust a single source of truth:
1. **Executor claims** it created files -> but maybe it simulated
2. **Verifier confirms** files meet criteria -> but maybe it also simulated
3. **Orchestrator checks** files exist on disk -> this is the hard truth

All three must pass. The orchestrator file check (Step 5e) is the final gate.

### Stay Lightweight

The orchestrator (this main conversation) should:
- Dispatch work to executor agent via Task tool
- Dispatch verification to verifier agent via Task tool
- Independently verify file existence
- Handle failures and retries
- Track progress locally

The orchestrator should NOT:
- Do implementation work itself
- Read and analyze code in detail
- Make architectural decisions during build

### Agent Separation

- **Executor:** Implements the ticket, creates/modifies files (dispatched via Task tool, model from frontmatter)
- **Verifier:** Checks that implementation meets acceptance criteria (dispatched via Task tool, model from frontmatter)
- **Orchestrator:** Coordinates, tracks progress, verifies file existence, handles failures

### Context Isolation

Each agent invocation gets:
- Fresh context window via Task tool
- ALL necessary information in the prompt (absolute paths, full descriptions)
- No assumptions about what they "know"

This means prompts must be self-contained with full paths and complete descriptions. Never pass placeholder values.

### Sequential by Default

Execute tickets one at a time. This:
- Ensures dependencies are respected
- Makes debugging easier
- Prevents file conflicts

Parallel execution is a future optimization -- don't attempt it now.

### Verify Before Proceeding

Never assume a ticket completed successfully:
- Executor report says COMPLETED -> verify with verifier
- Verifier report says PASS -> verify files exist on disk
- Files exist on disk -> NOW mark complete

---

## Error Reference

| Situation | Response |
|-----------|----------|
| No tickets.yaml | "Run /plan first" |
| tickets.yaml schema invalid | "Schema validation failed -- list problems, stop" |
| project_path doesn't exist | "Project directory not found -- check path" |
| Executor timeout | Retry once, then escalate |
| Verifier returns RETRY | Retry with feedback, max 2 times |
| Verifier returns ESCALATE | Present issues to user |
| Orchestrator file check fails | Retry -- executor simulated instead of executing |
| "Completed" tickets missing files | Reset to pending, re-execute |
| User aborts | Summarize progress, suggest next steps |
| Resuming partial build | Verify completed ticket files exist, then resume from first pending |

---

## Progress Tracking

Throughout the build, maintain awareness of:
- Current ticket number / total
- Tickets completed successfully
- Tickets failed or skipped
- Files created/modified

Local tracking in `build-progress.md` enables:
- Recovery from context loss
- Resuming partial builds
- Audit trail of what happened

This enables accurate reporting at completion and helps with failure recovery.

Files in this skill

  • README.md791 B
  • skill.md21.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…