skills/agentic-e2e-flow/SKILL.md
--- name: agentic-e2e-flow description: High-level end-to-end orchestrator for autonomous feature delivery. Sequences swarm-research → grill-with-docs → write-a-prd → slice-into-issues → swarm-or-ralph → gh-ship. Defers to /ro:repo-mode for output target — `personal` repos publish PRD and slices as GitHub issues using Matt Pocock's agent-native repo pattern; `work` repos run the same pipeline fully local in gitignored `.ralph/` so nothing leaks to the work GH/Jira/ADO project. Use when the user
npx skillsauth add RonanCodes/ronan-skills skills/agentic-e2e-flowInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Thin sequencer for the full Pocock-style feature pipeline. This skill does not implement anything itself — it drives the underlying skills in order, with explicit confirmation gates between phases. The user can pause, iterate, or skip any phase.
User says any of:
Do NOT use for:
/ro:swarm directly)/ro:gh-ship)/ro:new-tanstack-app first, then this)Implements agent-native-repo-pocock pattern — Matt Pocock's repo shape where:
.ralph/ local files when a gh remote exists)ready-for-agent (or per-project synonym), gates the queue## Problem Statement, slices open with ## Parent\n\n#<N>CONTEXT.md (DDD glossary) and lazy docs/adr/ ADRs accumulate during grill-with-docsCloses #<slice> so slices auto-close on merge; parent stays open until all children closemode=""
[ -f .claude/repo-mode ] && mode="$(tr -d '[:space:]' < .claude/repo-mode)"
[ -z "$mode" ] && [ -f "$HOME/.claude/repo-mode" ] && mode="$(tr -d '[:space:]' < "$HOME/.claude/repo-mode")"
case "$mode" in personal|work) ;; *) mode="unset" ;; esac
mode == work → work pipeline: skip every GH-side probe below. PRD goes to .ralph/<name>/prd.md, slices to .ralph/issues/*.md, build via /ro:planner-worker --skip-grill (no --github) or /ro:ralph --source local --kanban, ship via local commits + branch push only. Phase 0 (drafts inbox) is a no-op in work mode (no prd:draft issues to scan). Gate 6 (ship) skips gh pr and stops at "branch ready locally — open a PR in your work GH/Azure DevOps/Bitbucket project manually if appropriate".mode == personal → personal pipeline (the GH-issue agent-native flow described below). Continue with the agent-native pre-flight checks.mode == unset → run the first-run prompt from /ro:repo-mode § "First-run prompt", persist, then re-resolve. The auto-suggest is based on gh repo view --json owner -q .owner.login (RonanCodes / Simplicity-Labs → personal; anything else → work).When mode == personal, verify the repo is in agent-native shape:
# 1. gh remote present
gh repo view --json url 2>/dev/null
# 2. ready-for-agent label exists
gh label list --json name | jq '.[] | select(.name == "ready-for-agent" or .name == "Sandcastle")' | head
# 3. CONTEXT.md present (or CONTEXT-MAP.md for multi-context)
test -f CONTEXT.md || test -f CONTEXT-MAP.md
# 4. docs/agents/* scaffolded
test -d docs/agents
If any check fails, offer to bootstrap before proceeding:
gh remote → offer gh repo create (or suggest the user might want /ro:repo-mode work instead if this is actually a work repo)gh label create ready-for-agent --color FBCA04 --description "Issues queued for autonomous agent"CONTEXT.md → tell user this will be created lazily during grill-with-docsdocs/agents/ → offer to drop in templates from ~/.claude/templates/docs-agents/ (the templates explain backlog/triage-labels/domain conventions)The user can skip bootstrap and proceed anyway. The downstream skills tolerate partial setup.
Before generating a fresh PRD in gate 3, check whether the user already has ideas sitting in the prd:draft inbox. The inbox is the agent-native repo's "idea capture" — issues labelled prd:draft with freeform bodies that have NOT been grilled into Pocock's 7-section template yet.
gh issue list --label prd:draft --state open --json number,title,url,updatedAt --limit 20
If N >= 1 open drafts, ask via AskUserQuestion ONCE (do not be intrusive; if the user already named a feature, default-proceed if they don't pick a draft):
"You have N open draft PRDs in this repo. Grill one of those, write a fresh PRD, or proceed without checking?"
Options:
"Grill #<num> — <title>" (cap at first ~60 chars of title)"Write a fresh PRD" (the default — proceeds to gate 1/2/3 as normal)"Proceed without checking" (skip the question for the rest of this session)On user pick:
/grill <issue-number> for gate 2; the grill flow rewrites the body into the 7-section template and the user swaps the label from prd:draft to the gate label (e.g. ready-for-agent). After grill, that issue IS the parent PRD; skip gate 3 (write-a-prd) and proceed directly to gate 4 (slice-into-issues) with --prd <issue-number>.If N == 0, this phase is a silent no-op — proceed straight to gate 1.
prd:draft issues are NEVER picked up by gate 5 (build). Drafts are explicitly excluded from ready-for-agent-labelled queries downstream. See /ro:ralph § "Filter / scope: prd:draft is NEVER picked up" and /ro:planner-worker § "Filter / scope: prd:draft is NEVER picked up" for the gh-query-level guards.
┌─ drafts ─┐ ┌─ swarm ─┐ ┌─ grill ─┐ ┌─ write-prd ─┐ ┌─ slice ─┐ ┌─ build ─┐ ┌─ ship ─┐
│ inbox │→ │ optl. │→ │ docs │→ │ → GH issue │→ │ → GH │→ │ swarm │→ │ gh-ship│
│ check │ │ research│ │ CONTEXT │ │ parent │ │ children│ │ or ralph│ │ merge │
└──────────┘ └─────────┘ └─────────┘ └─────────────┘ └─────────┘ └─────────┘ └────────┘
phase 0 gate 1 gate 2 gate 3 gate 4 gate 5 gate 6
At each gate, summarise what was produced, ask "ready to proceed, iterate, or skip?". Default action is proceed.
Skip when:
--skip-swarm passedOtherwise invoke /ro:swarm --research (or /ro:planner-worker --research-mode) with the feature topic. Output: a short research brief in the conversation context. No files written yet.
Invoke /grill (the dispatcher). In an agent-native repo it routes to grill-with-docs (Matt's symlinked skill), which stress-tests the plan against the codebase and CONTEXT.md, sharpens domain language as you go, and writes lazy ADRs to docs/adr/ when hard-to-reverse decisions crystallise.
Output side-effects: updated CONTEXT.md, possibly new docs/adr/000N-*.md.
Invoke /ro:write-a-prd. In a repo with gh remote, the skill defaults to publishing the PRD as a GitHub issue using Matt's 7-section template:
## Problem Statement
## Solution
## User Stories
1. As a <actor>, I want <feature>, so that <benefit>
2. ...
## Implementation Decisions
## Testing Decisions
## Out of Scope
## Further Notes
Apply the ready-for-agent label (or project synonym). Output: a new GH issue number, call it $PARENT.
Confirmation gate: show the published issue URL, ask "PRD looks right?".
Invoke /ro:slice-into-issues. In a repo with gh remote, the skill defaults to publishing each vertical slice as a child GH issue, body template:
## Parent
#$PARENT
## What to build
<concise end-to-end description>
## Acceptance criteria
- [ ] ...
- [ ] ...
## Blocked by
#<sibling-issue-number> ← or "None - can start immediately"
All children get the ready-for-agent label. Children are published in dependency order (blockers first) so Blocked by can reference real issue numbers.
Confirmation gate: show the children's URLs as a list. User can edit titles/bodies before the build phase starts.
Pick by --build flag:
--build swarm (default): /ro:planner-worker --source github:ready-for-agent. Parallel multi-agent build across worktrees. Best when slices are independent and you want speed. Opus 4.7 is the default merger. One pass — stops when the wave returns.--build ralph: /ro:ralph --source github:ready-for-agent --reviewer opus. Sequential single-agent loop with Pocock implementer/reviewer split, Opus 4.7 as the default reviewer. Best when slices are dependency-chained (Blocked by graph is mostly linear) or when you want one PR open at a time.--build night-shift: /ro:night-shift --scope auto-slice (or full-drain if drafts exist). Multi-wave drain + refill loop. Best when you want to close the WHOLE backlog overnight, not just the parent PRD this flow produced. Opens with the four-question scope grill from /ro:night-shift US-0 unless --yes is passed.The build skill picks ready-for-agent-labelled issues whose body opens with ## Parent (slices, not the parent PRD), respects Blocked by, opens one PR per slice with Closes #<slice-number> in the PR body, and labels the issue in-progress while working.
On each slice complete, automatic transition to gate 6 for that slice.
Always fires /ro:completion-report then /ro:pushover at the end of gate 5 (done / paused / blocked / crashed). The report renders per-PR diffs + per-file rollback to <repo>/.completion-reports/<ts>-<slug>.html; the Pushover ping carries the report path as a --url deep link so tapping the phone notification opens the diff browser. Confirmed 2026-05-14, autonomous build runs always get a phone ping regardless of whether the user typed "AFK" or "night shift". Skip both tail calls only when --plan-only or --no-ping. Skill details: ~/Dev/ronan-skills/skills/completion-report/SKILL.md.
/ro:gh-ship drives each PR through review → merge → deploy-verify. On merge, GitHub auto-closes the linked slice via the Closes #N in the PR body. The parent PRD issue stays open.
When all child slices are closed, comment on the parent PRD: "All slices merged. Closing." and close the parent.
If the flow is interrupted (context switch, sleep, crash), invoke the skill again with --feature "<title>". The skill detects state by:
gh issue list --label ready-for-agent --search "<title>" → finds the parentgh issue list --search "Parent #$PARENT" → finds childrenPick up at the first incomplete gate.
If no gh remote is configured, the flow falls back to local files:
.ralph/prd.json (write-a-prd's legacy default).ralph/issues/*.md (slice-into-issues's legacy default)/ro:ralph --kanban (reads .ralph/issues/)User should be warned at pre-flight that they're in fallback mode and offered to gh repo create to upgrade.
development
--- name: worktree description: Coordinate multiple agents on one repo via a worktree-lock pool, so two agents never clobber each other's working tree. Acquire the first free slot (main, then beta/gamma… worktrees, created on demand), work there on your own branch, release when you've pushed. Use before modifying any repo that might be in use by another agent (factory, dataforce, etc.), or whenever you're told a repo is being worked on. Backed by `ro worktree`. category: development argument-hin
testing
--- name: ship description: Ship a feature branch the local-CI-first way — run the full local gate, push, open a PR, squash-merge, then deploy, without waiting on GitHub Actions. Use when a branch is ready for main and you want it merged and deployed now. Reads CI policy from `ro ci` (default skips remote CI because GitHub Actions billing keeps hitting limits). Sibling to /ro:gh-ship (waits on GitHub checks) and /ro:cf-ship (the deploy half). Triggers on "ship it", "ship this", "merge and deploy
testing
--- name: setup-logging description: Set up (or audit) the observability stack in a TanStack Start + Cloudflare Workers app so it is "diagnosable by default" — structured logging (logtape) with a request context carrying trace_id + userId + tenant/orgId, a trace_id propagated FE→BE→logs→Sentry→PostHog, Cloudflare Workers observability enabled, and Sentry + PostHog wired. Two modes: `setup` (wire it into an app) and `audit` (check an existing app + report gaps). Use when scaffolding a new app, wh
development
Manage credentials INSIDE the active ~/.claude/.env file — read which token/account to use for a given app (Simplicity vs Dataforce vs Ronan-personal), add or update a secret WITHOUT it passing through the chat (an interactive Terminal window prompts for it), and track secrets that were exposed in a transcript so they get rotated. Sibling to /ro:context (which switches WHICH env file is active). Use when the user wants to add an API key/token/secret, asks "which credential do I use for X", needs the env organized/labelled, or a secret was pasted into the chat and should be rotated.