Skill Bill takes feature work from an issue and acceptance criteria through planning, implementation, simplification, review, and a PR. A local runtime saves progress between phases, so interrupted work can continue from durable state.
Use it with Claude Code, Codex, or Cursor. One listed skill, /skill-bill, runs the full feature workflow, a single phase such as review or validation, or a runtime operation. You review the resulting changes before merging. The project is pre-1.0.
Quickstart · Glossary · Workflow · Skills · Platform packs · IDE integrations · Execution matrix · Documentation
Install and authenticate your coding agent's CLI, then install Skill Bill:
curl -fsSL https://raw.githubusercontent.com/Sermilion/SkillBill/main/install.sh | bashChoose your agents and telemetry level when prompted. The installer always installs every manifest-discovered platform pack. The installer downloads a self-contained runtime, renders /skill-bill with all packs' review specialists as its internal sidecars, links it into agent directories, and registers the MCP server. Prebuilt installs need no system JDK or Gradle. Installing over an older version removes the retired bill-* skills; see Upgrading from the bill-* skills.
Check the installation:
skill-bill version
skill-bill doctorOpen your coding agent in the target repository and start a feature:
/skill-bill APP-123 Add CSV export for the filtered orders list
New requirements without a key use the next local key by default. /skill-bill reads .feature-specs/, including ignored, untracked, completed, and archived bundles, and increments the highest issue number for the project's prefix. For example, bundles through NEWS-151 select NEWS-152. "Next available key" uses the same rule. If the local prefix is missing or ambiguous, it asks for a prefix, not a tracker connection. Supply a key yourself to override allocation. Include observable acceptance criteria, constraints, and any design reference in the requirements. A tracker reference without requirements uses the connected tracker after local existing-work checks. To resume, pass the key or path of an existing spec. The runtime prepares missing spec artifacts and resumes existing work. Direct CLI launches require the resolved key and requirements. Use /skill-bill APP-123 phase:plan to prepare a spec without starting implementation, or /skill-bill phase:review target:uncommitted to review existing changes. These examples use slash notation; use your agent's skill invocation syntax.
Install requirements, PATH setup, and source builds
Prebuilt targets are macos-arm64, macos-x64, linux-x64, and windows-x64. The installer needs Bash, curl, tar, unzip, and either shasum or sha256sum to download and checksum-verify the release bundle and runtime images. On Windows, use a Bash environment with symlink support. The installer reports how to enable it when unavailable.
Feature work also needs the target project's build tools and credentials for any Git push or PR creation.
To inspect the installer before running it:
curl -fsSL https://raw.githubusercontent.com/Sermilion/SkillBill/main/install.sh -o install.sh
less install.sh
bash install.shIf skill-bill is not found, add its launcher directory to your PATH. For the default directory, add this to your Bash or Zsh startup file:
export PATH="$HOME/.local/bin:$PATH"A full local checkout builds from source by default. Contributors can make that choice explicit:
git clone https://github.com/Sermilion/SkillBill.git
cd SkillBill
./install.sh --from-sourceSource builds require JDK 21 or newer. Set SKILL_BILL_JAVA_HOME if the installer cannot find a suitable JDK. Unsupported prebuilt hosts fall back to the source path and need its prerequisites. Use bash install.sh --release <tag> to select a published release; --from-source ignores release selection.
The installer always installs the desktop app. Local checkouts build it from source; standalone installs download a matching release build. Desktop installation failures stop the installer. Installation initializes the runtime database so the desktop app can open before the first workflow. An upgrade restarts the app if it is running.
Both ./uninstall.sh and skill-bill uninstall remove the desktop app and its launcher along with Skill Bill. They preserve databases, SQLite journals, and backups/ under ~/.skill-bill/ so reinstalling retains workflow history and telemetry. To erase that data, remove ~/.skill-bill/ manually after uninstalling.
Runtime files and rendered skills live under ~/.skill-bill/. User configuration lives at ~/.config/skill-bill/config.json and survives reinstalling. SKILL_BILL_CONFIG_PATH overrides that location. See Getting Started for install paths and troubleshooting.
To update later:
skill-bill operation update-check
skill-bill update- goal. A full run keyed by an issue, URL, or spec. The runtime owns preparation, planning (intake, preplan, plan), execution, and durable state. A single feature is a one-subtask goal.
- workflow. Persisted runtime state for one goal, standalone phase, or operation.
- subtask. One independently shipped unit of a decomposed goal.
- phase. A standalone-invocable skeleton id:
review,validation,plan,pr,monitor. Invoked asskill-bill phase <name>.verifyis not a phase. - slot. One of the 11
PhaseSlotwire values:preplan,plan,implementation,audit,code_review,quality_gate,write_history,commit_push,pull_request,monitor,standalone_review.standalone_reviewis the report-only operator review slot thatphase:reviewruns. - step. An internal workflow step id, distinct from phases and slots.
- operation. A
skill-bill operation <name>command.verifyandupdate-checkare operations. - pack. A platform pack under
platform-packs/<slug>/that owns review routing andvalidation_gate. - lane. A specialist review area routed to a pack skill.
- add-on. A pack-owned add-on under
platform-packs/<slug>/addons/or a user agent add-on underagent-addons/<slug>/, selected after dominant-stack routing.
/skill-bill <intake> launches the goal runtime. The runtime prepares a missing spec, plans the work, and runs it. If a spec or goal already exists, it resumes that instead. A small feature uses one subtask. Larger work can use dependency-ordered subtasks, each with a fresh execution context and durable handoff artifacts.
The runtime defines 11 slots. A full run uses the first ten in this order; standalone_review runs only for phase:review:
| Slot | What happens |
|---|---|
preplan |
Collect repository instructions and relevant durable artifacts. For a goal, this runs once and every subtask shares it. |
plan |
Plan the subtask's implementation. |
implementation |
Implement the plan, then run a mandatory simplification pass scoped to the subtask's changes. |
audit |
Check the acceptance criteria against the current code and tests, then plan and repair gaps. |
code_review |
Review the subtask commit, verify findings, and fix them in bounded rounds. |
quality_gate |
Run full project validation, or a compile-only build for goal subtasks before the last. |
write_history |
Record boundary history and decisions in area-owned agent/ files. |
commit_push |
Commit and push the subtask: one commit per subtask on the feature branch. |
pull_request |
Create or update the PR once every subtask is complete. |
monitor |
Watch CI on the open PR and repair failing checks. |
standalone_review |
Report-only operator review. phase:review runs this slot. |
Each standalone phase runs a subset of these slots through the same run loop. For example, phase:review runs standalone_review, and phase:plan runs intake, preplan and plan. Runs differ in which slots they include and where they keep state, not in how a slot runs.
The quality phases have different purposes:
| Phase or command | Checks |
|---|---|
validate |
An agent discovers and runs the project's required checks from repository instructions, build configuration, scripts, and CI. The runtime advances only when the agent reports that those checks passed. |
build |
Every goal subtask except the last runs the dominant pack's declared build command, then a cache-bypassing confirmation. This proves buildability and does not run the full test suite. |
| Standalone quality check | /skill-bill phase:validation runs the same full project checks and repair loop as goal validation. |
An unknown quality-gate selection value fails as a usage error.
Specs live under .feature-specs/, with a parent spec, executable subtask specs, and a decomposition manifest. Local specs are the default; optional Linear-backed preparation records issues and supports spec rehydration. The default commit model leaves one commit per completed subtask on the feature branch.
The runtime saves phase outputs and continuation state in a local database. Resuming uses those records and the current repository. Invalid contracts or ambiguous continuation records stop the run with an explicit error.
Watch an illustrated feature run
This scripted playback illustrates interruption and continuation. It is not a recording of the current runtime; the stages above describe current behavior.
Run these from the repository that owns the goal:
| Command | Effect |
|---|---|
skill-bill goal status APP-123 |
Read-only goal state and subtask details |
skill-bill work status --format json |
Repository work snapshot used by the IDE integrations |
skill-bill goal pause APP-123 |
Request a pause after the current subtask |
skill-bill goal stop APP-123 |
Record an operator stop and terminate the running goal |
skill-bill goal resume APP-123 |
Clear known stale resume wedges and the durable pause without launching work |
To continue a paused goal from the CLI, clear its pause and launch it with an explicit agent:
skill-bill goal resume APP-123
skill-bill goal APP-123 --agent claudeUse the agent ID for your installed CLI, such as claude, codex, or cursor. /skill-bill APP-123 starts or resumes the full workflow. Recovery can use another compatible agent because workflow state belongs to Skill Bill.
Name the work you want reviewed:
/skill-bill phase:review target:pr
/skill-bill phase:review target:HEAD
/skill-bill phase:review target:uncommitted mode:inline
/skill-bill phase:review target:staged mode:delegated
Review also accepts target:unstaged or a commit sha. Without target:, it reviews uncommitted changes when the worktree is dirty and HEAD when it is clean.
Review fixes what it finds. Both modes verify their findings, fix Blocker and Major ones in the working tree, and report the rest with a verdict. A standalone review creates no commit.
inline is the default. It runs one review worker over the routed areas at reduced depth. auto also resolves to inline. delegated is the experimental full-depth mode, with separate specialist workers, and requires explicit mode:delegated on a standalone review. Feature and goal workflows accept code-review:auto|inline and use inline review. A required worker that cannot launch blocks the review rather than silently reducing its depth.
For full project validation:
/skill-bill phase:validation
The phase uses the same agent strategy as goal validate. It discovers required checks from repository instructions, build configuration, scripts, and CI, then runs those checks and repairs failures. Validation covers the full project regardless of which files changed and requires no platform pack or declared validation command. If discovery finds no applicable commands, the agent prints a warning and completes the step. Unreadable configuration or failed discovery blocks validation.
/skill-bill is the only listed skill. Phases and operations are forms of it, not separate commands. Stack-specific review skills install as its internal sidecars.
There are three kinds of form:
- The full run (
/skill-bill <intake>) runs the ten feature-run slots (preplanthroughmonitor) with durable state, so it can pause and resume. - A phase (
phase:<name>) runs a few slots in memory. It writes no workflow row, branch, or checkpoint commit, and it cannot be resumed.phase:planis the exception: it is a durable, resumable plan workflow that stops after the spec bundle, creates no branch or commit, and is finished byskill-bill <KEY>.commit_pushis not available as a standalone phase. - An operation (
operation:<name>) is a standalone job outside the feature workflow. Operations that edit files, tag a release, or push stop atawaiting_confirmationand act only after you confirm.
| Form | Purpose | Runs |
|---|---|---|
/skill-bill |
Prepare new feature work from an <intake>, or resume an existing spec or goal, then run it |
skill-bill goal |
/skill-bill <intake> phase:plan |
Plan durably: seed the parent spec, author implementation-ready subtask specs and a manifest, save all planning checkpoints, then stop. skill-bill <KEY> finishes an unfinished plan or starts implementation from the completed plan |
skill-bill phase plan |
/skill-bill phase:review |
Review a PR, commit, or working-tree change with inline or delegated depth | skill-bill phase review |
/skill-bill phase:validation |
Run full project validation and repair findings, using the goal validation strategy | skill-bill phase validation |
/skill-bill phase:pr |
Commit pending changes, push the branch, create or update a PR, and monitor its CI | skill-bill phase pr |
/skill-bill [<issue-key|pr-url>] phase:monitor |
Watch CI on the checked-out branch's PR and fix failures, up to three attempts | skill-bill phase monitor |
/skill-bill <intake> operation:feature-guard |
Guard an implementation with a feature flag | skill-bill operation feature-guard |
/skill-bill <intake> operation:feature-guard-cleanup |
Remove a rolled-out feature flag and its legacy path | skill-bill operation feature-guard-cleanup |
/skill-bill operation:verify <linear-issue|requirements|spec:<path>> [target:<pr|branch|base..head>] |
Verify a change against a Linear issue, requirements text, or a task spec | skill-bill operation verify |
/skill-bill [<pr>] operation:pr-review-fix |
Triage PR feedback, then apply selected fixes, reply, and push after approval | skill-bill operation pr-review-fix |
/skill-bill [<scope>] operation:unit-test-value-check |
Identify tests that cannot catch a realistic regression | skill-bill operation unit-test-value-check |
/skill-bill operation:release bump:<patch|minor|major> |
Prepare a changelog, confirm the requested semver bump, and push an annotated tag | skill-bill operation release |
/skill-bill operation:update-check |
Compare the installed runtime version with GitHub releases | skill-bill operation update-check |
Boundary history and decisions are written by the goal's write_history slot. Goal status is CLI-only: run skill-bill goal status <KEY>.
/skill-bill APP-123 Add CSV export # full workflow from intake
/skill-bill APP-123 phase:plan # skill-bill phase plan APP-123
/skill-bill phase:review mode:delegated target:HEAD
Standalone phases and operations are operator tools. Agents invoke them only
when explicitly requested and never select them as full-run steps or recovery
actions. New full-run work uses supplied requirements and defaults to the next
local key from .feature-specs/ when no key is given. A tracker connection is
optional. An existing spec key or path resumes that spec. skill-bill <intake> routes to
the goal runtime, which prepares new work and resumes existing specs without
invoking a standalone phase command.
The full run forwards code-review:inline|auto as --code-review-mode; phase:review forwards mode: and target: unchanged. Release first prints the proposed version and changelog and exits awaiting_confirmation; confirming it with confirm:<token> creates and pushes the tag. [<scope>] operation:unit-test-value-check reviews unit tests without editing. <intake> operation:feature-guard and <intake> operation:feature-guard-cleanup print a plan and exit awaiting_confirmation. They edit only on confirm:<token>. [<pr>] operation:pr-review-fix prints a per-thread matrix for the PR's unresolved review threads and exits awaiting_confirmation; the dispatcher asks which threads to fix and re-runs it with confirm:<token> and select:. It pushes only with push:on.
Earlier versions installed a separate listed skill for each job. Those skills are retired, and reinstalling removes their links and copies. Use the matching /skill-bill form instead:
| Retired skill | Use instead |
|---|---|
bill-feature |
/skill-bill <intake> |
bill-feature-spec |
/skill-bill <intake> phase:plan |
bill-code-review |
/skill-bill phase:review |
bill-code-check |
/skill-bill phase:validation |
bill-pr-description |
/skill-bill phase:pr |
bill-boundary-history, bill-boundary-decisions |
The goal's write_history slot |
bill-feature-verify |
/skill-bill operation:verify |
bill-feature-guard |
/skill-bill <intake> operation:feature-guard |
bill-feature-guard-cleanup |
/skill-bill <intake> operation:feature-guard-cleanup |
bill-pr-review-fix |
/skill-bill operation:pr-review-fix |
bill-unit-test-value-check |
/skill-bill operation:unit-test-value-check |
bill-release |
/skill-bill operation:release bump:<patch|minor|major> |
bill-update-check |
/skill-bill operation:update-check |
bill-monitor |
skill-bill goal status <KEY> from the CLI |
Telemetry and stored workflow rows still use some retired names, such as bill-code-check as the quality-check routed_skill, so existing dashboards and in-flight workflows keep working.
Platform packs live under platform-packs/<slug>/. Their manifests declare routing signals, review areas, native workers, add-ons, and quality commands. Discovery and routing use those declarations, so teams can add or replace packs without editing a hard-coded platform list.
| Pack | Scope |
|---|---|
generic |
Review fallback for unsupported, documentation-only, and unresolved paths; supplies the code-quality lane only when no routed pack owns one |
go |
Go modules and workspaces, services, libraries, and CLIs |
ios |
Native iOS, Swift, SwiftUI/UIKit, and Xcode/SPM projects |
kotlin |
Kotlin/JVM and the baseline review layer for KMP |
kmp |
Android and Kotlin Multiplatform, composed with the Kotlin baseline |
php |
PHP applications, services, and Composer projects |
python |
Python applications, libraries, services, and CLIs |
rust |
Rust crates and Cargo workspaces |
typescript |
TypeScript and TSX applications, libraries, and services |
The ten failure-review areas are architecture, performance, platform-correctness, security, testing, api-contracts, persistence, reliability, ui, and ux-accessibility. Every shipped pack also owns a required code-quality lane; KMP's local lane takes precedence over Kotlin's baseline lane. Legacy packs can use generic code-quality as a fallback when installed. If neither owner is available, review keeps its compatibility behavior and records the omission. These specialists install as unlisted sidecars and native-agent inputs, while /skill-bill remains the only listed skill. KMP declares seven failure areas of its own and takes performance, testing, and api-contracts from Kotlin. KMP has its own quality gate with no Kotlin fallback. The other shipped packs each declare all ten failure areas.
Concrete path ownership takes precedence over the generic review fallback. Content signals break ties between equal positive path matches. The fallback owner is manifest-declared and replaceable; declaring more than one fails validation.
Pack review skills install as internal sidecars of /skill-bill. Run /skill-bill phase:review; the stack-specific skills are not separate user commands. Pack validation checks specialist substance as well as manifest shape. See the source-generation guide and review substance standard for authoring requirements.
The installer supports Claude Code, Codex, Cursor, and JetBrains Junie. It generates each provider's skill and native-agent files from shared sources and registers the local MCP server. Runtime review launch support depends on the provider's isolation capabilities. Claude, Codex, and Cursor have governed review launch adapters; Junie's adapter currently rejects governed review launches that require tool and MCP isolation.
Two separately packaged IDE integrations show repository work status, planning progress, the active phase, and elapsed time:
- IntelliJ plugin, distributed as a plugin ZIP under
plugin-v*releases. - VS Code extension, distributed as a VSIX under
extension-v*releases.
Both offer stop and pause-after-subtask controls. Launch and resume stay in the CLI or agent session. Install the plugins from their release artifacts; they are separate from the Skill Bill runtime installer. Their READMEs include compatibility requirements and source build instructions.
Use execution_matrix to choose the model and effort for feature-task phases, including goal children. Add it to your machine-wide ~/.config/skill-bill/config.json, or the file selected by SKILL_BILL_CONFIG_PATH. Merge it into the existing JSON object so your telemetry and other settings remain intact. These preferences apply across repositories; .skill-bill/config.yaml does not own them.
The matrix selects a model for the agent already assigned to a phase. It does not switch agents. You can configure several agents in one file and keep only the entries you use.
Each example below is a complete JSON object for one agent. To configure several agents, combine their entries under the same execution_matrix.agents object. Model availability depends on your provider and account; use model IDs accepted by your installed CLI.
The claude entry accepts model aliases or full model IDs. The runtime forwards effort through Claude's --effort option.
{
"execution_matrix": {
"agents": {
"claude": {
"reasoning": { "model": "opus", "effort": "high" },
"implementation": { "model": "sonnet", "effort": "medium" }
}
}
}
}When using a custom ANTHROPIC_BASE_URL, the adapter lets ANTHROPIC_MODEL override a Claude model name or alias when that environment variable is set.
The codex entry uses a model ID and optional reasoning effort. The runtime passes these through --model and --config model_reasoning_effort=....
{
"execution_matrix": {
"agents": {
"codex": {
"reasoning": { "model": "gpt-6-astra", "effort": "high" },
"implementation": { "model": "gpt-5.6-sol", "effort": "medium" }
}
}
}
}The cursor entry uses model IDs from agent --list-models. This example selects a reasoning model with effort encoded in its ID and Composer for implementation.
{
"execution_matrix": {
"agents": {
"cursor": {
"reasoning": { "model": "claude-opus-5-thinking-high" },
"implementation": { "model": "composer-2.5" }
}
}
}
}For Cursor, a separate effort field becomes a model parameter, such as model[effort=high]. If the model already contains an [effort=...] parameter, the values must agree. For parameterized models with other options, put the complete model string in model and omit effort.
Junie's runtime adapter does not support model or effort overrides. Omit junie from execution_matrix.agents. Assigning a directive to a Junie phase fails before launch.
Default phase tiers, per-phase overrides, and precedence
The default tier assignments are:
| Tier | Phases |
|---|---|
reasoning |
plan, review, verify_findings, audit, validate |
implementation |
preplan, implement, simplify, implement_fix, build, write_history, commit_push, pr |
These are model defaults for agent launches. They do not make runtime-owned operations, such as goal-subtask commit and push, launch an agent.
Use phase_tiers to move a phase to another tier for all configured agents. To override one phase for one agent, put the phase ID beside that agent's tier entries. For example, this moves preplan to the reasoning tier and gives Codex review its own effort setting:
{
"execution_matrix": {
"phase_tiers": {
"preplan": "reasoning"
},
"agents": {
"codex": {
"reasoning": { "model": "gpt-6-astra", "effort": "high" },
"implementation": { "model": "gpt-5.6-sol", "effort": "medium" },
"review": { "model": "gpt-6-astra", "effort": "xhigh" }
}
}
}
}Resolution order is an explicit feature-task --phase-model phase=model@effort assignment, then the agent's phase entry, then its tier entry. With no matching directive, Skill Bill leaves model selection to the provider's launch defaults. The --phase-model option belongs to the lower-level skill-bill feature-task commands that goal children run on, not skill-bill goal or /skill-bill.
Every directive requires a non-blank model. Omit effort to leave it unspecified; an empty string or null is invalid. Unknown fields, agent IDs, phase IDs, and tier names fail with the offending config path. The runtime validates this structure; the provider validates model availability and supported effort values.
Put repository-wide instructions in AGENTS.md and skill-specific guidance in .agents/skill-overrides.md. The override example shows the section format. Boundary history and decisions live beside the code in area-owned agent/history.md and agent/decisions.md files.
Platform-pack add-ons supply stack-specific guidance after routing. External add-on sources let teams keep private guidance outside the shared repository.
Agent add-ons are separate, explicitly selected extensions. The shipped execution-budget add-on applies to Codex feature work and reinforces the user's stopping boundary, compact handoffs, and delegation constraints:
/skill-bill APP-123 agent-addon:execution-budget
Its source is agent-addons/<slug>/agent-addon.yaml plus content.md. See agent add-on authoring for compatibility, precedence, staging, and resume behavior.
To author skills or packs, start with skill-bill new, then use show, fill, edit, validate, and render. Authored skill content lives in content.md. The installer generates SKILL.md, support pointers, and provider-specific native-agent files into staging; those generated files do not belong in source. Re-run ./install.sh after changing skill sources, rendering, or support pointer generation.
See Contributing, source generation, and the scaffold payload contract before changing these contracts. The runtime, IntelliJ plugin, and VS Code extension have separate builds.
The default telemetry level is anonymous. The installer lets you choose anonymous, full, or off. Events go to the configured telemetry proxy, using the shipped relay by default. You can self-host the proxy.
To disable transmission:
skill-bill telemetry disableSome diagnostic events still queue locally while telemetry is off. Telemetry Privacy documents the fields, destinations, correlation identifiers, retention, and what happens if you enable telemetry later. Workflow state remains local and supports continuation independently of telemetry transmission.
- Getting Started: installation, CLI commands, MCP tools, and recovery.
- Getting Started for Teams: rollout and project customization.
- Runtime Command Guidance: full-run, phase, and operation behavior, plus goal commit rules.
- Capability Deep-dive: workflows, packs, memory, and governance.
- Token Economy: bounded context and durable handoffs for long goals.
- Review Telemetry: review measurements, learnings, and local statistics.
- Runtime Architecture: module ownership, persistence, and contract enforcement.
- Observability Policy: required records for failures and degraded behavior.
- Teams Roadmap: proposed hosted team controls and open product questions.
Skill Bill is licensed under the MIT License. See the licensing summary for details.
