Benzene

Quick start

Pick the CLI. Pass the purpose.

One command hands Claude Code, OpenCode or Codex the Benzene skill and your purpose; the CLI researches the competition, writes the standard it sets, proves the guardrails on a small model and heals the first cells against them. Python 3.10 or newer; no database, no telemetry. State lives in a .benzene folder next to the code, and the manifests live with the project.

Pick the CLI, pass the purpose

The skill lands where that CLI reads skills (the Agent Skills format), and the CLI opens with one request: onboard Benzene here for this purpose.

$ pip install "benzene-agent @ git+https://github.com/grvpanchal/benezene-agent"
$ cd my-project
$ benzene plugin start --for claude "build me the best component library"
$ benzene plugin start --for opencode "..."      # or --for codex

# inside Claude Code, the same through the marketplace
/plugin marketplace add grvpanchal/benezene-agent
/plugin install benzene@benzene
/benzene:onboard build me the best component library

The CLI researches the competition

It installs what is missing, picks the models from the keys you have (OpenRouter with free models, Anthropic, OpenAI, or a local server), decides how many cells each office gets, finds six to ten competitors with a team behind them, and runs six research subagents in parallel, one per office: management, tech, funding and pitches, revenue, feedback and ecosystem, marketing. Every number comes from a page the subagent fetched, with the URL.

standards/cto.md   standards/coo.md   standards/cio.md   standards/cfo.md   standards/cxo.md   standards/cmo.md

The standard becomes the guardrails

The reports are merged into benzene-standards.yaml: per office the bars the competition sets (a statement, a target, the competitors' values, the sources, and a check a script can run), the channels it publishes through, and the audience threshold at which feedback starts to steer. The CLI writes benzene.yaml and benzene-org.yaml, creates the scaffold the bars name, and proves every check on the small model before the first run.

$ benzene standards benzene-standards.yaml            # "the standard is sound" or the problems to fix
$ benzene standards benzene-standards.yaml --prove    # ✓ passes clean, fails spoiled  ✗ work for the cells  ? a human judges
$ bza                                                 # the CTO heals against the gate and the bars
$ bza --standards                                     # phase: healing · 50/53 bars pass

The manifest lives. Your original stays as written, comments included. Benzene appends a cluster: block that records every cell it grew from it and what each differs in: a division, a repaired skill, a guardrail the scout proved. Never edit below that line.

The manifest lives. Your original stays as written, comments included. Benzene appends a cluster: block that records every cell it grew from it and what each differs in: a division, a repaired skill, a guardrail the scout proved. Never edit below that line.

Found the organisation

The CTO builds. The COO is founded when the CTO is healed. From then on Jev routes each instruction: to the COO for a plan across offices, or straight to the one office it is for, with a confidence; under 0.5 the COO plans. The other offices follow the record: a verified plan, a launch milestone, a metric.

$ bza                    # benzene-org.yaml, written by the setup with your purpose
$ bza -i "add a skill for server-side caching"   # routed by decider (1.00) to the CTO
$ bza --milestone launch --evaluate cxo
$ bza --status

Give it a host, then grant access one channel at a time

The CLI asks where the daemon runs and sets up benzene serve there. The organisation heals unattended and prepares its material: code, posts, the pitch, the pricing page. Nothing is published until an office's heal bars pass and the inbox asks you for that channel's credential, which goes on the daemon's host, never in a file. Items go out a few per beat under a monthly budget.

$ benzene serve . --beat-every 3600 --tunnel cloudflared
$ bza --inbox            # "access needed for bluesky: 3 item(s) ready to publish"
$ bza --outbox           # per channel: access, queued, held, published, the month's spend
$ bza --approve prop_f27dde47

Build the audience, then feedback steers

Until the audience threshold the research justified (weekly downloads, stars, survey responses) the CXO sits its beats out and metrics are held: the organisation heals against what the competition does. Past it, user feedback shapes the roadmap and the phase turns to evolving.

$ bza --metric weekly_downloads=2400
$ bza --status           # standard: evolving · weekly_downloads 2400 >= 2000: feedback steers

Watch it grow

$ bza --graph            # .benzene/graph.html, a vault graph of the colony
$ bza --loops            # the loop every office runs on its beat
$ benzene --root ../my-cli/.benzene/offices/cto journal --md
$ benzene --root ../my-cli/.benzene/offices/cto guardrails cell_eca5e4ae --scout --ask

Your own cell

A manifest is the genome: a system prompt, skills, models per role, a guardrail, and the thresholds of its life cycle.

name: docs-fixer
system: You keep the guides complete and true.
skills:
  - name: complete-guide
    triggers: [guide, section, missing]
    instructions: Add the missing sections with real content.
models:
  - {role: primary, provider: openrouter, id: nvidia/nemotron-3-super-120b-a12b:free}
  - {role: evolver, provider: openrouter, id: anthropic/claude-sonnet-5}
  - {role: decider, provider: openrouter, id: typesafe/jev-router}   # Jev: which cell takes an instruction
guardrail:
  verifiers:
    - {type: sections, files: ["docs/*.md"],
       required_sections: ["## Purpose", "## Steps", "## Checks"]}
  require_written_files: true
  pass_threshold: 0.70
homeostasis:
  divide_below: 0.66
  evolve_below: 0.80
  heal_max_attempts: 3

Offline first. --fake runs everything with a scripted model: 260 tests, real compilers in the loop, no key needed. Try the samples under samples/ before you spend a token.