artyhoo/getff
Compiles your conventions into native toolchain gates (ESLint, clippy) — deterministic, local-first, $0 LLM in CI. Its own AGENTS.md is executable. Docs lie; tests don't.
ARCHETYPE
Fort Knox
Deny lists, pre-tool hooks, sandboxing. Nothing touches prod without a signature.
GUARDRAILS
4/5
Blocks destructive commands · Protects secrets · Pre-tool screening hook · No YOLO mode · details
Copy this rig
# review before running: this installs third-party code $ claude mcp add --transport http context7 https://mcp.context7.com/mcp $ claude mcp add --transport http deepwiki https://mcp.deepwiki.com/mcp $ npx degit artyhoo/getff/.claude ./rig-getff # inspect, then merge into .claude/
MCP servers are added to Claude Code at local scope; env vars are shown as YOUR_… placeholders — we never store values. Files are fetched with degit into a separate folder so you can review before merging.
$ claude mcp add --transport http context7 https://mcp.context7.com/mcp $ claude mcp add --transport http deepwiki https://mcp.deepwiki.com/mcp
$ npx degit artyhoo/getff/.agents/skills/adapter-jig-reviewer .claude/skills/adapter-jig-reviewer $ npx degit artyhoo/getff/.agents/skills/ai-doc .claude/skills/ai-doc $ npx degit artyhoo/getff/.agents/skills/aif-doctor .claude/skills/aif-doctor $ npx degit artyhoo/getff/.agents/skills/aif-init .claude/skills/aif-init $ npx degit artyhoo/getff/.agents/skills/arch .claude/skills/arch $ npx degit artyhoo/getff/.agents/skills/backward-sweep-auditor .claude/skills/backward-sweep-auditor $ npx degit artyhoo/getff/.agents/skills/capability-reuse-auditor .claude/skills/capability-reuse-auditor $ npx degit artyhoo/getff/.agents/skills/claims-conformance-auditor .claude/skills/claims-conformance-auditor $ npx degit artyhoo/getff/.agents/skills/claude-glm-executor-handoff .claude/skills/claude-glm-executor-handoff $ npx degit artyhoo/getff/.agents/skills/compliance-verifier .claude/skills/compliance-verifier $ npx degit artyhoo/getff/.agents/skills/dispatch-input-checker .claude/skills/dispatch-input-checker $ npx degit artyhoo/getff/.agents/skills/dispatcher .claude/skills/dispatcher $ npx degit artyhoo/getff/.agents/skills/docplan-auditor .claude/skills/docplan-auditor $ npx degit artyhoo/getff/.agents/skills/docs-author .claude/skills/docs-author $ npx degit artyhoo/getff/.agents/skills/docs-form-auditor .claude/skills/docs-form-auditor $ npx degit artyhoo/getff/.agents/skills/dual-channel-drift-auditor .claude/skills/dual-channel-drift-auditor $ npx degit artyhoo/getff/.agents/skills/fidelity-auditor .claude/skills/fidelity-auditor $ npx degit artyhoo/getff/.agents/skills/getff-cold-run-prober .claude/skills/getff-cold-run-prober $ npx degit artyhoo/getff/.agents/skills/getff .claude/skills/getff $ npx degit artyhoo/getff/.agents/skills/harvest .claude/skills/harvest $ npx degit artyhoo/getff/.agents/skills/installing-enforcement .claude/skills/installing-enforcement $ npx degit artyhoo/getff/.agents/skills/living-docs-auditor .claude/skills/living-docs-auditor $ npx degit artyhoo/getff/.agents/skills/manual-rule-liveness-prober .claude/skills/manual-rule-liveness-prober $ npx degit artyhoo/getff/.agents/skills/memory-codification-auditor .claude/skills/memory-codification-auditor $ npx degit artyhoo/getff/.agents/skills/night-mode .claude/skills/night-mode $ npx degit artyhoo/getff/.agents/skills/orchestrator-worker-discipline .claude/skills/orchestrator-worker-discipline $ npx degit artyhoo/getff/.agents/skills/orchestrator .claude/skills/orchestrator $ npx degit artyhoo/getff/.agents/skills/pipeline .claude/skills/pipeline $ npx degit artyhoo/getff/.agents/skills/review-sidecar .claude/skills/review-sidecar $ npx degit artyhoo/getff/.agents/skills/reviewer-discipline .claude/skills/reviewer-discipline $ npx degit artyhoo/getff/.agents/skills/reviewer .claude/skills/reviewer $ npx degit artyhoo/getff/.agents/skills/rule-research .claude/skills/rule-research $ npx degit artyhoo/getff/.agents/skills/rule-researcher .claude/skills/rule-researcher $ npx degit artyhoo/getff/.agents/skills/rule-test-author .claude/skills/rule-test-author $ npx degit artyhoo/getff/.agents/skills/rule-tests .claude/skills/rule-tests $ npx degit artyhoo/getff/.agents/skills/self-reflection .claude/skills/self-reflection $ npx degit artyhoo/getff/.agents/skills/shipped-agent-liveness-prober .claude/skills/shipped-agent-liveness-prober $ npx degit artyhoo/getff/.agents/skills/story .claude/skills/story $ npx degit artyhoo/getff/.agents/skills/template-audit .claude/skills/template-audit $ npx degit artyhoo/getff/.agents/skills/tool-bootstrapping .claude/skills/tool-bootstrapping
$ curl -fsSL --create-dirs -o .claude/agents/adapter-jig-reviewer.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/adapter-jig-reviewer.md $ curl -fsSL --create-dirs -o .claude/agents/aif-init.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/aif-init.md $ curl -fsSL --create-dirs -o .claude/agents/backward-sweep-auditor.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/backward-sweep-auditor.md $ curl -fsSL --create-dirs -o .claude/agents/capability-reuse-auditor.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/capability-reuse-auditor.md $ curl -fsSL --create-dirs -o .claude/agents/claims-conformance-auditor.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/claims-conformance-auditor.md $ curl -fsSL --create-dirs -o .claude/agents/compliance-verifier.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/compliance-verifier.md $ curl -fsSL --create-dirs -o .claude/agents/dispatch-input-checker.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/dispatch-input-checker.md $ curl -fsSL --create-dirs -o .claude/agents/docplan-auditor.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/docplan-auditor.md $ curl -fsSL --create-dirs -o .claude/agents/docs-form-auditor.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/docs-form-auditor.md $ curl -fsSL --create-dirs -o .claude/agents/dual-channel-drift-auditor.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/dual-channel-drift-auditor.md $ curl -fsSL --create-dirs -o .claude/agents/fidelity-auditor.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/fidelity-auditor.md $ curl -fsSL --create-dirs -o .claude/agents/getff-cold-run-prober.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/getff-cold-run-prober.md $ curl -fsSL --create-dirs -o .claude/agents/living-docs-auditor.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/living-docs-auditor.md $ curl -fsSL --create-dirs -o .claude/agents/manual-rule-liveness-prober.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/manual-rule-liveness-prober.md $ curl -fsSL --create-dirs -o .claude/agents/memory-codification-auditor.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/memory-codification-auditor.md $ curl -fsSL --create-dirs -o .claude/agents/orchestrator-worker-discipline.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/orchestrator-worker-discipline.md $ curl -fsSL --create-dirs -o .claude/agents/review-sidecar.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/review-sidecar.md $ curl -fsSL --create-dirs -o .claude/agents/reviewer-discipline.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/reviewer-discipline.md $ curl -fsSL --create-dirs -o .claude/agents/rule-researcher.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/rule-researcher.md $ curl -fsSL --create-dirs -o .claude/agents/rule-test-author.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/rule-test-author.md $ curl -fsSL --create-dirs -o .claude/agents/shipped-agent-liveness-prober.md https://raw.githubusercontent.com/artyhoo/getff/staging/agents/shipped-agent-liveness-prober.md
Merge into .claude/settings.json (project) or ~/.claude/settings.json (user). Hook commands reference scripts in the source repo — copy those too.
{
"permissions": {
"deny": [
"Bash(git push --force*)",
"Bash(git push -f*)",
"Bash(git push --no-verify*)",
"Bash(git push --mirror*)",
"Bash(git push origin main*)",
"Bash(git push origin master*)",
"Bash(git push * main*)",
"Bash(git push * master*)",
"Bash(git commit --no-verify*)",
"Bash(git reset --hard*)",
"Bash(git checkout -- *)",
"Bash(git branch -D *)",
"Bash(git filter-branch*)",
"Bash(git update-ref*)",
"Bash(rm -rf *)",
"Bash(shred *)",
"Bash(dd if=*)",
"Bash(mkfs*)",
"Bash(sudo *)",
"Bash(curl * | bash*)",
"Bash(curl * | sh*)",
"Bash(wget * | bash*)",
"Bash(wget * | sh*)",
"Bash(nc *)",
"Bash(netcat *)",
"Bash(socat *)",
"Bash(gh secret set*)",
"Bash(gh secret delete*)",
"Bash(gh auth logout*)",
"Read(~/.ssh/**)",
"Read(~/.aws/**)",
"Read(~/.gnupg/**)",
"Read(~/.config/gh/**)",
"Read(.env)",
"Read(.env.*)",
"Edit(~/.zshrc)",
"Write(~/.zshrc)",
"Edit(~/.bashrc)",
"Write(~/.bashrc)",
"Edit(~/.bash_profile)",
"Write(~/.bash_profile)",
"Edit(.git/hooks/**)",
"Write(.git/hooks/**)",
"Edit(.husky/**)",
"Write(.husky/**)",
"Edit(.claude/settings.json)",
"Write(.claude/settings.json)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "AskUserQuestion",
"hooks": [
{
"type": "command",
"command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/a<redacted>.sh\""
}
]
},
{
"matcher": "Agent|Task",
"hooks": [
{
"type": "command",
"command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/inject-subagent-context.sh\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/inject-matching-rule.sh\""
}
]
},
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/seal-primary-checkout.sh\""
}
]
}
]
}
} MCP servers (2)
| server | source | est. tokens |
|---|---|---|
| Context7 | remote · remote | 1.2k |
| DeepWiki | remote · remote | 900 |
Skills (41)
adapter-jig-reviewerai-docaif-doctoraif-initarchbackward-sweep-auditorcapability-reuse-auditorclaims-conformance-auditorclaude-glm-executor-handoffcompliance-verifierdispatch-input-checkerdispatcherdocplan-auditordocs-authordocs-form-auditordual-channel-drift-auditorfidelity-auditorgetff-cold-run-probergetffharvestinstalling-enforcementliving-docs-auditormanual-rule-liveness-probermemory-codification-auditornight-modeorchestrator-worker-disciplineorchestratorpipelinereview-sidecarreviewer-disciplinereviewerrule-researchrule-researcherrule-test-authorrule-testsself-reflectionshipped-agent-liveness-proberstorytemplate-audittool-bootstrappingusing-getff
Subagents (21)
| adapter-jig-reviewer | Cold adversarial multi-dimension review of an ecosystem-adapter wiring diff. Given ONLY the diff + the eight §3 conformance groups (parsing / trust / delivery / lock / firing / CI / type-shape / tripw |
| aif-init | Generate a draft .ai-factory/DESCRIPTION.md and .ai-factory/ARCHITECTURE.md for a consumer repo. Reads package.json(s) and directory layout, detects the tech stack, and writes a filled draft with a DR |
| backward-sweep-auditor | Cold backward-sweep for a §1.7 Backward-check. Given ONLY a change's class/logic (never the PR diff or narrative), enumerates every parallel surface in the codebase where that class applies and report |
| capability-reuse-auditor | Audits a proposed or just-authored new capability (a SKILL.md, an agent, or a packages/core module) for overlap with an existing own-stack or upstream capability, and checks that its Prior-art trailer |
| claims-conformance-auditor | Cold conformance audit of docs-site claims against shipped reality. Given ONLY the doc surface(s) to audit (never the authoring narrative), enumerates every factual claim the docs make about the repo/ |
| compliance-verifier | Reviews PR description §1.7 Forward-check and Backward-check sections for substantive evidence — file:line citations, sweep completeness, exemption quality. Reports; does not fix. |
| dispatch-input-checker | Cold dispatch-input reality-check at the aif-dispatch station boundary. Given ONLY the dispatch input (kickoff/scoped section) and the runtime-state probes it names — NEVER the chat, the implementatio |
| docplan-auditor | Cold semantic-grouping judgment for a DocPlan. Given ONLY the DocPlan (its sections + excluded[]) and the ConventionNodes it references — NEVER the diff, the PR body, or the rendered AGENTS.md region |
| docs-form-auditor | Cold form audit of getff.ai docs pages against the reader-comfort card (C1-C13). Given ONLY page paths, their kinds, and the card path (never the writer's dialogue), enumerates the page population, ru |
| dual-channel-drift-auditor | Cold pairwise audit of a declared @dual-pair anchor group. Given ONLY an anchor (never the PR diff or narrative), enumerates the group's members, measures their verbatim overlap and their divergence, |
| fidelity-auditor | Cold WHAT-conformance acceptance audit at a stage-PR boundary. Given ONLY the kickoff/spec (or a scoped section of it) and the 3-dot diff — NEVER the chat, the design dialogue, or the implementation l |
| getff-cold-run-prober | One-beat cold-run acceptance probe for the getff-any-stack-trace umbrella (spec §9.3). Hands a fresh subagent ONLY a consumer project path (no kickoff, no framework-source access, no second human prom |
| living-docs-auditor | >- |
| manual-rule-liveness-prober | Probes a manifest manual rule for liveness via with/without-rule fresh-subagent dispatch, capturing a RED→GREEN delta (baseline fails → rule-loaded complies). Reporting-only; never invoked from CI. |
| memory-codification-auditor | Audits user-scope agent memory for durable conventions that live only in memory and were never codified into the repo. Flags stage-0 entries; reports candidates with a codify-or-leave verdict. Reports |
| orchestrator-worker-discipline | Discipline for aif-dispatched workers — REPORT schema (incl. advisor-consult sub-form on BLOCKER), park-vs-proceed, stage-gate check. Read when you are a worker dispatched via runtime-bridge/dispatch. |
| review-sidecar | Reviews diff as an external reviewer with no memory of how the code was written. Catches tautological tests, mock-only assertions, missing edge cases, React/Next anti-patterns. Reports; does not fix. |
| reviewer-discipline | Review-session protocol for reviewer/orchestrator role separation — when a finding needs a project-strategy call, surface it as DECISION-NEEDED with both options described, never pick a side. Reports; |
| rule-researcher | >- |
| rule-test-author | >- |
| shipped-agent-liveness-prober | Probes each shipped sub-agent for behavioural liveness via with/without-tools fresh-subagent dispatch, capturing a RED→GREEN delta (tool-less fabricates → tool-using cites real evidence). Status DORMA |
Hooks (23)
| event | matcher | runs |
|---|---|---|
| UserPromptSubmit | * | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/deps-hash-check.sh" |
| PreToolUse | AskUserQuestion | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/a<redacted>.sh" |
| PreToolUse | Agent|Task | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/inject-subagent-context.sh" |
| PreToolUse | Bash | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/inject-matching-rule.sh" |
| PreToolUse | Edit|Write|MultiEdit | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/seal-primary-checkout.sh" |
| PostToolUse | Edit|Write|MultiEdit | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/validate-prompt.sh" |
| PostToolUse | Edit|Write|MultiEdit | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/check-doc-authority.sh" |
| PostToolUse | Edit|Write|MultiEdit|Read | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/inject-matching-rule.sh" |
| PostToolUse | Edit|Write|MultiEdit | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/check-kickoff-traps.sh" |
| PostToolUse | Edit|Write|MultiEdit | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/check-hook-marker.sh" |
| PostToolUse | Write|Edit|MultiEdit | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/runtime-bridge-dispatch.sh" |
| PostToolUse | Edit|Write|MultiEdit | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/check-worker-dispatch-channel.sh" |
| PostToolUse | Write | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/inject-memory-codification.sh" |
| PostToolUse | Bash | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/close-aif-task-on-merge.sh" |
| PostToolUseFailure | Write|Edit|MultiEdit | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/runtime-bridge-dispatch.sh" |
| Stop | * | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/end-of-turn-reminder.sh" |
| SubagentStart | * | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/inject-subagent-digest.sh" |
| SubagentStop | * | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/warn-subagent-report.sh" |
| SessionStart | * | bash "$CLAUDE_PROJECT_DIR/scripts/link-coordination.sh" >/dev/null 2>&1 || true |
| SessionStart | compact | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/inject-handoff-on-compact.sh" |
| SessionStart | compact | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/inject-matching-rule.sh" |
| SessionStart | startup|resume|clear|compact | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/inject-session-bootstrap.sh" |
| PreCompact | * | bash "$CLAUDE_PROJECT_DIR/.claude/hooks/precompact-residue.sh" |
Permissions
deny (47)
Bash(git push --force*)
Bash(git push -f*)
Bash(git push --no-verify*)
Bash(git push --mirror*)
Bash(git push origin main*)
Bash(git push origin master*)
Bash(git push * main*)
Bash(git push * master*)
Bash(git commit --no-verify*)
Bash(git reset --hard*)
Bash(git checkout -- *)
Bash(git branch -D *)
Bash(git filter-branch*)
Bash(git update-ref*)
Bash(rm -rf *)
Bash(shred *)
Bash(dd if=*)
Bash(mkfs*)
Bash(sudo *)
Bash(curl * | bash*)
Bash(curl * | sh*)
Bash(wget * | bash*)
Bash(wget * | sh*)
Bash(nc *)
Bash(netcat *)
Bash(socat *)
Bash(gh secret set*)
Bash(gh secret delete*)
Bash(gh auth logout*)
Read(~/.ssh/**)
Read(~/.aws/**)
Read(~/.gnupg/**)
Read(~/.config/gh/**)
Read(.env)
Read(.env.*)
Edit(~/.zshrc)
Write(~/.zshrc)
Edit(~/.bashrc)
Write(~/.bashrc)
Edit(~/.bash_profile)
Write(~/.bash_profile)
Edit(.git/hooks/**)
Write(.git/hooks/**)
Edit(.husky/**)
Write(.husky/**)
Edit(.claude/settings.json)
Write(.claude/settings.json)
ask (0)
—
allow (4)
Bash(bash "$CLAUDE_PROJECT_DIR/.claude/hooks/end-of-turn-reminder.sh")
Bash(bash "$CLAUDE_PROJECT_DIR/.claude/hooks/a<redacted>.sh")
Task
Agent