Speccify

The agent-agnostic skill & tool manager

Share the contract, not the implementation.

Reuse what you learn as skills and tool contracts. Turn project experience into knowledge your next project can use. Plain files. Shared over Git. Your choice of agent.

Speccify in the macOS layout: six specs on the board, selected search tasks in the inspector and a project terminal below
The app, with demo data · Plan on the board. Review the tasks. Work in the terminal. View full size ↗

What’s new in 0.8.7: terminals that survive restarts, copying from the terminal, full-width dock →

The problem

  • · What you learned the hard way lives in one project. The next project starts from zero, and so does the agent.
  • · Ready-made scripts break on the next machine: a different Python, a different OS, a path that only existed on yours.
  • · Agent workflows drift — every project invents its own way to plan, slice work, and keep the human in the loop.

The idea

  • · Skills are plain SKILL.md files, shared over Git like Go modules — no account, no registry. speccify expand copies them into the project where every agent finds them.
  • · Tools ship as contracts, not scripts: TOOL.md defines inputs, outputs, effects, and examples. Your agent implements it for this machine — speccify tool check proves it works.
  • · One file-based workflow — specs with tasks, questions, history — that any agent can follow and the Speccify app makes visible. Modeled on OpenSpec and Kiro, built to fit into what you already use. Claude Code and Codex are equally at home.

What a tool contract looks like

From the notarization skill in this repository. The contract names inputs, outputs, effects — and its examples are the acceptance test for any implementation.

# TOOL.md — the contract an agent implements per project
name: verify-signatures
description: Verifies the code signature of a macOS .app bundle and of
  every executable inside Contents/MacOS — the sidecars notarization
  rejects without the build ever saying so.
inputs:
  type: object
  required: [bundle]
effects: [reads-filesystem]
# examples below are the acceptance test for any implementation

Worth capturing

The test is not how big a task is. It is: would I have had to figure this out again in the next project?

Platform rituals

Notarization, entitlements, store review

Payments & auth

Trials, subscriptions, OAuth flows

Team workflows

Specs, gates, review loops for agents

Client projects

Each with its own skill repo and sources

Expand it, implement it, verify it

$ speccify expand macos-notarize-tauri --library ~/work/skills
✓ .agent/skills/macos-notarize-tauri/SKILL.md
✓ .agent/tools/verify-signatures/TOOL.md   (contract, no implementation yet)

# agent implements .agent/tools/verify-signatures/macos.sh …

$ speccify tool check verify-signatures
✓ example 1  clean bundle          → ok: true
✓ example 2  unsigned sidecar      → ok: false, names the offender
verified  verify-signatures (macos)

How it works

1 · Expand

speccify expand copies a skill and its tool contracts into .agent/ — normalized, versioned, provenance recorded. Every agent reads the same files.

2 · Execute

Your agent implements each tool contract for this machine and this platform. No fragile shared scripts — the contract travels, the implementation is local.

3 · Evaluate

speccify tool check runs the contract's examples against the implementation. Status becomes verified only when the examples pass — never by hand.

4 · Work the spec

You write a spec and move it to Doing; the agent works its tasks one by one, asks when it must, and writes history you can audit.

Learn once. Bring it with you.

Your next project
shouldn't start from zero.

Browse a skill, see where it came from, and adapt it to your project. Keep the procedure reusable and the implementation local. Tool contracts make the checks explicit; your agent puts them to work.

Explore all features
Speccify Skills view: a Markdown export procedure, project-specific guidance, source version and its validate-note tool
Reusable knowledge, local context · App view with demo data View full size ↗