Claude Toolkit
Four pillars, one standard underneath them all. The quickest way to tell them apart:
| Pillar | What it is | Think of it as | FT example |
|---|---|---|---|
agents |
A delegated worker that runs a sub-task in its own context window and hands back a result. |
a specialist you give a self-contained brief — they go away, do the job, return the answer. |
|
skills |
A procedure + knowledge loaded on demand into the running agent — no separate context. |
a playbook on the shelf the agent opens only when the task matches its description. |
|
MCP servers |
A live connection to external tools & data an agent can query mid-task. |
a wall socket the agent plugs into for real-time data (tickets, code search, docs). |
Qdrant · JIRA · Context7 |
automation |
Scripts + CI that install, wire, and guard all of the above — runs with no human in the loop. |
the plumbing and guardrails behind the walls: nobody sees it, everything depends on it. |
|
| One sentence: an agent does the work, skills tell it the rules, MCP feeds it live data, automation wires it all up and keeps it honest. |
Which agent do I use?
Start from the situation, not the agent. In almost every case the entry point is ft-developer —
it grades the task and delegates to the coding agents, the documentation agent, and audit, so you rarely call those directly.
| I want to… | Agent | Invoke with |
|---|---|---|
Build a feature / idea end-to-end (code + tests + docs) |
|
|
Refactor / clean up code (behavior unchanged) |
|
|
Fix a bug from a JIRA ticket |
|
|
Fix a MAJOR/CRITICAL bug with independent multi-verifier gating |
|
|
Just check conformance — no changes |
|
|
Write/update docs only |
|
|
A protocol envelope / spec question |
|
|
ft-java-coding-agent, ft-angular-coding-agent, and ft-coding-agent are
delegated to by ft-developer — you normally don’t invoke them by hand. ft-doc-writer-agent
is the only Friendly AI agent that writes documentation, including protocol flows and PlantUML.
The legacy tr-doc-writer definition redirects callers to ft-doc-writer-agent. bugfix-agent is
the shortcut when the work is a ticket-scoped fix rather than a planned feature. Full prompt set:
Deployment / deploy/prompts/example-prompts.md.
|
Agents
| Agent | Model | Role |
|---|---|---|
ft-developer |
Opus |
Quality-gated feature orchestrator. Capability preflight → grades the task (architecture-led / TDD-led / simple-addition) → elicits every blocking requirement → SDD → adversarial design verification ( |
ft-java-coding-agent |
Opus |
Implements backend code and tests in one pass (Java/Spring). TDD mode for TDD-led tasks. Enforces |
ft-angular-coding-agent |
Opus |
Implements frontend code and tests in one pass (Angular/TS). Enforces |
ft-coding-agent |
Opus |
New. The stack-neutral coding leaf — every stack with no dedicated agent (Python, Go, Rust, Node/TS, tooling). Code and tests in one pass, same report contract as the specialized leaves. Deliberately preloads no standard: a specialized agent exists exactly where an authoritative standard exists, so here the repo is the standard (nearest analogue → |
ft-doc-writer-agent |
Sonnet |
The single Friendly AI documentation writer. Audits existing docs first (EXTEND / REVISE / NEW / NO-OP). Writes all AsciiDoc, protocol flows, and PlantUML. Enforces the support/QA language contract, separates |
ft-architecture-audit |
Sonnet |
New. Read-only conformance auditor. Reports boundary / naming / DI / DTO / logging / DB / protocol violations with |
bugfix-agent |
Opus |
Flagship bug fixer (any FT repo, stack auto-detected). Reproduce-first (failing repro test before any production edit), N-cycle self-verification on fresh evidence, explicit outcome classification (incl. |
refactor-agent |
Opus |
New. Behavior-preserving refactoring (any FT repo, stack auto-detected). Safety-net-first (a green characterization net that is shown to catch a behavior change before the first edit), small verified steps (Fowler catalog), the |
tr-doc-writer |
Sonnet |
Legacy compatibility redirect. It does not write documentation and directs callers to |
ft-test-adversary |
Opus |
New — shared canon of BOTH pipelines. Adversarial test-adequacy reviewer — read-only on production code (it never writes the fix). Spawned by |
verifier |
Opus |
Adversarial verifier shared by |
Model tiering is conservative, and it follows the reasoning the agent must do — not whether it writes files. Opus for code, orchestration, bugfix, and the adversarial roles (verifier, ft-test-adversary): refuting a plan and finding the tests that were never written are generative judgement, read-only or not. Sonnet for docs and the rule-checklist audit (ft-architecture-audit), where the verdict follows from an explicit standard. Use Haiku as a habit for read-only exploration sub-agents.
|
Skills
| Skill | Kind | Use |
|---|---|---|
ft-java-standards |
⭐ authoritative |
The backend standard (Java doc). Read by |
ft-angular-standards |
⭐ authoritative |
The frontend standard (Angular doc). Read by |
cwmp-xml |
protocol |
Write/parse/validate CWMP (TR-069 SOAP) envelopes. |
oma-lwm2m-expert |
protocol |
OMA LwM2M spec expert (v1.0–v2.0), CoAP/DTLS, FOTA, bootstrap. (extras stripped; trigger narrowed) |
tr69hostif-issue-triage |
domain |
Triage tr69hostif/RDK device issues from logs. |
iot-fleet-engineer |
domain |
Fleet provisioning, X.509 identity, staged OTA, telemetry budget. |
emil-design-eng |
design |
UI polish & animation canon (easing/duration, transform-origin, reduced-motion, perf). Read JIT by |
agent-browser |
verification |
Browser automation CLI (Chrome/Chromium over CDP, accessibility-tree |
clickhouse-io |
db |
ClickHouse engines, ORDER BY indexes, batch inserts. |
performance-engineer |
perf |
Observability, profiling, load testing, caching. |
springboot-tdd |
tests |
TDD loop (JUnit5/Mockito/Testcontainers). FT-override banner applied. |
springboot-verification |
tests |
Pre-PR build → static analysis → coverage → security scan. FT-override banner. |
ft-fix |
orchestration |
Quality-gated bug fixing: drives |
autoreview |
review |
External-engine final review. User-invoked only ( |
receiving-code-review |
review |
How to act on incoming review feedback (verify, don’t blindly agree). |
friendly-branded-docs |
documents |
The official Friendly Technologies branding skill (organization-library skill, extended in the toolkit). Builds Word documents from the approved Doc and Letter templates and PowerPoint decks from the PPT template, with the company icon library and Roboto fonts. Input is a JSON spec or Markdown (technical documents with images, code blocks, tables with any number of columns, numbered lists, inline formatting). Uses the Python 3 standard library only. Checks the structure ( |
Skills we deliberately did NOT install (and why)
-
code-reviewer,requesting-code-review— redundant with the bundled/code-review; risk double-firing withautoreview. -
security-review(library) — name-collides with the bundled/security-review(would silently disable it) and is wrong-stack (Next.js/Supabase/Solana). -
brainstorming— its hard "no code until approved spec" gate fights plan-mode and the autonomousft-developerflow. -
java-coding-standards,springboot-patterns— superseded byft-java-standards; no competing standards. -
Skipped:
java-pro(broken),performance-investigation(Svelte),coding-agent(needs openclaw),coding-standards(JS/TS only).
We also rely on Claude Code’s bundled skills: /code-review, /security-review, /verify, /simplify, /review.
MCP servers — the live data the agents reach
Skills are procedures; MCP servers are data sources. Agents query them at runtime for grounding.
| Server | What it gives | Key tools | Who · when |
|---|---|---|---|
qdrant-vector-db ⭐ |
The FT vector knowledge base — docs, code, protocol params/specs, bugs, UI map (full breakdown in Knowledge Base). |
|
all agents · ground before writing, validate a protocol path, find an analogue |
jira-mcp |
Implementation-ready ticket context — brief, logs, and an emulator seed from a Jira issue. |
|
bugfix-agent, ft-developer · a ticket-driven task (e.g. |
context7 |
Up-to-date external library/framework docs (Spring, Angular, NgRx, Netty, Paho…). |
|
coding agents, ft-developer · an unfamiliar/external library API |
tr069-emulator |
Drives an emulated TR-069 device — reproduce device state and run CWMP sessions. |
|
bugfix-agent, ft-doc-writer-agent, coding agents · reproduce / verify a device-level flow |
mcp-obsidian |
Read/write access to the team’s shared Obsidian Knowledge Vault — the agents' cross-session memory (full breakdown in Knowledge Vault). |
|
all pipelines (ft-fix, ft-developer, bugfix-agent) · search prior knowledge at task start, persist the root cause / decision at task end |
Two more MCP servers are installed as native stdio processes (no Docker) — sequential-thinking
(structured reasoning) and memory (a local knowledge graph). See Deployment § MCP servers.
|
|
Connecting them: install.sh registers all four at user scope (claude mcp add). Endpoints, transports,
and the network prerequisite are in Deployment & Usage § MCP servers.
|
The user-visible gate (rules/ux/)
The costliest interface defects are not authored in *.tsx files. They are authored in a handler
that returns a reason no frontend reads, in a catch block that forwards an internal phrase to a
screen, in a panel that reports "failed" for work that never started. A trigger keyed to the file
extension misses every one of them, so the toolkit keys its gate to the outcome instead:
| File | What it owns |
|---|---|
|
The trigger ("a human will read, see, or decide from this — whatever the layer") and the
Definition of Done that closes it. Its cross-layer core — consumer contract at |
|
Property-to-owner routing against the installed inventory (never a remembered name list), the 0-4 escalation ladder with the preconditions that keep agent spend honest, and precedence when two design canons disagree. |
Every consumer points at these instead of carrying a copy: rules/agents/common.md ("User-visible
work"), the three coding agents' step 3b, the verifier Visual/UX lens (the DoD is its minimum
attack list, and its cross-layer core needs no running app), ft-developer Stages 1/6/7/9, and
bugfix-agent Gate B.
The ladder is the part that controls cost: rung 0 is the inline DoD, rung 2 one agent-browser
drive, rung 4 a verifier agent — and rung 3 or 4 never runs on a slice that is still moving,
parallel lenses must be disjoint, and a lens brief carries the diff, the exact route, the states and
the DoD items already answered. A lens that has to re-derive its context is where "the agent was
slow and no better" comes from.
deploy/templates/hooks/user-visible-gate.py makes the trigger deterministic outside the pipelines:
a PostToolUse hook that fires after an edit to a UI file, an i18n catalog, a 4xx/5xx response, or
any code that authors a sentence a person will read — at most three times per session, once per
file. Its detection principle is the same as the canon’s: user-facing text looks like a sentence.
Enumerating framework call sites (toastr., ResponseEntity.status() keys the rule on incidental
syntax and goes silent on the next framework, so it looks for a quoted run of real words outside a
logger call instead.
install.sh / install.ps1 copy it into ~/.claude/hooks/ and offer to wire it, appending to
hooks.PostToolUse and never replacing what is there; the verify pass parses settings.json rather
than matching text, so a wrongly-nested (and therefore dead) entry reports dead, not green.
Wiring stays opt-in.
Finishing the class, not the instance (rules/code-quality/convergent-change.md)
Two domains in one service were asked the same question — what does it mean that a name is absent
from a cache another service owns? — and answered it differently: one warned and imported, one
blocked with Invalid parameters present: 4. Neither site is wrong when read on its own. The
divergence is the defect, and nothing finds it by reading files: a text search for duplication
returns nothing, because the two implementations look nothing alike.
The sweep that does find it asks by consumer, and the code graph answers it in one call:
search_graph(name_pattern=".*<TheSymbol>.*") # the cache / client / validator / config key
trace_path(function_name="<theMethod>", mode="calls", direction="inbound", depth=2)
Run against the real repository, that returns both importers — and omits the third domain, which
validates its own data and never consults that source. One query, the exact answer set, no grep.
query_graph (Cypher) and search_graph(semantic_query=[…]) cover the case with no shared
symbol; trace_path(mode="cross_service") follows the question across an HTTP boundary.
Two rules make the result binding:
-
Divergence converges at TWO. Duplication tolerates two occurrences (Rule of Three); contradiction does not, because one of the two sites is lying to its callers right now. Converge onto the site that already reasoned it through — the one with the decision, the OpenAPI sentence describing it, and the tests — not onto the one you happen to be editing.
-
Refactors are proposed unprompted, with a contract: WHAT · WHY NOW (with
file:line) · BUYS · BASED ON (a named principle and threshold, or an existing repo precedent) · COST · RISK · VERDICT.not-worth-itis a valid verdict worth stating, so the next run does not re-derive it. A refactor rides in the same diff only when it is the change — the shared-root fix is the smaller diff — because a diff mixing behavior with restructuring cannot be reviewed.
The related correctness rule lives next door in rules/code-quality/design-principles.md: a verdict
computed from data another service owns has three states — confirmed, refuted, and not
checked. Collapsing "the source was empty or unreachable" into "your input is invalid" produces a
verdict that is false exactly when the other system is down.
Wired into: rules/agents/common.md, all three coding agents (step 3c, plus Convergence: and
Refactor proposals: report fields), ft-developer Stages 7 and 9, bugfix-agent Phase 5 step 2a,
refactor-agent Phase 5, the verifier checkpoint-2 and checkpoint-F rubrics, and
ft-architecture-audit.
How skills fire (and how to keep them quiet)
| Fact | Consequence |
|---|---|
Model-invoked by |
Keep descriptions narrow & action-first (< ~150 chars). Broad ones over-fire. |
No tie-break; not concurrency-safe |
Avoid overlapping triggers across skills. |
|
❌ Never name a skill |
|
Makes a side-effect skill user-only (e.g. |
Hooks register only via |
Strip stray |
| Next → Knowledge Base (the Qdrant collections in depth) · Deployment & Usage to install these and see example prompts. |