Hephaestus Skills/ Docs GitHub
Harness docs v3.0.0

How this harness is built

The Claude Code lifecycle redrawn with every skill and hook, the path a normal task takes through them, and what loads each skill, around the eight components of an agent harness.

25
skills
15
core skills
4
ultimate skills
2
lifecycle events hooked

Harness wheel

The eight components of an agent harness; hover or tap a slice for what it covers

Lifecycle map

Claude Code hook events, top to bottom; chips are what acts at each one
Side eventsLifecycleSkills and hooks that act hereEACH TURNAGENTIC LOOPresumed sessionsSetupproject-init, harness-mapUserPrompt Expansionslash commandsPermissionDeniedauto-mode denyElicitation / ResultMCP inputNotificationasyncConfigChangeasyncWorktreeCreate / Removeworktree-flowCwdChanged / FileChangedenv reactiveInstructionsLoadedknowledge-placementSessionStartRead harness-mapharness-mapRead project-initproject-inithook session-startUserPromptSubmitRead feature-buildfeature-buildRead bug-triagebug-triageRead visionvisionRead gnhfgnhfRead jira-bug-hunterjira-bug-hunterRead feature-statusfeature-statusPreToolUseRead environmentsenvironmentsRead worktree-flowworktree-flowRead fe-guardrailsfe-guardrailsRead ask-or-decideask-or-decideRead server-touchserver-touchRead logging-standardlogging-standardRead feature-statusfeature-statusRead knowledge-placementknowledge-placementhook no-em-dashhook guard-protected-brancheshook feature-status-guardPermissionRequest[tool executes]Read axiaxiRead chrome-devtools-axichrome-devtools-axiRead e2e-verifye2e-verifyRead betterstack-logsbetterstack-logsPostToolUse / PostToolUseFailureRead root-causeroot-causePostToolBatchSubagentStart / SubagentStopRead fresh-reviewfresh-reviewRead jira-bug-hunterjira-bug-hunterRead knowledge-placementknowledge-placementTaskCreatedRead gnhfgnhfTaskCompletedRead gnhfgnhfRead jira-bug-hunterjira-bug-hunterStop / StopFailureRead worktree-flowworktree-flowRead verify-loopverify-loopRead e2e-verifye2e-verifyRead flow-traceflow-traceRead security-passsecurity-passRead fresh-reviewfresh-reviewRead feature-statusfeature-statusTeammateIdlePreCompactRead stowstowPostCompactSessionEndRead stowstow
skillgate hook from this repoplugin hookagentic loopultimate skilleach turn

Task path

Where each skill comes into play on a normal task
Agentic loopFails: find the causeRead root-causeroot-causeRead betterstack-logsbetterstack-logsRemember for the next taskRead stowstowRead knowledge-placementknowledge-placementSetuponce per repoRead harness-mapharness-mapRead project-initproject-initRead environmentsenvironmentsPromptstory, bug, ticketRead worktree-flowworktree-flowRead feature-buildfeature-buildRead bug-triagebug-triageRead visionvisionRead gnhfgnhfRead jira-bug-hunterjira-bug-hunterRead feature-statusfeature-statusGather contextread before you writeRead ask-or-decideask-or-decideAGENTS.mdproject-init blockspecTake actionedit in own worktreeRead fe-guardrailsfe-guardrailsRead axiaxiRead server-touchserver-touchRead logging-standardlogging-standardVerify resultsevidence, not claimsRead verify-loopverify-loopRead chrome-devtools-axichrome-devtools-axiRead e2e-verifye2e-verifyRead flow-traceflow-traceRead security-passsecurity-passRead feature-statusfeature-statustypechecklinttestsResponsereview, PR into the integration branchRead worktree-flowworktree-flowRead fresh-reviewfresh-reviewRead feature-statusfeature-status

Verification loop

verify-loop: every gate in order on one head before a change is called done or a PR opens
One headChange readydone or PRPR + tablefinal headRed gate: fix the cause, commit, rerun per the rerun tableRead root-causeroot-cause1Baseon latest <int>Read worktree-flowworktree-flow2Toolchainexit codesbuildtypechecklintteststech/ Verify3Script checkschecks.py run.agents/checks/4Prooffails without itRead root-causeroot-causerevert test5Reviewfresh eyesRead fresh-reviewfresh-reviewRead security-passsecurity-passRead flow-traceflow-trace6Behavioruser-facingRead e2e-verifye2e-verify7Requirementsone row per ACAC list
machine checkevidence gatered gate loops back to gate 2
Rules
  • One head: every gate runs on the same commit; the table's head must equal HEAD when the PR opens.
  • A red gate never restarts itself: fix the cause (root-cause when it is not obvious), commit, restart at gate 2.
  • Docs, config, copy-only and no-behavior-change diffs run a smaller gate set (verify-loop section 2); any doubt runs every gate.
  • After a fix, the rerun table (verify-loop section 2) limits gates 4-6 to what the fix touched; gates 2, 3 and 7 always rerun.
  • Never make a gate green by weakening it: no skipped or retried tests, raised timeouts, lint disables or deleted checks.
  • A SKIP on a gate the change needs is a FAIL; a DEFER names who runs the gate and where its result will be.
  • The same mistake corrected twice becomes a project check in .agents/checks/ (checks.py new <id>).
