What you can publish
The seven kinds of thing that go on the shelf, what happens after you press Publish, how a price works, and one listing read end to end. The form itself is on Publish.
The seven kinds
Seven kinds of thing, and they all start the same way — a public repository on GitHub with one small file in it. Where these say agent, that means the assistant somebody runs inside Terminal Deck: Claude Code, Codex CLI or Gemini CLI.
Skill
A folder of written instructions an agent opens when a job calls for them.
Installs as a folder, under the skills folder of each agent the person picks.
"kind": "skill"
Instructions
One file of standing rules an agent reads every time — the house style, the things never to touch.
Installs as one markdown file, added to what their agent already reads.
"kind": "instructions"
Hooks
A script that runs at set moments in a session — before a tool runs, when a session ends.
Installs a script in Terminal Deck’s own folder, and an entry in their agent’s hooks.
"kind": "hooks"
MCP server
A small program that hands an agent new tools — a database, a calendar, a search engine. MCP is the usual way an agent picks up tools it did not ship with.
Puts nothing on disk. It adds a line to their agent’s list of MCP servers.
"kind": "mcp"
Browser extension
An add-on for the browser built into Terminal Deck.
Installs as a folder in Terminal Deck’s browser extensions.
"kind": "extension"
Routine
A saved job. Somebody starts it by hand, or leaves it running on a schedule.
Installs as one markdown routine, switched off until they start it.
"kind": "routine"
Open-source tool
A program people install themselves. The store lists it and links to it, and puts nothing on anybody’s machine.
Installs nothing from here.
"kind": "tool"
Installing from the store is not in the app people can download today — that arrives in the next release of Terminal Deck. Publishing works now, and what you get now is a public page: the facts, the licence, what it needs, and the exact commit it was read from.
How it goes live
- Put one small file in your repository. terminaldeck.json says what your thing is, who made it, what it needs and what it costs. Fill in a form and it writes the file for you.
- Paste the address of the repository here. Public repositories on GitHub, for now — GitHub is the only place a repository can be checked as yours.
- We read it. We pin the exact commit, read your file, and work out from the actual files whether it runs anything on the machine it lands on.
- You see exactly what would be listed. Every field, the address it would get, and the words an assistant would be handed. Nothing has been submitted at this point — check it as often as you like.
- You press Publish, and it joins the queue. The page tells you how many are waiting ahead of you.
- A person reads it, and then it appears. Somebody at Terminal Deck reads the files and the manifest, then approves it, or refuses it with a reason you will see on your account page. Nothing lists itself.
After that first read, updates that do not change the risky parts publish themselves. Every version stays pinned to a commit and a checksum, so what a person reviewed is exactly what anybody installs.
Free or paid — no money passes through this site
Any of the seven can be free or paid. What it costs is your business, and the money never comes near this site: a paid listing carries your own price and one button that goes to your own page. There is no checkout here, no licence key and no payout. It works like a card in a shop window.
- Free — nothing to pay, to anybody. "model": "free"
- Free, but you need an account somewhere — your thing costs nothing and talks to a service people have to sign up for. "model": "account"
- You pay somebody per use — it runs against a service that charges per request. "model": "metered"
- You pay for it — your price, on your own page. "model": "paid"
Anything that is not free has to say the money reality in one sentence, and that sentence is shown before the button. A listing that hides a cost is refused when a person reads it.
"pricing": {
"model": "paid",
"note": "USD 19 once, bought on our own site.",
"url": "https://example.com/buy"
}
The amount and the currency are typed on this page when you publish, because the file carries the sentence and the link and not a number. Both are shown back to you before anything is submitted, as your own claim.
What a good listing looks like
This one is on the shelf now. Nothing about it is clever — a short id, one sentence anybody can read, a real licence, the agents it was actually tested with, and an honest list of what it needs.
Systematic debugging
Find the root cause before proposing a fix, in an order the agent has to finish.
terminaldeck.dev/@obra/systematic-debugging
- What it is
- Skill
- Licence
- MIT
- Works with
- Claude Code, Codex CLI, Gemini CLI
- Runs on
- macOS, Windows, Linux
- Cost
- Free
- Needs
- Runs scripts on this machine
Ships scripts the agent may run — worked out from the files, not from what the file claims
A terminaldeck.json that produces exactly that listing:
{
"terminaldeck": 1,
"publisher": "obra",
"id": "systematic-debugging",
"kind": "skill",
"name": "Systematic debugging",
"summary": "Find the root cause before proposing a fix, in an order the agent has to finish.",
"version": "1.0.0",
"licence": "MIT",
"category": "code",
"tags": ["debugging", "root-cause", "test-failure", "process"],
"agents": ["claude", "codex", "gemini"],
"platforms": ["darwin", "win32", "linux"],
"delivery": "repo",
"pricing": { "model": "free", "note": null, "url": null },
"links": { "repo": "https://github.com/obra/superpowers", "home": null, "docs": null },
"needs": ["runs-scripts"],
"install": { "dir": "." }
}
The summary is capped at 120 characters on purpose: it is the line people read on the shelf, and it is the only sentence most of them read at all.