superstack-plugin

agent
Guvenlik Denetimi
Basarisiz
Health Uyari
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 9 GitHub stars
Code Basarisiz
  • rm -rf — Recursive force deletion command in plugins/superstack/data/destructive-commands.json
Permissions Gecti
  • Permissions — No dangerous permissions requested

Bu listing icin henuz AI raporu yok.

SUMMARY

Claude Code plugin: the agent proves its work with exit codes, not sentences. 9 gates — 1969 tests · 561 mutations · 319 mechanisms

README.md

🇬🇧 English · 🇷🇺 Русский

SUPERSTACK

Say what you want built. Get a version whose "done" was closed by an exit code, not by a sentence in the chat.

version
tests
mutations
python
dependencies
license
Claude Code plugin

1969 tests · 561 mutations, all caught · 319 mechanisms.

What this is

SUPERSTACK is a plugin for Claude Code. You describe a product in your own
words — "I want a site where people book a haircut" — and it carries the job
all the way to a version that was actually checked. The rule the whole thing is
built around is short: a report is a claim, not a proof. "Should work" and
"tests should pass" mean the work is not done.

Here is what that looks like for the haircut site. It writes your sentence down
verbatim, then asks only the handful of questions you alone can answer — who
books, what happens on a double booking, what the client sees afterwards — and
measures everything else itself. It turns the answers into a requirements list
and a spec, designs the interface on a canvas and pulls the real values into the
code instead of retelling them, and shows you a plan. You approve the plan
before a single line of code exists.
Then the tasks go out to a builder agent,
one fresh context per task, and the result is put in front of commands whose
exit code decides whether the turn may close.

Before it says "done", a separate agent reads only your original sentence and
the diff — no spec, no plan, no conversation — and answers one question: is this
what was asked for? What you get at the end is a report with a How to open it
section. An address, not a status.

It also knows how to look at your Claude Code setup, explain where every finding
came from, and change nothing without asking.

Why

An exit code closes the turn, not a sentence. The end-of-session check in
hooks/verify-gate.py runs the project's own commands; while they return
non-zero the turn stays open, and no wording in the chat can close it.

Blind acceptance before the word "done". A separate agent
(agents/blind-acceptance.md) is handed your original request and the diff and
nothing else, so it grades what was asked for instead of agreeing with the plan
it just read.

Snapshots at every stage boundary, so "put it back" is one sentence.
tools/checkpoint.py snapshots the product folder before and after every edit;
/oops shows you what would come back before it returns anything. Nothing in
this system is deleted — removals go to quarantine, and a backup is written
before the first change.

Plain language enforced by code, not by good intentions. Jargon is
impossible to proofread out of your own writing — to notice an opaque word you
have to stop understanding it. The product talks to you in Russian, and
tools/plain_ru.py keeps that word list as data, finds the jargon by machine,
and answers with an exit code.

No dependencies at all. Python 3 and the standard library — 72 tools, about
24,800 lines, zero third-party packages, nothing to install, nothing to audit
downstream.

The plugin holds itself to the bar it sells. Nine gates, and the harshest is
mutation: 561 registered mutations break the code on purpose, and every one
of them must turn the suite red. A check that cannot fail is not a check.

Quick start

Without opening a terminal

The plugin only works in Claude Code. Paste this text to your Claude Code and it
will do the rest itself:

Install SUPERSTACK for me. Run exactly these three commands in the terminal, one
at a time, and do not stop if the first one comes back red:

CLAUDECODE= claude plugin marketplace add edvardgrishin27/superstack-plugin
CLAUDECODE= claude plugin marketplace update superstack
CLAUDECODE= claude plugin install superstack@superstack

On a machine where SUPERSTACK was installed before, the first command answers
"Marketplace 'superstack' is already installed" and exits with code 1. That is
NOT a failed install and not a reason to stop: the marketplace is simply already
there. Keep going.

The second command is the one this whole text was rewritten for. Without it, such
a machine takes the OLD package list from its cache and installs the previous
version. It looks successful: green command, plugin installed, wrong version. On
a clean machine it is harmless, which is why it always runs.

The CLAUDECODE= prefix is required: without it `claude` refuses to start from
inside a session ("cannot be launched inside another Claude Code session"), and
that is not a bug — it is the guard against nested sessions.

Install nothing else. When you are finished, say in one line that it is done, and
tell the person to restart the whole application — not a new chat in the same
window: quit it completely (Cmd+Q on a Mac) and open it again. Plugins are read
at startup.

Verified by running it, not reasoned about: both sequences were executed against
an isolated config (CLAUDE_CONFIG_DIR), on a clean machine and again on top of
an existing install. Both ended on a working version.

From a terminal

