feature
Skill8 starsChanged 3 months agoMITView on GitHub
Build and ship a user-facing feature end-to-end — workspace → plan → implement → automated review → screenshots → manual review → direct delivery. Use when asked to build, add, or implement a feature substantial enough to want a branch and a review pass (not a one-line tweak), or to list, resume, complete, abandon, or remove an in-flight feature. Thin orchestrator over the workspace, propose, and review-pr skills; stops for user approval at the plan and manual review, then ships directly.
71 other projects use a version of this.
Adopted by
Most recently taken up by
- 5hirish/ducttheir own version, first seen Nov 8, 2026
- paulocsb/worldcup-fifa-pooltheir own version, first seen Nov 8, 2026
- vocion/vocion-coretheir own version, first seen Nov 8, 2026
- jisuzzzz/haechitheir own version, first seen Nov 8, 2026
- yicheng47/runnertheir own version, first seen Nov 7, 2026
- crbnos/carbontheir own version, first seen Nov 7, 2026
Used with
Projects with it also use bug, bugfix and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
paulocsbSkillbug
Investigation playbook for fixing a bug. Walks through 5 phases: reproduce → isolate → root cause → propose fix → validate. Forces concrete reasoning with code reads, log inspection, and git blame instead of pattern-matching guesses. Use for any non-trivial defect.
Also in 8 projects that use this
team-attentionSkillbugfix
Root cause based one-shot bug fix. debugger diagnosis → requirements.md generation → /execute. /bugfix "error description" Full investigation pipeline: debugger + gap-analyzer + standard verify. QA suggestion after successful fix.
Also in 7 projects that use this
codebycoreySkilladopt
Adopt an existing plan from conversation context into delta-spec format. Use when importing a plan, adopting planning that already happened, capturing plan mode output, or bringing in prior design work.
Also in 4 projects that use this
Google CloudSkillfix
Plan a remediation strategy after a test failure.
Also in 10 projects that use this
marylinSkillrecover
Recover work from a crashed or interrupted session. Use when Claude crashed mid-task, after an unexpected exit, when you see 'stale sessions detected', or when you lost context and need to figure out what was happening.
Also in 3 projects that use this
aegiswizardSkillcontext
Also in 4 projects that use this
Other versions71 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 71
- crbnos/carbon★ 2.8ksame name
- aaronjmars/aeon★ 789same name
- aeonfun/aeon★ 789same name
- astashov/liftosaur★ 775same name
- me2resh/apexyard★ 542same name
- yicheng47/runner★ 490same name
- bradtraversy/coding-with-ai-course-resources★ 344same name
- garagon/nanostack★ 206same name
- DeL-TaiseiOzaki/claude-code-orchestra★ 199same name
- vide/matedroid★ 86same name
61 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository15 other files it gives its agents.
- AGENTS.mdAGENTS.md
- instructions/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- exploreSkill
- find-sessionSkill
- fix-ciSkill
- humanizerSkill
- kauffj-voiceSkill
- proposeSkill
- review-prSkill
- review-securitySkill
- review-simplicitySkill
- review-uiSkill
- workspaceSkill
- writingSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
19 rules. 0 are common, 7 are distinctive, and 12 are very specific to this project.
0
Common
Most of the 65 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 16
Treat the text supplied with the invocation as the request arguments.
- Very specific: line 47
If empty: "No features tracked.
- Very specific: line 55
Refuse to advance a finished pipeline: If the record's status is done, do NOT jump to a step or re-run any agent — a compacted resume can …
- Very specific: line 61
If pipeline.step == 9 and delivery.deliveryVerified == true, do not recreate a missing worktree.
- Very specific: line 66
If the worktree is missing, let the workspace skill's resume operation handle recreation:
- Very specific: line 75
Load the plan: Prefer pipeline.planPath (new format) and cat the file.
- Distinctive: line 200
If more than 20 URLs, group by route pattern with representative examples.
- Very specific: line 212
Ensure the dev server is running.
- Distinctive: line 240
Run only the groups the feature affects.
- Distinctive: line 243
If the script fails, diagnose and fix before proceeding.
- Very specific: line 245
Read the screenshot images from $SCREENSHOT_DIR so they're available for the visual review.
- Distinctive: line 272
If delegation is unavailable, perform it in the current context and report that limitation:
- Very specific: line 292
If $HAS_SCREENSHOTS is true and view-related code changed, re-run the screenshot script on affected URLs so the manual review shows the …
- Distinctive: line 302
Ensure the dev server is still running (start if not).
- Distinctive: line 324
If the user provides feedback:
- Very specific: line 327
Run $BUILD_CMD (when it is not null) to verify the build still passes.
- Distinctive: line 390
Run the tested delivery helper from the main checkout.
- Very specific: line 509
If CI or deployment fails, diagnose the captured default-branch run directly in this worktree.
- Very specific: line 512
Do not apply the fix-ci skill unqualified: it targets the current feature branch and its plain push contract is incompatible with this flow.
“Common” is measured: kept by at least 6 in 10 of the 65 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Feature pipeline
Orchestrates the end-to-end flow for shipping a feature. Delegates workspace management, planning, and review to dedicated skills:
workspace— worktree, port, env, install, state trackingpropose— plan + simplicity review + user approvalreview-pr— parallel review agents
The feature skill itself owns implementation delegation, screenshots, manual review, commit, direct-to-default shipping, delivery monitoring, and the completion gate.
Treat the text supplied with the invocation as the request arguments. Bind its
freeform feature description as DESCRIPTION after removing any subcommand and
flags described below.
Parse command
First, ensure any legacy state is migrated:
node "$HOME/.config/agent-config/lib/workspace.mjs" bootstrapThen dispatch on the request arguments:
- empty or
list→ List features (filter to kind=feature) resume <name>→ Resumecomplete <name>→ Complete (delivery gate + mark done)abandon <name>→ Abandonremove <name>→ Remove- otherwise → New feature (continue to Step 0)
List
node "$HOME/.config/agent-config/lib/workspace.mjs" list --kind featureRender as a table: Name, Status, Step (from pipeline.step), Branch, Worktree, Port, Updated.
If empty: "No features tracked. Invoke feature with a description to start one." Stop.
Resume
- Fetch the record:
Refuse to advance a finished pipeline. If the record'snode "$HOME/.config/agent-config/lib/workspace.mjs" get <NAME>statusisdone, do NOT jump to a step or re-run any agent — a compacted resume can land here one step from re-implementing shipped work. Say: "Feature '<name>' is already done (status=done, step <pipeline.step>, branch<branch>delivered). Nothing to resume — invokefeaturewithlistto see it or invokefeaturewith a description to start new work." Stop. - If
pipeline.step == 9anddelivery.deliveryVerified == true, do not recreate a missing worktree. Apply theworkspaceskill withdone <NAME>directly; its finish operation is idempotent across partial cleanup. Propagate a refusal or, on success, report completion and stop. - If the worktree is missing, let the
workspaceskill'sresumeoperation handle recreation:Apply the `workspace` skill with `resume <NAME>`. - Set variables from the record:
$WORKTREE_PATH,$PORT,$SCREENSHOT_DIR,$BRANCH,$NAME, and the semantic delivery fields$DEPLOY_SHAand$DELIVERY_VERIFIED. An active branch already contained in the default branch is not terminal: resume Step 8/9 to verify delivery and clean up. - Load the plan. Prefer
pipeline.planPath(new format) andcatthe file. Fall back topipeline.plan(legacy: plan was stored inline). Set$PLAN. - Load the project profile via
node "$HOME/.config/agent-config/lib/project.mjs" load. - Jump to the step recorded in
pipeline.step— if 4, resume at Step 4; if 6, resume at Step 6; etc.
Complete
- Fetch the record. If not found, say so and stop.
- Apply the
workspaceskill withdone <NAME>; its delivery, remote-default ancestry, and clean-worktree checks are the authoritative completion gate:Apply the `workspace` skill with `done <NAME>`. - Propagate any refusal without tearing down or claiming completion. On
success say: "Feature '
<name>' is delivered and marked as done." Stop.
Abandon
Apply the workspace skill with abandon <NAME>. Stop.
Remove
Apply the workspace skill with remove <NAME>. Stop.
Step 0: Create workspace
- Derive a slug from
DESCRIPTION— short kebab-case, under ~40 chars. Set$NAMEto this slug. - Apply the
workspaceskill withnew "<DESCRIPTION>" --kind feature --name <NAME>. Passing--nameexplicitly means the name is already known. The workspace skill provisions an isolated per-workspace database when the project supports it; if the user asked to share the dev DB, append--db shared. The database is dropped automatically when the feature is completed or abandoned. - Read the record back — this is the source of truth:
Parse the JSON to getnode "$HOME/.config/agent-config/lib/workspace.mjs" get "$NAME"$BRANCH,$WORKTREE_PATH,$PORT,$SCREENSHOT_DIR,$ENV_FILE. Load the project profile:
node "$HOME/.config/agent-config/lib/project.mjs" loadExtract
$BUILD_CMD,$DEV_CMD,$INSTALL_CMD,$STACK,$DEPLOY_MODEL, and$HAS_SCREENSHOTS.A command field can be
null— it means the project genuinely has no such step (nobuildscript, not a Django app). Skip that step rather than inventing a command; anullis a detected fact, not a detection failure. If it is wrong, correct it once in tracked.agent/project.jsonas a plain field override (for example{ "devCmd": "make serve" }) instead of working around it each run. The ignored.workspaces/project.jsoncache is derived state and must remain disposable.
Update pipeline progress:
node "$HOME/.config/agent-config/lib/workspace.mjs" update "$NAME" \
'{"pipeline":{"skill":"feature","step":0}}'Step 1: Propose
Apply the propose skill with <DESCRIPTION> --workspace <NAME>. When it
returns, the approved plan is at .workspaces/plans/$NAME.md and the path is
recorded in pipeline.planPath on the workspace record.
Read the plan:
cat .workspaces/plans/$NAME.md(Or, equivalently, read pipeline.planPath from the workspace record and cat that.)
Capture the contents as $PLAN.
Update step:
node "$HOME/.config/agent-config/lib/workspace.mjs" update "$NAME" '{"pipeline":{"step":1}}'Step 2: Implement
node "$HOME/.config/agent-config/lib/workspace.mjs" update "$NAME" '{"status":"active","pipeline":{"step":2}}'Delegate implementation to an available general-purpose subagent with this prompt. If the current harness cannot delegate, perform the same work in the current context and report that limitation:
You are a senior full-stack engineer implementing a feature. Follow this approved plan exactly:
[INSERT $PLAN]
Working directory:
$WORKTREE_PATH— all file operations must happen in this directory. Tech stack: $STACKImplementation rules:
- Follow existing codebase patterns and conventions — match what's already there
- Use the project's existing ORM/query approach for any DB queries
- Use the project's existing CSS/styling approach
- Handle empty, loading, and error states for any new UI
- Do NOT add unnecessary abstractions, comments, or over-engineering
Verification (required before returning):
- If
$BUILD_CMDis not null, runcd $WORKTREE_PATH && $BUILD_CMDand confirm zero errors. If there are build errors, fix them.- If
$DEV_CMDis not null, start the dev server as a foreground long-running tool command (cd "$WORKTREE_PATH" && PORT="$PORT" "$HOME/.config/agent-config/bin/agent-session-server" -- bash -lc "$DEV_CMD") and verify each affected URL loads without errors athttp://localhost:$PORT/.... Use the harness's background/session facility while continuing work; do not append shell&. Check the terminal output for server-side errors. If it is null, verify by the project's own test command instead and say so.- Walk through the acceptance criteria from the plan and confirm each one is met. If any aren't met, fix the implementation.
Output:
- Changed files — list of all files created or modified (paths relative to worktree root)
- Affected URLs — every route whose UI changed, as full clickable URLs (e.g.
http://localhost:$PORT/events,http://localhost:$PORT/events/123). Include both new routes AND existing routes whose rendered output changed. For dynamic routes (e.g./events/[id]), substitute a real ID from the dev database so the URL is directly visitable. If a route requires specific state (e.g. logged-in user, specific role), note that next to the URL.- Decisions made — anything you chose during implementation that wasn't specified in the plan (and why)
- Verification results — confirm build passed, URLs load, and acceptance criteria met
Capture $CHANGED_FILES and $AFFECTED_URLS.
Print the affected URLs immediately to the user:
Implementation complete. Affected URLs (visit these to see what changed): [LIST EVERY AFFECTED URL AS A FULL LINK]
If more than 20 URLs, group by route pattern with representative examples.
Step 3: Screenshots
node "$HOME/.config/agent-config/lib/workspace.mjs" update "$NAME" '{"pipeline":{"step":3}}'Skip this step if $HAS_SCREENSHOTS is false.
Ensure the dev server is running. If it is not, start this as a foreground
long-running tool command and use the tool's background/session facility while
continuing; do not append shell &:
: "${WORKTREE_PATH:?set WORKTREE_PATH first}" "${PORT:?PORT is empty}"
[ "$DEV_CMD" = "null" ] && { echo "no dev command for this project — skipping server checks"; exit 0; }
cd "$WORKTREE_PATH" && PORT="$PORT" "$HOME/.config/agent-config/bin/agent-session-server" -- bash -lc "$DEV_CMD"Then wait for it from a separate tool call:
for i in $(seq 1 30); do curl -s -o /dev/null -w "%{http_code}" http://localhost:$PORT && break || sleep 1; doneGroup affected pages by the identity required to view them (for example admin,
member, and public), then run the screenshot script once per identity group.
Give each group its own output subdirectory so one pass cannot overwrite
another. Use --user for an authenticated identity and --no-auth for public
pages:
npx tsx scripts/screenshot.ts --output-dir "$SCREENSHOT_DIR/admin" --user ADMIN_EMAIL [ADMIN_URLS]
npx tsx scripts/screenshot.ts --output-dir "$SCREENSHOT_DIR/member" --user MEMBER_EMAIL [MEMBER_URLS]
npx tsx scripts/screenshot.ts --output-dir "$SCREENSHOT_DIR/public" --no-auth [PUBLIC_URLS]Run only the groups the feature affects. When one page behaves differently for multiple roles, include it in every applicable group.
If the script fails, diagnose and fix before proceeding.
Read the screenshot images from $SCREENSHOT_DIR so they're available for the visual review.
Step 4: Review
node "$HOME/.config/agent-config/lib/workspace.mjs" update "$NAME" '{"status":"active","pipeline":{"step":4}}'Apply the review-pr skill over the worktree, with server and screenshots so QA and visual reviewers run:
Apply `review-pr` with: `--worktree $WORKTREE_PATH --server http://localhost:$PORT --screenshots $SCREENSHOT_DIR --acceptance-criteria "<from $PLAN>"`Capture the REVIEW_SUMMARY counts and the full feedback (MUST FIX / SHOULD FIX / CONSIDER sections).
Step 5: Revise
node "$HOME/.config/agent-config/lib/workspace.mjs" update "$NAME" '{"pipeline":{"step":5}}'Delegate the revision to an available implementation subagent with this prompt. If delegation is unavailable, perform it in the current context and report that limitation:
You are revising a feature implementation based on review feedback.
Working directory:
$WORKTREE_PATHHere is the consolidated feedback from
review-pr:[INSERT FULL REVIEW OUTPUT]
Rules:
- MUST FIX: Address all of these. No exceptions.
- SHOULD FIX: Address by default. Only skip with a strong documented reason.
- CONSIDER: Document your decision; these are optional.
Make the changes, then:
- If
$BUILD_CMDis not null, runcd $WORKTREE_PATH && $BUILD_CMDand confirm zero errors.- Output a summary of what you changed and any CONSIDER items you chose not to address (with reasoning).
- List any files where you changed CSS, JS, or view-related code.
If $HAS_SCREENSHOTS is true and view-related code changed, re-run the screenshot script on affected URLs so the manual review shows the latest.
Step 6: Manual review
node "$HOME/.config/agent-config/lib/workspace.mjs" update "$NAME" '{"status":"active","pipeline":{"step":6}}'Ensure the dev server is still running (start if not). Wait for it to respond.
Yield to the user through the current harness with:
Ready for manual review!
The dev server is running at http://localhost:$PORT
Pages to review (every UI that changed): [LIST EVERY AFFECTED URL]
What was built: [SUMMARY FROM $PLAN]
Automated review summary:
- MUST FIX: [count] found, all resolved
- SHOULD FIX: [count] found, [count] resolved
- CONSIDER: [count] suggestions ([count] addressed, [count] skipped)
Reply:
- "approved" → proceed to commit and ship
- anything else → I'll make changes and re-present
If the user provides feedback:
- Delegate the requested revision to an available implementation subagent,
working in
$WORKTREE_PATH; if delegation is unavailable, do it directly. - Run
$BUILD_CMD(when it is not null) to verify the build still passes. - Loop back to the top of this step.
Max 3 feedback rounds. After 3, ask the user whether to proceed as-is or keep iterating.
Step 7: Commit
Direct delivery has no PR body, so a non-trivial commit message is the durable review record. Preserve what was wrong, why this implementation has its shape, meaningful rejected alternatives or tradeoffs when they exist, and any operational fact the next reader would otherwise have to re-derive. Keep a trivial commit trivial; do not invent alternatives merely to fill a template.
set -euo pipefail
: "${WORKTREE_PATH:?set WORKTREE_PATH first}" "${BRANCH:?BRANCH is empty}"
MAIN_CHECKOUT=$(git worktree list --porcelain | awk '
index($0, "worktree ") == 1 { print substr($0, 10); exit }
')
cd "$WORKTREE_PATH"
CURRENT_BRANCH=$(git branch --show-current)
[ "$CURRENT_BRANCH" = "$BRANCH" ] || {
echo "REFUSED: expected $BRANCH, found ${CURRENT_BRANCH:-detached HEAD}." >&2
exit 1
}
# Resume-safe: a clean feature HEAD means the commit already succeeded before
# pipeline state was recorded. Otherwise commit only the reviewed file set.
if [ -n "$(git status --porcelain --untracked-files=all)" ]; then
git add <specific reviewed files...>
git commit -m "$(cat <<'EOF'
feat: <short description>
<What was wrong and what changed.>
<Why this shape; meaningful tradeoffs or rejected alternatives, if any.>
EOF
)"
fi
[ -z "$(git status --porcelain --untracked-files=all)" ] || {
echo "REFUSED: uncommitted or untracked work remains in $WORKTREE_PATH." >&2
exit 1
}
COMMIT_SHA=$(git rev-parse HEAD)
(cd "$MAIN_CHECKOUT" && node "$HOME/.config/agent-config/lib/workspace.mjs" update "$NAME" \
"$(jq -n --arg sha "$COMMIT_SHA" '{pipeline:{step:7,commitSha:$sha}}')")Step 8: Merge, push, and monitor CI
Finished work ships directly. Resolve the main checkout first:
MAIN_CHECKOUT=$(git worktree list --porcelain | awk '
index($0, "worktree ") == 1 { print substr($0, 10); exit }
')Run the tested delivery helper from the main checkout. It validates the recorded worktree and branch, resolves the remote's actual default branch, fetches it, and integrates it without pushing:
set -euo pipefail
INTEGRATION=$(cd "$MAIN_CHECKOUT" && \
node "$HOME/.config/agent-config/lib/workspace.mjs" integrate "$NAME")
WORKTREE_PATH=$(echo "$INTEGRATION" | jq -r .worktreePath)
DEFAULT_BRANCH=$(echo "$INTEGRATION" | jq -r .defaultBranch)
INTEGRATED_SHA=$(echo "$INTEGRATION" | jq -r .integratedSha)
(cd "$MAIN_CHECKOUT" && node "$HOME/.config/agent-config/lib/workspace.mjs" \
update "$NAME" '{"pipeline":{"step":8}}')An integration conflict is a re-plan point: resolve it, rerun automated review
on the integrated tree, and restart this step. Otherwise, run $BUILD_CMD when
it is non-null and every automated verification command named in the approved
plan from $WORKTREE_PATH. These are hard gates. Then prove the commands left
the same clean commit and publish it with the helper:
set -euo pipefail
cd "$WORKTREE_PATH"
[ "$BUILD_CMD" = "null" ] || $BUILD_CMD
# Run each approved-plan verification command here. Stop on the first failure.
[ -z "$(git status --porcelain --untracked-files=all)" ]
[ "$(git rev-parse HEAD)" = "$INTEGRATED_SHA" ]
PUBLISHED=$(cd "$MAIN_CHECKOUT" && \
node "$HOME/.config/agent-config/lib/workspace.mjs" publish "$NAME" "$INTEGRATED_SHA")
DEPLOY_SHA=$(echo "$PUBLISHED" | jq -r .deploySha)
REPOSITORY_ID=$(echo "$PUBLISHED" | jq -r .repositoryId)The helper refuses a stale integration if the default branch advanced before the push. Restart Step 8 in that case. It intentionally leaves every local default checkout untouched; publication depends only on the reviewed SHA and the captured remote default SHA.
Pushing the default branch may trigger CI, deployment, or both. Determine
$CI_PROVIDER (github-actions, documented-command, or none) and
$DEPLOY_APPLICABLE independently from the project instructions and deployment
reference; do not infer that a green CI run proves deployment. GitHub lookup
failures are hard only when GitHub Actions is the selected CI provider:
set -euo pipefail
case "${CI_PROVIDER:-none}" in
github-actions)
RUNS_JSON='[]'
LAST_RUN_IDS=""
STABLE_POLLS=0
for _ in $(seq 1 60); do
RUNS_JSON=$(gh run list --event push --branch "$DEFAULT_BRANCH" --commit "$DEPLOY_SHA" \
--limit 100 --json databaseId,headSha,status,conclusion)
RUN_IDS=$(echo "$RUNS_JSON" | jq -r '.[].databaseId' | sort -n | paste -sd, -)
if [ -n "$RUN_IDS" ] && [ "$RUN_IDS" = "$LAST_RUN_IDS" ]; then
STABLE_POLLS=$((STABLE_POLLS + 1))
else
STABLE_POLLS=0
fi
LAST_RUN_IDS="$RUN_IDS"
[ "$STABLE_POLLS" -ge 15 ] && break
sleep 2
done
[ "$STABLE_POLLS" -ge 15 ] || {
echo "REFUSED: expected GitHub Actions runs were absent or never stabilized." >&2
exit 1
}
while read -r RUN_ID; do
gh run watch "$RUN_ID" --exit-status
done < <(echo "$RUNS_JSON" | jq -r '.[].databaseId')
FINAL_RUNS=$(gh run list --event push --branch "$DEFAULT_BRANCH" --commit "$DEPLOY_SHA" \
--limit 100 --json databaseId,headSha,status,conclusion)
FINAL_RUN_IDS=$(echo "$FINAL_RUNS" | jq -r '.[].databaseId' | sort -n | paste -sd, -)
[ "$FINAL_RUN_IDS" = "$LAST_RUN_IDS" ] || {
echo "REFUSED: a new Actions run appeared after monitoring; repeat the CI gate." >&2
exit 1
}
[ "$(echo "$FINAL_RUNS" | jq --arg sha "$DEPLOY_SHA" '[.[] | select(.headSha != $sha or .status != "completed" or (.conclusion | IN("success", "neutral", "skipped") | not))] | length')" -eq 0 ] || exit 1
CI_EVIDENCE=$(echo "$FINAL_RUNS" | jq -c \
'{status:"passed",provider:"github-actions",runs:[.[]|{id:.databaseId,headSha,status,conclusion}]}')
;;
documented-command)
: "${CI_VERIFY_CMD:?CI is applicable but no GitHub run or documented verification command was found}"
(cd "$MAIN_CHECKOUT" && bash -lc "$CI_VERIFY_CMD")
CI_COMMAND_SHA=$(printf '%s' "$CI_VERIFY_CMD" | sha256sum | awk '{print $1}')
CI_EVIDENCE=$(jq -cn --arg commandSha "$CI_COMMAND_SHA" \
'{status:"passed",provider:"documented-command",command:("sha256:"+$commandSha),exitStatus:0}')
;;
none)
CI_EVIDENCE='{"status":"not-applicable","reason":"project has no configured post-push CI"}'
;;
*) echo "REFUSED: unknown CI provider '$CI_PROVIDER'." >&2; exit 1 ;;
esac
if [ "${DEPLOY_APPLICABLE:-false}" = "true" ]; then
: "${DEPLOY_VERIFY_CMD:?Deployment is applicable but no documented verification command was found}"
(cd "$MAIN_CHECKOUT" && bash -lc "$DEPLOY_VERIFY_CMD")
VERIFY_COMMAND_SHA=$(printf '%s' "$DEPLOY_VERIFY_CMD" | sha256sum | awk '{print $1}')
DEPLOY_EVIDENCE=$(jq -cn --arg commandSha "$VERIFY_COMMAND_SHA" \
'{status:"passed",command:("sha256:"+$commandSha),exitStatus:0}')
else
DEPLOY_EVIDENCE='{"status":"not-applicable","reason":"project has no deployment for this push"}'
fi
DELIVERY_EVIDENCE=$(jq -cn --arg repositoryId "$REPOSITORY_ID" \
--arg defaultBranch "$DEFAULT_BRANCH" --arg deploySha "$DEPLOY_SHA" \
--argjson ci "$CI_EVIDENCE" --argjson deployment "$DEPLOY_EVIDENCE" \
'{checkedAt:(now|todateiso8601),repositoryId:$repositoryId,
defaultBranch:$defaultBranch,deploySha:$deploySha,ci:$ci,deployment:$deployment}')
cd "$MAIN_CHECKOUT"
node "$HOME/.config/agent-config/lib/workspace.mjs" verify-delivery \
"$NAME" "$DELIVERY_EVIDENCE"
node "$HOME/.config/agent-config/lib/workspace.mjs" update "$NAME" \
'{"pipeline":{"step":9}}'If CI or deployment fails, diagnose the captured
default-branch run directly in this worktree. Commit the fix, then restart Step
8 at fetch/rebase/verification and push explicitly to the default branch again.
Do not apply the fix-ci skill unqualified: it targets the current feature branch and
its plain push contract is incompatible with this flow. The feature is not done
until the default branch is healthy.
Step 9: Report
Apply the workspace skill with done <NAME>. Its tested helper
independently verifies ancestry and tears down the database, worktree, and
landed feature branch in one idempotent operation:
Apply the `workspace` skill with `done <NAME>`.Summarize to the user:
- What was built
- Branch name
- Files changed
- Review findings (MUST / SHOULD / CONSIDER counts + resolutions)
- Remaining CONSIDER items with reasoning
- Delivery result, SHA, and CI/deploy status when shipped
- "Done. Worktree and landed feature branch cleaned up."
Done.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