The table that goes into the PR body
gatestatusevidence
basePASSrebased, 0 commits behind
toolchainPASSpnpm typecheck (exit 0); pnpm lint (exit 0); pnpm --filter web test (212 passed)
script checksPASS2 run: no-console, migration-order
proofPASSbilling.test.ts "keeps paid invoice unlocked" fails with the fix reverted
reviewPASSfresh-review 2 rounds, risk low
securitySKIPno security-pass trigger
flowPASSflow-trace docs/flow-traces/invoice.md
behaviorPASSe2e/reports/WEST-12-...json at a1b2c3d, no AC path touched since
requirementsPASSAC1 test, AC2 test, AC3 e2e step 4

Statuses: PASS, FAIL, SKIP or DEFER, each with its evidence or reason.

Skill reference

25 skills, how they load and where they act; click a name to read it
SkillTierLoadsLifecycleWhen
harness-mapCore/harness-map
SessionStart
Setup audit: what is installed, missing or failing, as one HTML page
project-initCore/project-init
SessionStart
Repo has no agent block yet, or a doctor run (scripts/doctor.py)
environmentsCore/environments
PreToolUse
Before any deploy, SSH, migration or remote data access
worktree-flowCore/worktree-flow
PreToolUse Stop / StopFailure
Before the first file change (own worktree) and when finishing (PR into the integration branch)
feature-buildCore/feature-build
UserPromptSubmit
/feature-build or a user story to implement, in an S, M or L lane
bug-triageCore/bug-triage
UserPromptSubmit
/bug-triage or a bug or QA ticket
ask-or-decideCoreby description
PreToolUse
Before an AskUserQuestion call or a scope change
root-causeCore/root-cause
PostToolUse / PostToolUseFailure
A test, build or deploy fails, or a fix did not work
verify-loopCore/verify-loop
Stop / StopFailure
Before calling a change done or opening a PR: every gate in order on one head, loop back on red, one PASS/FAIL table
e2e-verifyCore/e2e-verify
[tool executes] Stop / StopFailure
Before calling a user-facing change done: browser evidence per AC
flow-traceCore/flow-trace
Stop / StopFailure
Before done on state machines, webhooks, jobs, money, access gates
security-passCore/security-pass
Stop / StopFailure
Before done when the diff hits auth, entry points, tenant data, privileged clients, SQL, storage, env, raw HTML
fresh-reviewCore/fresh-review
SubagentStart / SubagentStop Stop / StopFailure
Before a PR: a fresh subagent reviews the diff until clean
feature-statusCore/feature-status
UserPromptSubmit PreToolUse Stop / StopFailure
In a repo with docs/status/: claim the ticket on the remote before the worktree, record each AC tier as it passes, set in-review before the PR; the guard hook keeps status files script-only and ticket branches claimed
knowledge-placementCoreby description
PreToolUse SubagentStart / SubagentStop
Before editing AGENTS.md or a skill; red/green skill tests use fresh subagents
visionOptional/vision
UserPromptSubmit
/vision to draft or stress-test VISION.md
fe-guardrailsOptionalby description
PreToolUse
Before writing React or Next.js screens, forms and error states
axiOptionalby description
[tool executes]
While building a CLI that agents will call
server-touchOptional/server-touch
PreToolUse
Before a Bash call that touches a live Docker Compose host
chrome-devtools-axiOptionalby description
[tool executes]
The browser driver behind e2e-verify when Playwright MCP is absent
gnhfOptional/gnhf
UserPromptSubmit TaskCreated TaskCompleted
/gnhf overnight loop of small committed changes
logging-standardOptional/logging-standard
PreToolUse
Before writing code that logs or changing a logger: one field contract, redaction, correlation
betterstack-logsOptional/betterstack-logs
[tool executes]
Reading a deployed environment's log history while debugging, or setting up shipping to Better Stack
jira-bug-hunterOptional/jira-bug-hunter
UserPromptSubmit SubagentStart / SubagentStop TaskCompleted
/jira-bug-hunter: assigned Jira bugs one at a time in the main session, until fixed, merged, verified on dev and demoed
stowOptional/stow
PreCompact SessionEnd
Before a context reset or a break: save what was learned

Hooks wired

Read live from ~/.claude settings and enabled plugins
EventMatcherHookDoesFrom
PreToolUseWrite|Edit|MultiEdit|NotebookEditfeature-status-guardIn repos that use feature-status: denies hand edits of docs/status/*.md, a ticket-id branch or worktree with no claim (or a second branch for a claimed ID), and a PR/MR from a ticket-id or claimed branch whose status file is not in-review.plugin hooks.json
PreToolUseBashfeature-status-guardIn repos that use feature-status: denies hand edits of docs/status/*.md, a ticket-id branch or worktree with no claim (or a second branch for a claimed ID), and a PR/MR from a ticket-id or claimed branch whose status file is not in-review.plugin hooks.json
PreToolUseBashguard-protected-branchesAsks before (or denies, in no-prompt modes) pushes and merges to main, staging, prod and PR/MR merges.plugin hooks.json
PreToolUseWrite|Edit|MultiEdit|NotebookEditno-em-dashBlocks writes that add an em dash on a line they change.plugin hooks.json
SessionStartstartup|clear|compactsession-startLoads AGENTS.md into every session and points to OPINIONS.md.plugin hooks.json