claude plugin marketplace add edvardgrishin27/superstack-plugin
claude plugin marketplace update superstack
claude plugin install superstack@superstack

No prefix needed here — you are already outside a session. On a machine that
already has the marketplace, the first line exits with code 1; that is fine, the
second line fixes it.

Then quit Claude Code completely (Cmd+Q on a Mac) and open it again. After that
you can just talk to it — there are no magic words to memorise.

Commands

Seven commands. You never have to type them: each one also answers to ordinary
language, which is what the middle column is for.

Command Say it like this What you get What it does not do
/go "I want a site for booking haircuts", "build me a bot that…" A new product, or a large new part of one, from your sentence to a proved version: requirements list → spec → design on a canvas → a plan you approve → tasks built by agents → verification by exit code → a security pass → blind acceptance → project memory → a report with "How to open it" Writes no code before you approve the plan; never calls the work done while the check returns non-zero; never drops a requirement on its own
/change "fix the button", "change that text", "add a field" One small edit to something that already works: snapshot before, the edit written by the builder agent, verification, snapshot after — so "changed the colour" and "broke the order form" cannot look alike in the chat Not for building something large — that is /go; does not edit product files by hand, and does not fix unrelated things along the way
/what "where was I", "what's next" Exactly one line of state and exactly one next step, read from the tools rather than from the conversation Not a menu, not a report; will not lift a pause on your behalf
/stop "stop", "turn superstack off" — and back: "switch it on" Everything pauses on your word alone, with no terminal, and the same way it comes back. The brake holds even when the agent stops responding, because it is a file on disk Does not argue, does not talk you out of it, does not pause on its own initiative
/oops "undo that", "put it back the way it was" Two different things it never mixes up: the Claude Code settings this system changed, and your project folder returned to a snapshot from the build. It shows what will come back and rolls back only after you say yes Does not return anything the system never touched; does not restore a secret — a backup keeps the file, never the password value
/fix "not working", "nothing happens", "error again" The links of the system itself, checked in order and stopping at the first broken one: is Python there, are the plugin files in place, does an automatic check point at a file that is gone, is everything paused, can the system write to its own folder. You get one broken link and one action Does not look at your product and does not fix it — this is about the system, not about what you built. No menus, no stack traces
/superstack "check my setup", "what do I have installed", "why is the agent behaving like this" A profile of this machine and a repair pass: probes read configs, count skills and automatic checks, look at memory and connectors; the verdict opens as a page where every finding carries its origin — measured · inferred · ambiguous Deletes nothing (quarantine instead, backup before the first change); applies no blocking finding without an explicit yes; prints no number a probe did not return

How it works

/go runs in phases, and the code is written in the second-to-last one. Every
phase before it establishes what to build; every phase after it proves that
this is what got built.

flowchart TD
    A["Your sentence:<br/>“I want a booking site”"] --> B["0 · Open<br/>brief recorded verbatim, progress panel opens"]
    B --> C["1 · Understand<br/>G1 — not one requirement left open"]
    C --> D["2 · Spec<br/>G2 — reviewed by other eyes, folder set up from the spec"]
    D --> E["2.5 · Direction<br/>design on a canvas — only if the product has an interface"]
    E --> F["3 · Plan<br/>G3 — traces to requirements both ways<br/><b>you approve; no code before this</b>"]
    F --> G["4 · Work<br/>one task per builder agent, in a fresh context"]
    G --> H["5 · Verification<br/>verify.py ≠ 0 keeps the turn open"]
    H --> I["5.4 · Security<br/>only if the product faces real people"]
    I --> J["5.5 · Look at it<br/>open the page before showing it to anyone"]
    J --> K["6 · Blind acceptance<br/>G4 — request and diff only, nothing else"]
    K --> L["7 · What survives<br/>project memory, decisions, document links"]
    L --> M["8 · Report<br/>assembled from files, with “How to open it”"]

Skipping a phase is allowed; skipping it silently is not. When the design phase
or the security phase does not apply, it says so in one line — because "we
decided it wasn't needed" and "we forgot" look identical otherwise.

Under the hood

Python 3 and the standard library. Nothing else. 72 tools (about 24,800 lines),
7 skills, 3 agents, and three automatic checks wired into the session: one at
start-up, one before the context is compacted, one at the end of a turn.

The mechanisms worth naming, each of them a file you can open:

