agentic-toolkit/skills/engineering/to-project/SKILL.md
Khalim Conn-Kowlessar 1d8a77b29b feat: scaffold agentic-toolkit (runner + skills + setup)
Initial implementation of Domna's agentic toolkit per PRD #1:

- Runner CLI (src/cli.ts) wrapping sandcastle.run() with Docker provider
- Pure modules: PhaseScheduler, PromptBuilder, FailureHandler with tests
- Project Status v2 GraphQL client + parsers with tests
- BranchManager (git/gh wrapper) and LoopOrchestrator (per-tick algorithm)
- Variant-aware: per-ticket (one PR per issue, phase-gated, exit between phases)
  vs single-pr (one PR for the whole DAG, halt on failure)
- /to-project skill that creates a repo-level project, configures the Status
  schema the runner expects, and sets initial issue statuses
- setup.sh that installs Matt Pocock skills + Domna skills via npx skills

Out of scope at v1: remote runners, Slack notifications, stacked PRs,
cross-repo projects, SHA-pinning of upstream skills (tracks HEAD until the
skills CLI supports repo#sha).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-03 12:40:26 +01:00

3.3 KiB

name description
to-project Create a GitHub Project (v2) for the issues just produced by /to-issues, configure the Status field schema the agentic-toolkit runner expects, and set initial statuses (AFK no-blockers → Ready, AFK with blockers → Backlog, HITL → Needs human). Use after /to-issues to make a project the runner can execute against.

To Project

Create a repo-level GitHub Project (v2) from the issues /to-issues just produced, and prepare it so the Domna agentic-toolkit runner can execute against it without further configuration.

The issue tracker and issue numbers should already be known from the conversation context (the most recent /to-issues run). If they aren't, ask the user for the issue numbers explicitly.

Process

1. Gather context

Confirm with the user:

  • Project name — defaults to the PRD title if a PRD is in context.
  • Project description — defaults to a one-line summary of the PRD.
  • Repo — the repo that owns the project. Defaults to the current gh repo.
  • Issue set — the issue numbers to add. Defaults to issues created in the most recent /to-issues run.

2. Create the project

Use gh project create (or the GraphQL createProjectV2 mutation) at the repo level. Project visibility defaults to whatever the repo's default is. Capture the project number and node id from the response.

3. Configure the Status field

The runner requires a single-select field named Status with these options, in this order:

  1. Backlog
  2. Ready
  3. In progress
  4. In review
  5. Needs human
  6. Done

If the project came with a default Status field, replace its options to match exactly — extra options are fine; missing ones must be added. If no Status field exists, create one.

4. Add issues to the project

For each issue in the issue set, add it to the project as an item.

5. Set initial statuses

For each issue, decide the starting status based on its labels and Blocked by references:

Issue properties Starting status
Has hitl or ready-for-human label Needs human
Has Blocked by references to issues in this set Backlog
Otherwise (AFK, no remaining blockers) Ready

Apply the status via the updateProjectV2ItemFieldValue mutation.

6. Comment on each issue

For each issue in the project, post a comment linking back to the project URL so the issue page shows the project context. One sentence is enough; example:

Tracked in project:

7. Confirm to the user

Print:

  • Project URL
  • Number of issues added, broken down by initial status (e.g. "3 Ready, 2 Backlog, 1 Needs human")
  • Suggested next command, e.g.:
    cd path/to/agentic-toolkit
    GITHUB_TOKEN=... npx . run --project <N> --mode per-ticket --owner <OWNER> --repo <REPO> --target-repo <TARGET>
    

Notes

  • The project is repo-level, not org-level, by design (smaller blast radius, simpler permissions). If you need a cross-repo project, do it manually for now.
  • Projects created by this skill are intended to be short-lived: scoped to one PRD's worth of work, archived or deleted on completion.
  • The runner's setStatus calls assume the option names listed above. Don't rename or translate them.