SwissArmyHammer
SwissArmyHammer is an integrated software development lifecycle (SDLC) platform for AI-powered coding agents. It combines skills, agents, tools, and validators into a single system that turns your AI coding assistant into a complete development team.
Instead of a loose collection of scripts and one-off instructions, SwissArmyHammer provides a structured composition of capabilities — each with a clear role — that work together to plan, implement, test, review, and ship code.
Three CLIs, One System
SwissArmyHammer ships as three complementary command-line tools:
| CLI | Role |
|---|---|
sah | The core engine. MCP server, skills, tools, agents, and workflows. |
avp | The validator. Hook-based code quality enforcement that runs alongside your agent. |
mirdan | The package manager. Install, publish, and share skills, validators, tools, and plugins across agents and teams. |
Each tool is independently useful, but they’re designed to work together. sah provides the capabilities, avp enforces the guardrails, and mirdan lets you share and reuse everything.
How It Works
At its core, SwissArmyHammer extends AI coding agents (like Claude Code) with a composable set of SDLC primitives:
- Skills define what to do — plan, implement, test, review, commit. Each skill is a self-contained workflow that the agent can invoke.
- Agents (subagent modes) define how to think — a planner reasons differently than a tester. Agent modes shape the AI’s behavior for specific roles.
- Tools provide what to work with — file operations, shell execution, code intelligence, kanban boards, git integration. These are the hands of the system.
- Validators enforce what’s acceptable — code quality rules, security checks, test integrity. These run as hooks, catching problems before they land.
The agent orchestrates these pieces through a natural conversation interface. Say /plan and the system researches your codebase, decomposes work into kanban cards, and presents a plan. Say /implement and it picks up the next card, writes code, runs tests, and reports back. Say /review and a dedicated reviewer agent examines the changes with language-specific guidelines.
The SDLC Loop
A typical development cycle with SwissArmyHammer looks like:
/plan → /implement → /test → /review → /commit
↑ |
└────────────────────────────────────────────────┘
Each step is a skill backed by specialized agent modes and tools. The kanban board tracks progress across steps. Validators run continuously in the background, enforcing quality at every stage.
This isn’t a rigid pipeline — you can use any skill independently, skip steps, or run them in any order. The system is designed to support how developers actually work, not to impose a process.
What Makes It Different
- Composition over configuration. Skills, agents, tools, and validators are separate, pluggable units. Mix and match what you need.
- Agent-native. Built from the ground up as an MCP server for AI coding agents, not retrofitted from human-oriented tooling.
- Quality built in. Validators run as hooks on every tool call — code quality, security, and test integrity are enforced automatically, not as an afterthought.
- Shareable. Mirdan provides a package registry so teams can publish and install skills, validators, tools, and plugins. Your team’s best practices become installable packages.
- Language-aware. Review guidelines, coverage analysis, and code intelligence adapt to the language you’re working in — Rust, TypeScript, Python, Go, and more.
The Integrated SDLC
SwissArmyHammer assembles four kinds of building blocks — skills, agents, tools, and validators — into a coherent software development lifecycle. This page explains how they fit together.
The Four Layers
┌─────────────────────────────────────────────┐
│ Skills │
│ /plan /implement /test /review /commit │
│ (what to do — workflows) │
├─────────────────────────────────────────────┤
│ Agents │
│ planner implementer tester reviewer │
│ (how to think — personas) │
├─────────────────────────────────────────────┤
│ Tools │
│ files shell git kanban code-context │
│ (what to work with — capabilities) │
├─────────────────────────────────────────────┤
│ Validators │
│ code-hygiene code-security test-integrity│
│ (what's acceptable — guardrails) │
└─────────────────────────────────────────────┘
Each layer has a distinct responsibility, and the layers compose vertically. A skill like /implement activates the implementer agent mode, which uses tools (file editing, shell execution, code context) to write code, and the validators whose globs match the changed files — code-hygiene, code-security and their siblings — then judge that code when the review pipeline runs.
A Concrete Example
Here’s what happens when you type /plan in your AI coding agent:
- The plan skill activates. It defines the workflow: research the codebase, identify what needs to change, decompose work into discrete tasks.
- The planner agent mode shapes how the AI thinks. It’s instructed to be thorough in research, conservative in scope, and to produce kanban cards as output.
- The planner uses tools to do the work:
code_contextto understand the codebase structure,shellto run analysis commands,kanbanto create task cards,questionto ask clarifying questions. - Validators do not run during planning. They match changed files by glob, and planning writes only kanban cards —
.mdand.jsonlfiles that no shipped validator glob matches. Thecode-securityset’scommand-safetyrule reads the shell commands a diff embeds, not the commands the planner runs.
The result: a kanban board with well-scoped cards, ready for /implement to pick up.
The Development Cycle
The skills form a natural development cycle:
Plan → Implement → Test → Review → Commit
| Phase | Skill | Agent Mode | Primary Tools | Validators |
|---|---|---|---|---|
| Plan | /plan | planner | code-context, kanban, shell | none — planning changes no file a validator glob matches |
| Implement | /implement | implementer | files, shell, code-context, kanban | every set whose globs match the changed files |
| Test | /test | tester | shell, files | every set whose globs match the changed files |
| Review | /review | reviewer | files, git, code-context | every set whose globs match the changed files |
| Commit | /commit | committer | git, shell | none — committing changes no file |
The Validators column names no set for the three middle phases, because the engine picks none by phase. A set runs when its match.files globs match a changed file, so the same phase reaches rust for a .rs change and js-ts for a .tsx one.
Each phase is independent — you can run /test without /plan, or /review without /implement. But when used together, they form a complete cycle where each phase’s output feeds the next.
Supporting Skills
Beyond the core cycle, additional skills handle cross-cutting concerns:
/coverage— analyzes test coverage gaps on changed code/deduplicate— finds and refactors duplicate code/double-check— validates recent work before moving on/implement-all— autonomously works through the entire kanban board/code-context— explores codebase structure and symbol relationships/shell— shell command execution with history and process management/lsp— diagnoses and installs language servers for code intelligence
How the Pieces Connect
Skills Activate Agent Modes
When a skill runs, it typically delegates to a specialized subagent. The /implement skill spawns an implementer agent, the /review skill spawns a reviewer agent, and so on. This keeps the parent conversation clean — verbose test output, detailed code analysis, and implementation details stay inside the subagent.
Agent Modes Shape Behavior
Each agent mode is a markdown document that instructs the AI how to approach its task. The implementer follows test-driven development practices, writes minimal diffs, and reports results. The reviewer performs layered analysis (correctness, design, style) with language-specific guidelines. These aren’t just prompts — they’re behavioral contracts.
Tools Provide Capabilities
Tools are MCP (Model Context Protocol) endpoints that the agent calls to interact with the outside world. File operations, shell execution, code intelligence, kanban management — these are all tools. Skills and agents don’t hard-code tool usage; they decide which tools to use based on the task at hand.
Validators Run Over the Changed Files
The review pipeline collects the changed files and runs each validator whose match.files globs match them. The code-hygiene set checks for commented-out code, overlong functions, and undocumented public APIs; the code-security set’s command-safety rule reads the shell commands the diff embeds. Findings come back with each validator’s severity, and blocking findings gate the change.
Per-tool-call dispatch is gone. Validators no longer run as Claude Code hooks on PreToolUse, PostToolUse, or Stop, and the legacy trigger key that named such an event has been removed from the rule schema.
Extensibility
Every layer is extensible:
- Skills are markdown files. Drop a new one into
.claude/skills/or install one viamirdan install. - Agent modes are markdown files in the modes directory. Customize existing ones or create new specialized roles.
- Tools are MCP server endpoints. SwissArmyHammer’s built-in tools cover the common cases; add more via MCP server configuration.
- Validators are AVP rule sets. Add project-specific rules under
./.validators/or install shared ones viamirdan install.
The package manager (mirdan) ties extensibility to shareability — anything you create can be published to a registry and installed by others.
Skills
Skills are the workflows of SwissArmyHammer. Each skill defines a specific development activity — planning, implementing, testing, reviewing, committing — as a self-contained unit that the AI agent can invoke.
What a Skill Is
A skill is a markdown file with frontmatter metadata. When invoked (e.g., /plan or /implement), it expands into a full prompt that shapes the agent’s behavior for that activity. Skills typically delegate heavy work to specialized subagents, keeping the parent conversation concise.
Skills are the primary interface between you and the SDLC system. You don’t need to think about agents, tools, or validators directly — just invoke the skill and it orchestrates everything.
Built-in Skills
SwissArmyHammer ships with skills covering the core development cycle:
| Skill | Purpose |
|---|---|
| plan | Research the codebase, decompose work into kanban cards |
| implement | Pick up one kanban card and implement it — write code, run tests |
| implement-all | Autonomously work through the entire kanban board |
| test | Run the test suite, analyze failures, fix issues |
| review | Structured code review with language-specific guidelines |
| commit | Clean, well-organized git commits |
| coverage | Analyze test coverage gaps on changed code |
| deduplicate | Find and refactor duplicate code |
| double-check | Verify recent work before proceeding |
| code-context | Explore codebase structure and symbol relationships |
| shell | Shell command execution with history and process management |
| kanban | Execute the next task from the kanban board |
| lsp | Diagnose and install language servers |
How Skills Work
When you type /implement, here’s what happens:
- The skill definition is loaded and expanded into a prompt.
- The prompt typically instructs the agent to delegate to a specialized subagent (the implementer agent mode).
- The subagent does the work — reading code, writing files, running tests — using tools.
- Validators check the subagent’s work as it happens.
- The subagent reports results back to the parent conversation.
This delegation pattern keeps verbose output (test results, implementation details) contained in the subagent, while the parent conversation gets a clean summary.
Installing Skills
Beyond the built-in set, you can install additional skills from the Mirdan registry:
mirdan search "my-skill"
mirdan install my-skill
Or create your own by placing a SKILL.md file in the appropriate directory. Skills installed via Mirdan are deployed to each detected agent’s skill directory automatically.
Skill Locations
Skills are discovered from multiple locations with hierarchical precedence:
| Location | Scope |
|---|---|
| Built-in (embedded in binary) | Always available |
Project .claude/skills/ | Shared with team via git |
User ~/.claude/skills/ | Personal, all projects |
| Installed via Mirdan | Project or global |
Agents
Agents are specialized behavioral modes that shape how the AI approaches a task. When a skill needs to plan, implement, test, or review, it spawns a subagent with the appropriate mode — giving it a focused persona and set of instructions for that specific role.
What an Agent Mode Is
An agent mode is a markdown document that defines a role. It tells the AI:
- What its job is (implement code, review changes, run tests)
- How to approach the work (test-driven development, layered review, minimal diffs)
- What patterns to follow (commit conventions, error handling, reporting format)
- What tools to prefer and how to use them
Agent modes aren’t just system prompts — they’re behavioral contracts that ensure consistent, high-quality output regardless of the specific task.
Built-in Agent Modes
| Mode | Role | Spawned By |
|---|---|---|
| planner | Architecture and implementation planning | /plan |
| implementer | Code implementation with TDD practices | /implement |
| tester | Test execution and failure analysis | /test |
| reviewer | Structured code review with language guidelines | /review |
| committer | Clean git commit creation | /commit |
| Explore | Fast codebase exploration and discovery | /code-context |
| Plan | Plan mode for interactive planning | /plan (interactive) |
| general-purpose | Research and multi-step tasks | Ad-hoc delegation |
The Subagent Pattern
Skills typically don’t do work directly in the parent conversation. Instead, they delegate to a subagent:
Parent conversation
│
├─ /implement
│ └─ spawns implementer subagent
│ ├─ reads kanban card
│ ├─ writes code (using file tools)
│ ├─ runs tests (using shell tool)
│ ├─ validators check each change
│ └─ reports results back to parent
│
└─ "Implementation complete, all tests passing"
This pattern has two key benefits:
- Context isolation. Verbose output (test results, file contents, tool calls) stays inside the subagent. The parent conversation gets a clean summary.
- Focused behavior. Each subagent operates with instructions optimized for its specific role, without the noise of unrelated context.
How Modes Shape Behavior
Consider the difference between the implementer and reviewer modes:
The implementer is instructed to:
- Follow test-driven development (write failing test first, then make it pass)
- Make minimal changes — only what the kanban card requires
- Run tests after every change
- Report what was changed and whether tests pass
The reviewer is instructed to:
- Perform layered analysis: correctness first, then design, then style
- Apply language-specific review guidelines (Rust, TypeScript, Python, etc.)
- Capture findings as kanban cards for follow-up
- Never modify code directly — only report findings
Same tools, completely different behavior. The agent mode is what makes the difference.
Language-Specific Guidelines
Some agent modes include language-specific guidelines that activate based on the code being worked with. The reviewer, for example, loads additional guidelines for:
- Rust — ownership patterns, error handling, unsafe usage
- TypeScript/JavaScript — type safety, async patterns, React conventions
- Python — type hints, exception handling, import organization
- Go — error handling, goroutine safety, interface design
- Dart/Flutter — widget patterns, state management
These guidelines are bundled as partials within the skill definition and selected automatically based on the files being reviewed.
Tools
Tools are the capabilities that agents use to interact with the outside world. They’re exposed as MCP (Model Context Protocol) endpoints — the agent calls them like functions to read files, run commands, search code, manage tasks, and more.
What a Tool Is
A tool is an MCP endpoint with a defined schema (name, description, parameters) and an implementation. When the agent decides it needs to read a file or run a shell command, it invokes the appropriate tool. SwissArmyHammer’s MCP server (sah serve) exposes all built-in tools to the connected agent.
Tools are the lowest layer of the system. Skills and agents don’t hard-code which tools to use — they make decisions based on the task and invoke tools as needed.
Built-in Tools
File Operations
| Tool | Purpose |
|---|---|
| read | Read file contents |
| write | Create or overwrite files |
| edit | Surgical string replacement in files |
| glob | Find files by pattern |
| grep | Search file contents with regex |
Execution
| Tool | Purpose |
|---|---|
| shell | Execute shell commands with history and process management |
Code Intelligence
| Tool | Purpose |
|---|---|
| code_context | Unified code context index — symbols, call graphs, blast radius |
Project Management
| Tool | Purpose |
|---|---|
| kanban | Create, update, and query kanban cards for task tracking |
Git
| Tool | Purpose |
|---|---|
| git changes | Query git diff and change information |
Communication
| Tool | Purpose |
|---|---|
| question | Ask the user clarifying questions |
| summary | Provide structured summaries |
Agent Orchestration
| Tool | Purpose |
|---|---|
| agent | Spawn subagents for delegated work |
| skill | Invoke a skill by name |
| ralph | Autonomous execution coordinator |
Web
| Tool | Purpose |
|---|---|
| web | Fetch web content for research |
How Tools Fit In
Tools sit beneath skills and agents in the stack. Here’s the relationship:
- A skill (e.g.,
/test) defines the workflow. - An agent mode (e.g., tester) shapes how the AI approaches the task.
- Tools (e.g., shell, files) are what the agent actually calls to do the work.
- Validators (e.g., code-security) check the changed files when the review pipeline runs.
The agent has access to all tools and chooses which to use based on context. The skill and agent mode influence these choices through their instructions, but tools themselves are general-purpose.
MCP Protocol
All tools are served via the Model Context Protocol. When you run sah serve, it starts an MCP server (stdio by default, HTTP optionally) that exposes these tools to any connected agent. Claude Code discovers them automatically via the MCP configuration created by sah init.
This means SwissArmyHammer’s tools work alongside any other MCP servers you have configured. The agent sees a unified tool palette from all sources.
Validators
Validators are the guardrails of SwissArmyHammer. They are rules-as-data quality gates — focused agents that enforce code quality, security, and test integrity. Each validator is scoped by file globs to the changed files it applies to, and the review pipeline runs the matching validators over those changes.
What a Validator Is
A validator is an AVP (Agent Validator Protocol) rule set: a collection of rules organized under a VALIDATOR.md file. Each rule is a markdown document that describes what to check and how to report violations. The review pipeline processes these rules against the changed files it was given.
Built-in Validators
SwissArmyHammer ships with a set of built-in validators. Each heading below
names a validator set — one directory of builtin/validators/ — and each
bullet names a rule that set holds, so you can find the rule file by the name
you read here. The lists are illustrative rather than exhaustive — the
authoritative list is the builtin validator tree itself, which evolves over
time.
code-hygiene
Enforces structural code quality rules:
function-length— catches functions that are too longmagic-numbers— requires named constants for repeated literals and repeated configurationmissing-docs— flags public functions and types with no documentation commentno-commented-code— flags large blocks of commented-out codedead-code— flags added symbols with no inbound callers, orphaned modules, and unreachable branchesdata-driven— flags a match or if-chain over a known set that is really a table
Four of these — dead-code, function-length, magic-numbers and
missing-docs — also ship a per-language tool rule beside the prompt
rule. A tool rule runs a language tool instead of an LLM, and it replaces the
prompt rule for the files it matches: function-length-rust,
magic-numbers-python and missing-docs-typescript are three of them. The
set holds one tool rule that replaces no prompt rule — stuttering-name-go,
which flags an exported Go name that repeats its package name.
builtin/validators/README.md states the whole tool rule contract.
code-security
Catches security vulnerabilities:
no-secrets— flags hardcoded secrets, API keys, and credentialsinjection— flags SQL injection, XSS, command injection, and other input validation defectscommand-safety— flags destructive shell commands in the diff, such asrm -rf /,DROP TABLE, and force pushes
test-integrity
Prevents test cheating:
no-test-cheating— flags skipped, disabled, or inappropriately mocked testsno-hard-code— flags a hard-coded return value written to make a test appear to pass
completeness
Checks that a change reaches every site it must:
invariant-propagation— a localized change to a token, flag, format, or case must reach every site that handles itinverse-operation-coverage— a change to one direction of a paired operation must exercise the inversecase-sensitivity-coverage— a change to case-sensitive matching needs one regression test through the changed pathpublic-output-contract— do not reformat user-facing output, drop an intended side effect, or break a public declaration callers depend on
duplication and reuse
duplication— flags verbatim and near-verbatim copied blocks; the set also holds therustandswiftcarve-out rulesreuse— flags reimplementations of existing shared code
manifests
Checks dependency manifests rather than source code, so it runs only when a manifest changed:
unused-dependencies-rust— flags a dependency aCargo.tomldeclares that no source file of the package names
Language sets
rust, python, js-ts, swift, dart, and numpy each hold the rules for
one language or library. A naming or logging prompt rule lives here rather
than in code-hygiene, because each one is written for a single language:
js-ts holds naming-and-style, swift holds naming-clarity, casing, and
doc-parameter-naming, and python holds logging. A naming tool rule can
live in code-hygiene, and one does — stuttering-name-go, listed above.
How Validators Work
The review pipeline collects the changed files, matches each validator’s match.files globs against them, and runs the matching validators over the changes:
Changed files
│
├─ Loader matches validators by file glob
│ ├─ code-hygiene checks the changed source
│ ├─ code-security checks for secrets
│ └─ Findings collected with each validator's severity
│
└─ Blocking findings (error severity) gate the change
Matching is on file globs only — a validator with no match.files applies to everything, and one scoped to *.rs only runs on Rust changes.
Setting Up Validators
Built-in validators are always available. Project-specific validators go in ./.validators/ under the workspace root, and user-wide validators in ~/.validators/.
Configuring the Review Tool
The review tool reads two optional keys from .sah/sah.yaml, both under a review: mapping:
| Config key | What it controls | When unset |
|---|---|---|
review.model | The Claude CLI --model switch the review tool runs its validator agents with. | The global default (top-level model:) is used; when that is also unset, haiku. |
review.concurrency | The number of validator agents run in parallel. Must be a positive integer. | The platform default concurrency is used. |
Claude Code is the only chat executor, so both keys hold a Claude CLI --model switch — haiku, sonnet, opus, or a full model id. Set review.model in .sah/sah.yaml to switch only the review tool; the global default (model:) stays untouched. Set the top-level model: instead to change the default that every tool — including review — falls back to. A fully unconfigured review scope runs claude --model haiku.
A configured .sah/sah.yaml looks like:
model: sonnet # global default for all tools
review:
model: haiku # review tool overrides the global default
concurrency: 4 # run 4 validator agents in parallel
Creating Custom Validators
A validator rule set is a directory with a VALIDATOR.md and a rules/ directory. Each rule is a markdown file describing what to check.
The VALIDATOR.md frontmatter declares:
name— the rule set identifier (defaults to the directory name).description— what the rule set checks.match.files— file glob patterns that scope the rule set to the changed files it applies to. Supports@file_groups/...includes (e.g.@file_groups/source_code) that expand to shared pattern lists. Matching is on file globs only.severity— default severity for the rules (info,warn, orerror).tags— optional labels for filtering and organization.probes— optional list of probe names (plain strings) the rule set requests from the probe catalog.
---
name: my-team-rules
description: The rules this team adds on top of the built-in sets
match:
files:
- "@file_groups/source_code"
severity: error
probes:
- callers
---
The legacy trigger key (which named a Claude Code hook event) has been removed. The loader is lenient — a leftover trigger still loads — but check validators flags it so you can remove it.
Sharing Validators
Validators can be published and installed via Mirdan:
# Create and publish
mirdan new validator my-team-rules
mirdan publish
# Install on another project
mirdan install my-team-rules
This lets teams codify their standards as installable packages — new projects get the team’s quality rules with a single command.
Validator Locations
| Location | Scope |
|---|---|
| Built-in (embedded in binary) | Always available |
Project ./.validators/ | Project-specific rules |
User ~/.validators/ | User-wide rules |
| Installed via Mirdan | Project or global |
Precedence is builtin → user → project: a project rule set overrides a user rule set of the same name, which overrides the built-in.
Closing the Write Surface
SwissArmyHammer attaches live LSP diagnostics to every file mutation, so the
model sees what its edit broke on the same turn it makes the edit. That only
works if the mutation actually flows through the instrumented files MCP tool
(op: "edit file" / op: "write file"), which folds the diagnostics in. A
mutation that goes around the tool produces no diagnostics — it is invisible to
the inline fold-in.
The goal is a closed write surface: every byte written to the working tree goes through the instrumented tool, so diagnostics always ride the result. This page describes how SwissArmyHammer closes the editing half of that surface on Claude Code, the prerequisite it still depends on, and the tradeoff it accepts.
An MCP server can’t disable a host’s native tools
Claude Code ships its own native Edit and Write tools. An MCP
server (which is what sah serve is) can add tools, but it cannot remove or
disable the host’s built-in ones. As long as the native mutators are present and
allowed, the model — tuned to reach for them — will, and those edits bypass the
instrumented path.
So the editing surface is closed not from inside the server but with a host
config fragment: a Claude Code settings.json change that
- sets
permissions.denyonEditandWrite, so the model is told not to use the native mutators, and - adds a
PreToolUsehook on those same tools that, if one is attempted anyway, denies it and redirects the model to thefilesMCP tool’s edit/write op.
This fragment is installed for you — it is shipped through the same
sah init config surface that registers the MCP server and writes the
statusline, not something you hand-author. It is plain, Claude-shaped
settings.json: valid on every Claude Code version, inert on agents that don’t
read those keys, and a no-op on hosts that have no hook support (an unrecognized
hooks block is simply ignored rather than an error).
Prerequisite: the shell must be closed first
Closing the editing tools is not enough to close the write surface. An
open Bash tool can write files directly — cat > file, sed -i, tee,
redirection — entirely outside any edit tool and therefore outside the
diagnostics fold-in. While a general-purpose shell is available, the write
surface has a hole no edit-tool deny can patch.
So shell-shorting is the prerequisite for a truly closed write surface: until the shell is constrained to a tool that cannot perform arbitrary file writes, denying the edit tools narrows the gap but does not seal it. Closing the shell is a separate initiative; this editing-surface fragment is one half of the whole.
For everything that still leaks — through the shell today, or through any future gap — the leader watcher remains the async backstop: a single leader-owned file watcher per workdir notices changes on disk and re-flows diagnostics out of band, so a bypassing write is caught eventually even though it did not ride an edit-tool result inline.
The tradeoff: latency and reliability
Routing edits through MCP is not free, and the choice is deliberate.
- Native
Editis fast and the model is tuned to it. It is an in-process tool call with no extra round-trip; the model reaches for it fluently. - Routing through the
filesMCP tool adds latency — an extra hop to the server and back — and makes us own edit reliability. When the model edits through our tool, our tool’s correctness (encoding preservation, line-ending preservation, atomic replacement, exact-match semantics) is what stands between the model and a corrupted file.
That cost is worth paying only while files edit stays at least as reliable as
the native tool it displaces. The whole point is to gain diagnostics on every
mutation; if the instrumented path were flakier than the tool it replaces, we
would be trading correctness for visibility, which is a bad trade. The bar for
keeping this fragment installed is that the redirect target never regresses below
the native tool’s reliability.
Installation
Install SwissArmyHammer and configure it for use with Claude Code.
Prerequisites
- Claude Code — For MCP integration (recommended)
- Git — For version control features
Install from Homebrew
brew install swissarmyhammer/tap/swissarmyhammer-cli
This installs all three CLIs: sah, avp, and mirdan.
Verify Installation
sah --version
sah doctor
The doctor command checks your installation and configuration.
Claude Code Integration
Initialize SwissArmyHammer for your project:
sah init
This does two things:
- Registers
sahas an MCP server in.mcp.json - Creates the project directory with skills and workflows
Verify everything:
sah doctor
Scope Options
sah init supports different scopes:
| Scope | File | Use Case |
|---|---|---|
project | .mcp.json / .claude/settings.json | Shared with team (default) |
local | Per-project local config | Personal, not committed |
user | ~/.claude.json / ~/.claude/settings.json | Applies to all projects |
sah init user # Install globally
Shell Completions (Optional)
# Zsh
sah completions zsh > ~/.zfunc/_sah
# Bash
sah completions bash > ~/.bash_completion.d/sah
# Fish
sah completions fish > ~/.config/fish/completions/sah.fish
Next Steps
- Quick Start — Start using the integrated SDLC
Quick Start
Get the integrated SDLC running in your project.
Setup
# Install
brew install swissarmyhammer/tap/swissarmyhammer-cli
# Initialize in your project
cd your-project
sah init # MCP server + tools + skills
# Verify
sah doctor
The Development Cycle
Once initialized, the skills are available as slash commands in Claude Code:
1. Plan
/plan
Researches your codebase and creates kanban cards for the work ahead. The planner agent explores code structure, identifies dependencies, and decomposes the task into implementable units.
2. Implement
/implement
Picks up the next kanban card and implements it. The implementer agent writes code, runs tests, and reports results. Validators check every file write for code quality and security issues.
To work through the entire board autonomously:
/implement-all
3. Test
/test
Runs the test suite, analyzes failures, fixes issues, and reports back. The tester agent handles verbose test output so your conversation stays clean.
4. Review
/review
Performs a structured code review of your changes. The reviewer agent applies language-specific guidelines and captures findings.
5. Commit
/commit
Creates clean, well-organized git commits from your staged changes.
Other Useful Skills
/coverage # Find untested code in your changes
/deduplicate # Find and refactor copy-paste code
/double-check # Verify recent work before moving on
/code-context # Explore codebase structure
/shell # Run shell commands with history
Installing More Skills
Browse and install community skills via Mirdan:
mirdan search "my-topic"
mirdan install some-skill
Next Steps
- The Integrated SDLC — Understand how skills, agents, tools, and validators work together
- Skills — Deep dive into the skill system
- Validators — Configure quality guardrails
Command-Line Help for swissarmyhammer
This document contains the help content for the swissarmyhammer command-line program.
Installation
brew install swissarmyhammer/tap/swissarmyhammer
Command Overview:
swissarmyhammer↴swissarmyhammer serve↴swissarmyhammer serve http↴swissarmyhammer init↴swissarmyhammer deinit↴swissarmyhammer doctor↴swissarmyhammer completion↴swissarmyhammer validate↴swissarmyhammer tools↴swissarmyhammer tools enable↴swissarmyhammer tools disable↴swissarmyhammer statusline↴swissarmyhammer statusline config↴
swissarmyhammer
swissarmyhammer is an MCP (Model Context Protocol) server that brings skills, workflows, and agents to AI coding tools. It supports template substitution and seamless integration with Claude Code and other ACP-compatible editors.
Global arguments can be used with any command to control output and behavior: –verbose Show detailed information and debug output –format Set output format (table, json, yaml) for commands that support it –debug Enable debug mode with comprehensive tracing –quiet Suppress all output except errors
Main commands: serve Run as MCP server (default when invoked via stdio) init Set up sah for all detected AI coding agents (skills + MCP) doctor Diagnose configuration and setup issues validate Validate configuration files for syntax and best practices completion Generate shell completion scripts
Example usage: swissarmyhammer serve # Run as MCP server swissarmyhammer init # Set up skills + MCP for detected agents swissarmyhammer doctor # Check configuration
Usage: swissarmyhammer [OPTIONS] [COMMAND]
Subcommands:
serve— Run as MCP server (default when invoked via stdio)init— Set up sah for all detected AI coding agents (skills + MCP)deinit— Remove sah from all detected AI coding agents (skills + MCP)doctor— Diagnose configuration and setup issuescompletion— Generate shell completion scriptsvalidate— Validate skills and workflows for syntax and best practicestools— Manage tool enable/disable statestatusline— Render statusline from Claude Code JSON (stdin) or dump config
Options:
-
-v,--verbose— Enable verbose logging -
-d,--debug— Enable debug logging -
-q,--quiet— Suppress all output except errors -
--format <FORMAT>— Global output formatPossible values:
table,json,yaml
swissarmyhammer serve
Run as MCP server. This is the default mode when invoked via stdio (e.g., by Claude Code). The server will:
- Expose the SwissArmyHammer tools and workflows via the MCP protocol
- Watch for file changes and reload automatically
Example: swissarmyhammer serve # Stdio mode (default) swissarmyhammer serve http # HTTP mode
Or configure in Claude Code’s MCP settings
Usage: swissarmyhammer serve [COMMAND]
Subcommands:
http— Start HTTP MCP server
swissarmyhammer serve http
Start HTTP MCP server for web clients, debugging, and ACP agent integration. The server exposes MCP tools through HTTP endpoints and provides:
- RESTful MCP protocol implementation
- Health check endpoint at /health
- Support for random port allocation (use port 0)
- Graceful shutdown with Ctrl+C
Example: swissarmyhammer serve http –port 8080 –host 127.0.0.1 swissarmyhammer serve http –port 0 # Random port
Usage: swissarmyhammer serve http [OPTIONS]
Options:
-
-p,--port <PORT>— Port to bind to (use 0 for random port)Default value:
8000 -
-H,--host <HOST>— Host to bind toDefault value:
127.0.0.1
swissarmyhammer init
Set up SwissArmyHammer for all detected AI coding agents.
This command:
- Registers sah as an MCP server for all detected agents (Claude Code, Cursor, Windsurf, etc.)
- Creates the .sah/ project directory
- Installs builtin skills to the central .skills/ store with symlinks to each agent
The command is idempotent - safe to run multiple times.
Targets: project Write to project-level config files (default, shared with team via git) local Write to ~/.claude.json per-project config (personal, not committed) user Write to global config files (all projects)
Examples: sah init # Project-level setup (default) sah init user # Global setup for all projects sah init local # Personal setup, not committed to git
Usage: swissarmyhammer init [TARGET]
Arguments:
-
<TARGET>— Where to install the MCP server configurationDefault value:
projectPossible values:
project: Project-level configuration (committed to the repo)local: Local project configuration that is not committeduser: User-wide (global) configuration
swissarmyhammer deinit
Remove SwissArmyHammer from all detected AI coding agents.
By default, only the MCP server entries are removed from agent config files. Use –remove-directory to also delete .sah/ and installed skills.
Examples: sah deinit # Remove from project settings sah deinit user # Remove from user settings sah deinit –remove-directory # Also remove .sah/ and skills
Usage: swissarmyhammer deinit [OPTIONS] [TARGET]
Arguments:
-
<TARGET>— Where to remove the MCP server configuration fromDefault value:
projectPossible values:
project: Project-level configuration (committed to the repo)local: Local project configuration that is not committeduser: User-wide (global) configuration
Options:
--remove-directory— Also remove .sah/ project directory
swissarmyhammer doctor
Diagnose and troubleshoot your SwissArmyHammer setup in seconds.
Save hours of debugging time with comprehensive automated checks that identify configuration issues, permission problems, and integration errors before they impact your workflow.
WHAT IT CHECKS
The doctor command runs a complete health assessment of your environment: • PATH Configuration - Verifies swissarmyhammer is accessible from your shell • Claude Code Integration - Validates MCP server configuration and connectivity • Skills - Checks directories, file permissions, and YAML syntax • File Watching - Tests file system event monitoring capabilities • System Resources - Validates required dependencies and system capabilities
WHY USE DOCTOR
• Quick Diagnosis - Complete system check in seconds, not hours • Clear Reporting - Easy-to-understand pass/fail results with actionable guidance • Early Detection - Catch configuration problems before they cause failures • Setup Validation - Verify your installation is working correctly • Integration Testing - Ensure Claude Code and MCP are properly connected
UNDERSTANDING RESULTS
Exit codes indicate the severity of findings: 0 - All checks passed - System is healthy and ready 1 - Warnings found - System works but has recommendations 2 - Errors found - Critical issues preventing proper operation
COMMON WORKFLOWS
First-time setup verification: swissarmyhammer doctor
Detailed diagnostic output: swissarmyhammer doctor –verbose
After configuration changes: swissarmyhammer doctor
CI/CD health checks: swissarmyhammer doctor && echo “System ready”
EXAMPLES
Basic health check: swissarmyhammer doctor
Detailed diagnostics with fix suggestions: swissarmyhammer doctor –verbose
Quiet mode for scripting: swissarmyhammer doctor –quiet
The doctor command gives you confidence that your development environment is properly configured and ready for AI-powered workflows.
Usage: swissarmyhammer doctor
swissarmyhammer completion
Generates shell completion scripts for various shells. Supports:
- bash
- zsh
- fish
- powershell
Examples:
Bash (add to ~/.bashrc or ~/.bash_profile)
sah completion bash > ~/.local/share/bash-completion/completions/sah
Zsh (add to ~/.zshrc or a file in fpath)
sah completion zsh > ~/.zfunc/_sah
Fish
sah completion fish > ~/.config/fish/completions/sah.fish
PowerShell
sah completion powershell >> $PROFILE
Usage: swissarmyhammer completion <SHELL>
Arguments:
-
<SHELL>— Shell to generate completion forPossible values:
bash,elvish,fish,powershell,zsh
swissarmyhammer validate
Catch configuration errors before they cause failures with comprehensive validation.
The validate command ensures quality and correctness across your entire SwissArmyHammer configuration, detecting syntax errors, structural issues, and best practice violations before they impact your workflows.
Quality Assurance
Comprehensive Validation: • Skill files from all sources (builtin, user, project) • Workflow definitions from standard locations • MCP tool schemas and CLI integration (with –validate-tools) • Template syntax and variable usage • YAML frontmatter structure • Required field presence and format • Best practice compliance
Early Error Detection: • Find syntax errors before execution • Identify missing required fields • Detect template variable mismatches • Validate workflow state machine structure • Check MCP tool schema correctness • Verify CLI integration compatibility
CI/CD Integration: • Automated quality checks in build pipelines • Exit codes indicate validation results • Quiet mode for clean CI output • JSON output for tool integration • Fast execution for rapid feedback
What Gets Validated
Skill Files: • YAML frontmatter syntax correctness • Required fields: title, description • Template variable declarations match usage • Liquid template syntax validity • Parameter definitions and types • Default value correctness • Partial marker handling
Workflow Files: • State machine structure integrity • State connectivity and transitions • Action and tool references • Variable declarations and usage • Conditional logic syntax • Loop and iteration constructs • Error handling configuration
MCP Tools (with –validate-tools): • JSON schema correctness • Parameter type definitions • Required vs optional field specifications • Tool description completeness • CLI integration requirements • Documentation quality • Best practice adherence
Validation Modes
Standard validation (skills and workflows):
sah validate
Comprehensive validation (including MCP tools):
sah validate --validate-tools
CI/CD mode (errors only, no warnings):
sah validate --quiet
sah validate --validate-tools --quiet
Machine-readable output:
sah validate --format json
sah validate --validate-tools --format json
Exit Codes
0- All validation passed, no errors or warnings1- Warnings found but no errors2- Errors found that require fixes
Use exit codes in scripts and CI pipelines:
sah validate || exit 1
Discovery and Sources
Skills validated from: • Built-in skills (embedded in binary) • User skills ($XDG_DATA_HOME/sah/skills) • Project skills (./.skills/)
Workflows validated from: • Built-in workflows (embedded in binary) • User workflows (~/.sah/workflows/) • Project workflows (./workflows/)
MCP tools validated from: • SwissArmyHammer tool definitions • CLI command integration points • Tool parameter schemas
Common Use Cases
Pre-commit validation:
sah validate --quiet && git commit
CI pipeline check:
sah validate --validate-tools --format json > validation-report.json
Development workflow validation:
sah validate --verbose
Quality gate in deployment:
sah validate --validate-tools --quiet || exit 1
Validation Checks
YAML Frontmatter: • Syntax correctness • Required fields present • Field types match expectations • Valid enum values
Template Syntax: • Liquid template parsing • Variable references exist • Filter syntax correctness • Control flow validity • Partial references resolve
Workflow Structure: • All states are reachable • Transitions are valid • Actions reference existing tools • Variables are declared before use • Error handlers are properly configured
MCP Tool Schemas: • JSON schema validity • Parameter type correctness • Required field specification • Tool description quality • CLI integration completeness
Best Practices: • Descriptive titles and descriptions • Proper parameter documentation • Sensible default values • Clear error messages • Consistent naming conventions
Examples
Basic validation:
sah validate
Full system validation:
sah validate --validate-tools
Quiet mode for CI:
sah validate --quiet
Detailed output:
sah --verbose validate
JSON output for tooling:
sah validate --format json | jq '.errors'
Validate after changes:
sah validate --validate-tools --verbose
Output Formats
Table format (default): • Human-readable tabular output • Color-coded error/warning levels • File paths and line numbers • Clear error descriptions
JSON format: • Machine-parseable structured output • Complete error and warning details • Suitable for CI integration • Easy tool consumption
YAML format: • Human-readable structured output • Hierarchical error organization • Good for documentation • Easy diff comparison
Troubleshooting
Validation errors in skills: • Check YAML frontmatter syntax • Verify all required fields present • Ensure template variables declared • Test Liquid template syntax
Validation errors in workflows: • Verify state machine structure • Check all state transitions • Ensure action references valid • Validate variable declarations
Validation errors in tools: • Review JSON schema correctness • Check parameter type definitions • Verify required fields specified • Ensure documentation complete
Integration with Development Workflow
Pre-commit hook:
#!/bin/bash
sah validate --quiet || {
echo "Validation failed. Fix errors before committing."
exit 1
}
Git hook (.git/hooks/pre-commit):
#!/bin/bash
sah validate --validate-tools --quiet
Make target:
validate:
sah validate --validate-tools --quiet
.PHONY: validate
CI pipeline (GitHub Actions):
- name: Validate Configuration
run: sah validate --validate-tools --format json
Benefits
Catch Errors Early: • Find problems before runtime • Prevent workflow failures • Avoid wasted execution time • Reduce debugging effort
Ensure Quality: • Enforce best practices • Maintain consistent standards • Improve documentation quality • Promote good patterns
Enable Confidence: • Deploy with certainty • Refactor safely • Share configuration reliably • Integrate automatically
Support Automation: • CI/CD quality gates • Automated testing • Pre-commit validation • Continuous quality monitoring
The validate command is your quality assurance system for SwissArmyHammer configuration, ensuring that skills, workflows, and tools are correct, complete, and ready for reliable operation.
Usage: swissarmyhammer validate [OPTIONS]
Options:
-
-q,--quiet— Suppress all output except errors. In quiet mode, warnings are hidden from both output and summary -
--format <FORMAT>— Output formatDefault value:
tablePossible values:
table,json,yaml -
--validate-tools— Validate MCP tool schemas for CLI compatibility
swissarmyhammer tools
Manage which MCP tools are enabled or disabled.
Tools are enabled by default. Disable tools you don’t need to reduce the tool surface visible to AI agents.
Examples: sah tools # List all tools with status sah tools disable # Disable all tools sah tools enable shell git # Enable specific tools sah tools disable kanban web # Disable specific tools sah tools enable # Enable all tools sah tools –global disable web # Disable web globally
Usage: swissarmyhammer tools [OPTIONS] [COMMAND]
Subcommands:
enable— Enable tools (all if no names given)disable— Disable tools (all if no names given)
Options:
--global— Write to global config (~/.sah/tools.yaml) instead of project
swissarmyhammer tools enable
Enable tools (all if no names given)
Usage: swissarmyhammer tools enable [NAMES]...
Arguments:
<NAMES>— Tool names to enable (omit for all)
swissarmyhammer tools disable
Disable tools (all if no names given)
Usage: swissarmyhammer tools disable [NAMES]...
Arguments:
<NAMES>— Tool names to disable (omit for all)
swissarmyhammer statusline
Render a styled statusline for Claude Code integration.
In normal mode, reads JSON from stdin and outputs styled ANSI text. Use ‘sah statusline config’ to dump the full annotated builtin config.
The statusline is configured via YAML with 3-layer stacking:
- Builtin defaults (embedded in binary)
- User config (~/.sah/statusline/config.yaml)
- Project config (.sah/statusline/config.yaml)
Examples: echo ‘{“model”:{“display_name”:“Opus”}}’ | sah statusline sah statusline config > .sah/statusline/config.yaml
Usage: swissarmyhammer statusline [COMMAND]
Subcommands:
config— Dump the full annotated builtin config to stdout
swissarmyhammer statusline config
Dump the full annotated builtin config to stdout
Usage: swissarmyhammer statusline config
Command-Line Help for mirdan
This document contains the help content for the mirdan command-line program.
Installation
brew install swissarmyhammer/tap/mirdan-cli
Command Overview:
mirdan↴mirdan agents↴mirdan new↴mirdan new skill↴mirdan new validator↴mirdan new tool↴mirdan new plugin↴mirdan install↴mirdan uninstall↴mirdan list↴mirdan search↴mirdan info↴mirdan login↴mirdan logout↴mirdan whoami↴mirdan publish↴mirdan unpublish↴mirdan outdated↴mirdan update↴mirdan sync↴mirdan status↴mirdan doctor↴mirdan start↴mirdan completion↴
mirdan
Mirdan manages skills, validators, tools, and plugins across all detected AI coding agents.
Skills are deployed to each agent’s skill directory (e.g. .claude/skills/, .cursor/skills/). Validators are deployed to ./.validators/ (project) or ~/.validators/ (global). Tools are deployed to .tools/ and registered in agent MCP configs. Plugins are deployed to agent plugin directories (e.g. .claude/plugins/).
Environment variables: MIRDAN_REGISTRY_URL Override the registry URL (useful for local testing) MIRDAN_TOKEN Provide an auth token without logging in MIRDAN_CREDENTIALS_PATH Override the credentials file location MIRDAN_AGENTS_CONFIG Override the agents configuration file
Usage: mirdan [OPTIONS] <COMMAND>
Subcommands:
agents— Detect and list installed AI coding agentsnew— Create a new package from templateinstall— Install a package (type auto-detected from contents)uninstall— Remove an installed packagelist— List installed packagessearch— Search the registry for skills and validatorsinfo— Show detailed information about a packagelogin— Authenticate with the registrylogout— Log out from the registry and revoke tokenwhoami— Show current authenticated userpublish— Publish a package to the registry (type auto-detected)unpublish— Remove a published package version from the registryoutdated— Check for available package updatesupdate— Update installed packages to latest versionssync— Reconcile .skills/ with agent directories and verify lockfilestatus— Report the install-status of sah-managed components per agent and scopedoctor— Diagnose Mirdan setup and configurationstart— Start the Mirdan tray/accessory appcompletion— Generate shell completion scripts
Options:
-d,--debug— Enable debug output to stderr-y,--yes— Skip confirmation prompts (useful for CI/CD)--agent <AGENT_ID>— Limit operations to a single agent (e.g. claude-code, cursor)
mirdan agents
Detect and list installed AI coding agents
Usage: mirdan agents [OPTIONS]
Options:
--all— Show all known agents, not just detected ones--json— Output as JSON
mirdan new
Create a new package from template
Usage: mirdan new <COMMAND>
Subcommands:
skill— Scaffold a new skill (agentskills.io spec)validator— Scaffold a new validator (AVP spec)tool— Scaffold a new tool (MCP server definition)plugin— Scaffold a new plugin (Claude Code plugin)
mirdan new skill
Scaffold a new skill (agentskills.io spec)
Usage: mirdan new skill [OPTIONS] <NAME>
Arguments:
<NAME>— Skill name (kebab-case, 1-64 chars)
Options:
--global— Create in agent global skill directories instead of project-level
mirdan new validator
Scaffold a new validator (AVP spec)
Usage: mirdan new validator [OPTIONS] <NAME>
Arguments:
<NAME>— Validator name (kebab-case, 1-64 chars)
Options:
--global— Create in ~/.validators/ instead of ./.validators/
mirdan new tool
Scaffold a new tool (MCP server definition)
Usage: mirdan new tool [OPTIONS] <NAME>
Arguments:
<NAME>— Tool name (kebab-case, 1-64 chars)
Options:
--global— Create in $XDG_DATA_HOME/avp/tools/ instead of current directory
mirdan new plugin
Scaffold a new plugin (Claude Code plugin)
Usage: mirdan new plugin [OPTIONS] <NAME>
Arguments:
<NAME>— Plugin name (kebab-case, 1-64 chars)
Options:
--global— Create in global plugin directory
mirdan install
Install a package (type auto-detected from contents)
Usage: mirdan install [OPTIONS] <PACKAGE>
Arguments:
<PACKAGE>— Package name, name@version, ./local-path, owner/repo, or git URL
Options:
--global— Install globally--git— Treat package as a git URL (clone instead of registry lookup)--skill <SKILL>— Install a specific package by name from a multi-package repo--mcp— Install as an MCP server instead of a skill/validator--command <COMMAND>— MCP server command (binary to run). Required when –mcp is set--args <ARGS>— MCP server arguments
mirdan uninstall
Remove an installed package
Usage: mirdan uninstall [OPTIONS] <NAME>
Arguments:
<NAME>— Package name
Options:
--global— Remove from global locations
mirdan list
List installed packages
Usage: mirdan list [OPTIONS]
Options:
--skills— Show only skills--validators— Show only validators--tools— Show only tools--plugins— Show only plugins--json— Output as JSON
mirdan search
Search the registry for skills and validators
With a query argument, performs a single search and prints results. Without a query, enters interactive fuzzy search mode.
Usage: mirdan search [OPTIONS] [QUERY]
Arguments:
<QUERY>— Search query (omit for interactive mode)
Options:
--json— Output as JSON
mirdan info
Show detailed information about a package
Usage: mirdan info <NAME>
Arguments:
<NAME>— Package name
mirdan login
Authenticate with the registry
Opens a browser for OAuth login. The registry URL can be overridden with MIRDAN_REGISTRY_URL for local testing.
Usage: mirdan login
mirdan logout
Log out from the registry and revoke token
Usage: mirdan logout
mirdan whoami
Show current authenticated user
Usage: mirdan whoami
mirdan publish
Publish a package to the registry (type auto-detected)
Auto-detects package type from directory contents: - SKILL.md present -> publishes as a skill - VALIDATOR.md + rules/ present -> publishes as a validator - TOOL.md present -> publishes as a tool - .claude-plugin/plugin.json present -> publishes as a plugin
Usage: mirdan publish [OPTIONS] [SOURCE]
Arguments:
-
<SOURCE>— Path or git URL to the package directory to publishDefault value:
.
Options:
--dry-run— Validate and show what would be published without uploading
mirdan unpublish
Remove a published package version from the registry
Usage: mirdan unpublish <NAME_VERSION>
Arguments:
<NAME_VERSION>— Package name@version (e.g. my-skill@1.0.0)
mirdan outdated
Check for available package updates
Usage: mirdan outdated
mirdan update
Update installed packages to latest versions
Usage: mirdan update [OPTIONS] [NAME]
Arguments:
<NAME>— Specific package to update (all if omitted)
Options:
--global— Update global packages
mirdan sync
Reconcile .skills/ with agent directories and verify lockfile
Usage: mirdan sync [OPTIONS]
Options:
--global— Sync global locations
mirdan status
Report the install-status of sah-managed components per agent and scope
Shows, for each detected agent and scope (project, user), whether the sah MCP server, skills, subagents, and permissions are installed.
Usage: mirdan status [OPTIONS]
Options:
--all— Include components that do not apply to an agent at a scope--json— Output as JSON
mirdan doctor
Diagnose Mirdan setup and configuration
Usage: mirdan doctor [OPTIONS]
Options:
-v,--verbose— Show detailed output including fix suggestions
mirdan start
Start the Mirdan tray/accessory app
Usage: mirdan start
mirdan completion
Generates shell completion scripts for various shells. Supports:
- bash
- zsh
- fish
- powershell
Examples:
Bash (add to ~/.bashrc or ~/.bash_profile)
mirdan completion bash > ~/.local/share/bash-completion/completions/mirdan
Zsh (add to ~/.zshrc or a file in fpath)
mirdan completion zsh > ~/.zfunc/_mirdan
Fish
mirdan completion fish > ~/.config/fish/completions/mirdan.fish
PowerShell
mirdan completion powershell >> $PROFILE
Usage: mirdan completion <SHELL>
Arguments:
-
<SHELL>— Shell to generate completion forPossible values:
bash,elvish,fish,powershell,zsh
Command-Line Help for shelltool
This document contains the help content for the shelltool command-line program.
Installation
brew install swissarmyhammer/tap/shelltool-cli
Command Overview:
shelltool↴shelltool serve↴shelltool init↴shelltool deinit↴shelltool doctor↴shelltool completion↴
shelltool
shelltool - A shell that saves tokens
Replaces Bash and exec CLI tools with a persistent, searchable shell. Instead of flooding the context window with raw command output, shelltool stores everything in history — the agent runs commands, then greps the results, retrieving only the lines that matter.
Usage: shelltool [OPTIONS] <COMMAND>
Subcommands:
serve— Run MCP server over stdio, exposing the shell toolinit— Install shelltool MCP server into Claude Code settingsdeinit— Remove shelltool from Claude Code settingsdoctor— Diagnose shelltool configuration and setupcompletion— Generate shell completion scripts
Options:
-d,--debug— Enable debug output to stderr
shelltool serve
Run MCP server over stdio, exposing the shell tool
Usage: shelltool serve
shelltool init
Install shelltool MCP server into Claude Code settings
Usage: shelltool init [TARGET]
Arguments:
-
<TARGET>— Where to install the server configurationDefault value:
projectPossible values:
project: Project-level configuration (committed to the repo)local: Local project configuration that is not committeduser: User-wide (global) configuration
shelltool deinit
Remove shelltool from Claude Code settings
Usage: shelltool deinit [TARGET]
Arguments:
-
<TARGET>— Where to remove the server configuration fromDefault value:
projectPossible values:
project: Project-level configuration (committed to the repo)local: Local project configuration that is not committeduser: User-wide (global) configuration
shelltool doctor
Diagnose shelltool configuration and setup
Usage: shelltool doctor [OPTIONS]
Options:
-v,--verbose— Show detailed output including fix suggestions
shelltool completion
Generates shell completion scripts for various shells. Supports:
- bash
- zsh
- fish
- powershell
Examples:
Bash (add to ~/.bashrc or ~/.bash_profile)
shelltool completion bash > ~/.local/share/bash-completion/completions/shelltool
Zsh (add to ~/.zshrc or a file in fpath)
shelltool completion zsh > ~/.zfunc/_shelltool
Fish
shelltool completion fish > ~/.config/fish/completions/shelltool.fish
PowerShell
shelltool completion powershell >> $PROFILE
Usage: shelltool completion <SHELL>
Arguments:
-
<SHELL>— Shell to generate completion forPossible values:
bash,elvish,fish,powershell,zsh
Command-Line Help for code-context
This document contains the help content for the code-context command-line program.
Installation
brew install swissarmyhammer/tap/code-context-cli
Command Overview:
code-context↴code-context serve↴code-context init↴code-context deinit↴code-context doctor↴code-context skill↴code-context completion↴
code-context
code-context - Structural code intelligence for AI agents
Provides indexed code navigation, symbol lookup, call graph traversal, blast radius analysis, and semantic search. Exposes these capabilities as MCP tools for AI coding agents.
Usage: code-context [OPTIONS] <COMMAND>
Subcommands:
serve— Run MCP server over stdio, exposing code-context toolsinit— Install code-context MCP server into Claude Code settingsdeinit— Remove code-context from Claude Code settingsdoctor— Diagnose code-context configuration and setupskill— Deploy code-context skill to agent .skills/ directoriescompletion— Generate shell completion scripts
Options:
-
-d,--debug— Enable debug output to stderr -
-j,--json— Output results as JSON (for operation commands) -
--no-progress— Disable interactive progress bars for long-running operations.indicatifauto-degrades to plain output on non-TTY stdout, but some environments (CI runners, recording wrappers) still benefit from a hard switch. With this flag set the dispatcher installs a no-op renderer and the tool emits no progress chrome.
code-context serve
Run MCP server over stdio, exposing code-context tools
Usage: code-context serve
code-context init
Install code-context MCP server into Claude Code settings
Usage: code-context init [TARGET]
Arguments:
-
<TARGET>— Where to install the server configurationDefault value:
projectPossible values:
project: Project-level configuration (committed to the repo)local: Local project configuration that is not committeduser: User-wide (global) configuration
code-context deinit
Remove code-context from Claude Code settings
Usage: code-context deinit [TARGET]
Arguments:
-
<TARGET>— Where to remove the server configuration fromDefault value:
projectPossible values:
project: Project-level configuration (committed to the repo)local: Local project configuration that is not committeduser: User-wide (global) configuration
code-context doctor
Diagnose code-context configuration and setup
Usage: code-context doctor [OPTIONS]
Options:
-v,--verbose— Show detailed output including fix suggestions
code-context skill
Deploy code-context skill to agent .skills/ directories
Usage: code-context skill
code-context completion
Generates shell completion scripts for various shells. Supports:
- bash
- zsh
- fish
- powershell
Examples:
Bash (add to ~/.bashrc or ~/.bash_profile)
code-context completion bash > ~/.local/share/bash-completion/completions/code-context
Zsh (add to ~/.zshrc or a file in fpath)
code-context completion zsh > ~/.zfunc/_code-context
Fish
code-context completion fish > ~/.config/fish/completions/code-context.fish
PowerShell
code-context completion powershell >> $PROFILE
Usage: code-context completion <SHELL>
Arguments:
-
<SHELL>— Shell to generate completion forPossible values:
bash,elvish,fish,powershell,zsh