Mechanism Where it lives What it buys
Verification closes the turn hooks/verify-gate.py, tools/verify.py "Done" is an exit code of zero; anything else keeps the turn open
Blind acceptance agents/blind-acceptance.md, tools/blind_accept.py Judgement made from the original request and the diff, with no plan to agree with
Snapshots and rollback tools/checkpoint.py, tools/oops.py Every stage boundary is a restore point; "put it back" is one sentence
Plain-language check tools/plain_ru.py Jargon in text meant for a human is found by code, not by proofreading
Live progress panel tools/live_panel.py, tools/progress.py A page on localhost:8787 with an honest "how much is left"
Hand-off notice tools/notify.py You are told when the turn came back to you, instead of watching a chat
Builder wave watchdog tools/watchdog.py, tools/stall.py A stalled agent is noticed by the system rather than by you
Design pulled, not retold tools/design_pull.py Canvas values land in the code as values; contrast below 4.5:1 is refused
Security pass tools/security_pack.py, tools/data_rollback.py For products that face people; a data rollback path is named in commands or it does not count as ready
Builder contracts tools/contract.py "DONE" reported over a red suite is caught by code, not by reading
The pause file tools/pause.py, ~/.claude/superstack/PAUSE An emergency brake that holds even when the agent will not answer
Nothing is deleted tools/apply.py, quarantine + backups Every change is reversible, and secrets are never copied — not even into a backup

The bar the plugin holds itself to

Nine gates, run by tools/gauntlet.py. Numbers below are measured, not typed in.

Gate What it proves
suite the whole test suite green
hermetic the same suite, still green, under any HOME
mutations every registered breakage must turn the suite red
wiring every tool reachable from a skill or an automatic check — built but unreachable is a real failure mode here
rules the rule files are intact
manifest marketplace entries match the tree, versions agree, schemas valid
plan every mechanism in the map is present, and most of them are proved by an actual breakage
reconciliation the map was read against the plan, and the plan has not changed since
skill weight every skill stays under the size ceiling

The counts at the top of this page — badges and summary line — are rewritten by
measurement at release time (tools/sync_public.py), in both language versions.
A showcase for a product that promises never to claim the unmeasured does not
get to type its own figures.

Requirements and platforms

  • Claude Code, desktop app or terminal. The plugin runs nowhere else —
    claude plugin … exists only here.
  • Python 3.8 or newer, whatever the system already has. The floor comes from
    the syntax in the code: assignment expressions (:=) are used, nothing newer
    is. No third-party packages, at any version.
  • pytest, only if you want to run the test suite.
  • macOS and Linux — run live, end to end.
  • Windows — the code paths are there (file locking falls back to msvcrt
    where fcntl is absent; the process-alive probe knows os.kill behaves
    differently), but no live run has ever been done. That is a status, not a
    disclaimer: tools/platform_check.py says it out loud at the start of a
    session and names what stops working — self-launch where the interpreter is
    not called python3, non-ASCII output in the Windows console, and the
    one-line .sh wrappers next to the tools.

Status

Version 0.10.0. All nine gates green on the tree this text ships from.

Known not done, and said here rather than discovered later:

  • No live run with a newcomer who has never installed it. Everything about the
    first-time experience is reasoning, not observation.
  • Windows has never been run live. See above.

Contributing

The rule for anything new is fixed, and it runs in this order:

mechanism → map → test → mutation → code.

A mechanism is finished when it exists in data/plan-coverage.json with an
evidence file and a literal substring of executable text, has a test in tests/,
and has a registered breakage in tests/mutations.json that actually turns the
suite red. A mechanism nothing can break is not a mechanism.

python3 -m pytest tests/ -q          # the suite
python3 tools/gauntlet.py --quick    # fast loop: skips mutations and hermetic
python3 tools/gauntlet.py            # everything, roughly two hours

--quick exits with code 2 by design — two gates are not run in it, and
"skipped" is deliberately not "passed".

License

MIT — see LICENSE.

If you installed before version 0.3.0

Up to version 0.3.0 the system shipped as seven packages (superstack-core,
-install, -spec, -guard, -build, -brain, -control). There is one
package now, and the old seven have to be removed — otherwise two copies of the
same skills sit side by side and either of them can be picked up by description.

In the desktop app: settings → plugins, remove each of the seven old ones,
then update the superstack marketplace and install superstack. The order
matters twice. While the old ones are still there, two copies of the same skills
sit side by side. And without updating the marketplace, the old cached list is
used — the one with seven packages — and the previous version gets installed,
looking no different from the new one.

Why the split is gone. Seven packages would have made sense if they were
installed and updated separately. Neither ever happened once: the whole set went
in together and was updated together, seven identical actions in a row. The price
was cross-package addressing — a skill in one package calling a tool in another
through a path that does not exist inside its own package. That is how 14 tools
out of 29 once became unreachable, and how both calls in the only build skill
pointed at nothing for several runs. One package removes that whole class of
failure instead of patching it with another check.

The /plugin slash command will not help. It exists only in terminal Claude
Code; the desktop app does not have it, and trying it there answers "isn't
available in this environment". Verified on the desktop, not inferred.

Yorumlar (0)

Sonuc bulunamadi