{
  "markdown": "# vibekit\n\nA guardrailed pipeline for coding agents. It turns a one-line intent into a design you approved, a plan you approved, code written by an agent that never saw the plan being written, and a verdict backed by output you can read. Dependency free: bare Node and whichever agent CLI you already use.\n\nThe problem it solves is not bad code. It is the claim of being done. vibekit puts a gate in front of every such claim and makes the evidence part of the answer.\n\n## How it works\n\nSix skills, each one a gate. Every stage hands to the next, and no stage can skip the one before it.\n\n```\n/vibekit:vibe \"add a dark mode toggle\"\n        │\n        ▼\n  brainstorm ──► plan ──► exec ──► verify ──► merge or PR\n   (design)    (tasks)  (agents)  (evidence)\n        ▲                   │         │\n        └───── debug ◄──────┴─────────┘\n              (a check failed)\n```\n\n- **`brainstorm`** asks questions one at a time, pushes back on your framing once, offers alternatives, and writes a spec with observable success criteria. No code before you approve it.\n- **`plan`** turns the approved spec into numbered tasks. Every task carries a `→ verify:` clause that is checkable before anything runs, and a plan may not state a value nobody has observed.\n- **`exec`** dispatches one fresh agent per task. The author of a plan reads past its own contradictions. A fresh context reads it literally and stops. Every plan defect this project has found was found by a dispatched agent.\n- **`verify`** runs the checks no single task could: the whole suite, the scope of the diff, every goal against its evidence. It returns `ready` or `not ready`, and unmeasured counts as not satisfied.\n- **`debug`** takes over on a failed check. It finds one falsifiable cause, sends a read-only agent to refute it, and stops after two refutations rather than guessing a third time. It never edits.\n- **`lazy`** and **`terse`** stay on once invoked. One governs how much you build, the other how much you say.\n\nTwo rules run through all of it. **Evidence or it did not happen**, because a check with no output to show is not a check. **You may not write a value you have not observed**, because a guess in a plan is a defect a later agent pays for.\n\n## Features\n\n<!-- vibekit:generated:skill-list -->\n| Skill | What it does | Gate |\n|---|---|---|\n| `brainstorm` | Use before any creative or implementation work: features, components, behavior changes. Hard gate, no code before an approved design. | hard |\n| `debug` | Use when a check fails: a red test, a broken build, a failed clause, or a bug you can point at. Finds a root cause and gets it refuted before anything is fixed. Diagnosis is the product. This skill never edits. | hard |\n| `exec` | Use when a plan is approved and implementation has not started: dispatches one fresh subagent per task, runs each task's verify clause, and routes failures back instead of repairing them. One task, one commit. | hard |\n| `lazy` | Use at the start of any coding work: writing, adding, refactoring, fixing, designing. The laziness ladder, stdlib and native features before new code, one line before fifty. Stays on after. | none |\n| `plain` | Use before writing any text, in chat or into a file. Thirteen rules that hold in every string you emit, including code comments, commit messages, PR bodies and docs. No em dash, no semicolon, no hard wrapping inside a paragraph, no curly quotes, no decorative emoji, no title case in headings, no bold label lists, no heading echo, no fragment runs, no padded triads, no rejected straw options, no unraised objections, no writing about the previous version. Stays on after. | none |\n| `plan` | Use when a spec is approved and implementation has not started: turns it into a task-by-task plan with exact paths and checkable verification. No code here. | hard |\n| `quick` | Use when the user types /vibekit:quick: writes the change immediately under lazy's ladder, no spec, no plan, no subagents. Reports what it skipped. | none |\n| `terse` | Use at the start of every session. Compress narration, never artifacts. Questions, evidence, specs, plans and warnings stay verbatim. Stays on after. | none |\n| `using-vibekit` | Use when starting any conversation: establishes the auto-trigger discipline so guardrail skills fire instead of being silently skipped. | none |\n| `verify` | Use before claiming a change is done, fixed or passing: checks the whole change against its spec, runs the checks no single task could, and returns ready or not ready. Evidence or it did not happen. | hard |\n| `vibe` | Run a short intent through the pipeline. Invoked as /vibekit:vibe. Hands off to brainstorm and does nothing else. | none |\n<!-- /vibekit:generated -->\n\nA `hard` gate refuses to proceed until its condition is met. `none` means the skill shapes behaviour without blocking anything.\n\nSkills are discovered by globbing `skills/*/SKILL.md`. There is no registry anywhere in the repo, which is what makes registration drift impossible rather than merely detectable. Every derived file, including the runtime manifests, the command files, the trigger tables and this table, is generated by `npm run generate` and verified by `npm run check`.\n\n## Install\n\nEach runtime installs separately. Installing for one does not affect any other.\n\n**Claude Code**\n\n```\n/plugin marketplace add rizukirr/vibekit\n/plugin install vibekit@vibekit-marketplace\n```\n\n**Codex**\n\n```\ncodex plugin marketplace add rizukirr/vibekit\ncodex plugin add vibekit@vibekit\n```\n\nVerify with `codex plugin list`.\n\n**opencode**\n\nAdd it to the `plugin` array in your `opencode.json`, global or project level:\n\n```json\n{\n  \"plugin\": [\"vibekit@git+https://github.com/rizukirr/vibekit.git\"]\n}\n```\n\nVerify with `opencode debug skill`.\n\n**Antigravity (`agy`)**\n\n```\nagy plugin install https://github.com/rizukirr/vibekit\n```\n\nVerify with `agy plugin list`. Re-run the install command to update.\n\nThe install reports `hooks: skipped (not found)`, which is expected. vibekit's hook is Claude Code's `SessionStart`, and Antigravity has no session-start event: its five events are `PreToolUse`, `PostToolUse`, `PreInvocation`, `PostInvocation` and `Stop`. The auto-trigger map reaches the model through `rules/AGENTS.md` instead, which Antigravity loads as always-on rules.\n\n**Pi**\n\n```\npi install git:github.com/rizukirr/vibekit\n```\n\n### What has actually been checked\n\n| Runtime | Emitter | Verified |\n|---|---|---|\n| Claude Code | `runtimes/claude-code.mjs` | SessionStart hook smoke-tested in CI on Linux and Windows |\n| Codex | `runtimes/codex.mjs` | installed and listed as enabled by `codex plugin list`, against codex-cli 0.147.0 |\n| opencode | `runtimes/opencode.mjs` | all skills listed by `opencode debug skill`, against opencode 1.18.16 |\n| Antigravity | `runtimes/antigravity.mjs` | installed with `agy plugin install`, a print-mode session confirmed the auto-trigger map was in context and reproduced a table row, and the CLI log showed no skill parse failures, against agy 1.1.20 |\n| Pi | `runtimes/pi.mjs` | not verified, tool not installed |\n\nThree runtimes were probed against the real CLI and one was not. That distinction is kept per row because unit tests assert what we decided to emit, which says nothing about whether a host accepts it. That gap hid four integration defects until they were probed.\n\n## Evals\n\nSkills are behaviour-shaping prompts, so the only way to know one works is to watch it fire in a real session.\n\n```\nnpm run eval                                       # candidate only, deterministic\nnpm run eval -- --baseline v2 --candidate HEAD     # A/B two refs\nnpm run eval -- --dry-run                          # print the plan and cost, spawn nothing\nnpm run eval -- --judge                            # also grade whether the skill was followed\n```\n\nVariants are git refs materialised as throwaway worktrees, so there is never a second `skills/` tree to drift. Sessions run in a disposable temp directory.\n\nRun A/B rather than candidate-only whenever a rate is the point. A candidate rate of 1.00 once looked like a new rule working. Its baseline arm was also 1.00, because the model already did it.\n\nThis costs real money and needs an authenticated `claude` CLI, so it is a manual gate, not part of the free CI (`check`, `test`, `check:hook`).\n\n## Development\n\n```\nnpm run generate    # regenerate every derived file\nnpm run check       # fail if any generated file is out of date\nnpm test            # unit tests\n```\n\nAdding a skill is creating one directory under `skills/` with a `SKILL.md`, then running `npm run generate`. Never hand-edit a generated file.\n\n## License\n\nMIT. Copyright (c) 2026 Rizki Rakasiwi. See [LICENSE](LICENSE).\n",
  "bytes": 8692,
  "sha": "509e4e0693dee60e4058719902a169a01041b6dad40c0c736effe2bb716ec4d1",
  "repo_slug": "rizukirr/vibekit",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_rizukirr_vibekit_88ae5057/readme"
}