thirteen agents · one repo · zero stand ups

A multi-agent harness generator. Write one SOUL.md persona once — compile it into the native agent or rule format for Claude Code, OpenCode, Cursor, and Antigravity.

Dark Magic Studios · MIT license · npm i -g @darkmagicstudios/hocus

Claude Code, OpenCode, Cursor, and Antigravity don't share a config format — but they've converged more than you'd expect. Each tool stores personas in a different path with different frontmatter keys. Maintaining the same agent across all four means rewriting the same instructions four times.

Skills don't need this translation layer — SKILL.md is already a shared open standard. Personas do. Hocus is the compiler for personas.

Claude Code
.claude/agents/<slug>.md

Markdown + YAML frontmatter, invoked via the Task tool or @mention.

OpenCode
.opencode/agent/<slug>.md

Same shape, different frontmatter keys (mode: subagent).

Cursor
.cursor/rules/<slug>.mdc

Compiled as an "Agent Requested" rule — conditionally loaded by description.

Antigravity
.agents/rules/<slug>.md

Advisory context for the orchestrator — not a callable agent.

Every persona is a single SOUL.md file — YAML frontmatter for metadata, markdown body for instructions. Validated against a schema before compilation. A malformed persona is rejected with the specific field that's wrong, not a cryptic compiler error three layers deep.

Rename or replace any persona — the harness doesn't care what an agent is called, only that it has a role, a voice, and a body of instructions. Toggle alternate casts on the dashboard with ?cast=valley or ?cast=occult.

SOUL.md
---
character: gilfoyle
display_name: Zoroaster
role: reviewer
voice: cold, precise, contemptuous of inefficiency
glyph: "(o)"
triggers:
  - code review
  - pull request
tools: [read, grep, bash]
---

# Zoroaster — Reviewer

The body is the persona's actual instructions — responsibilities,
boundaries, voice. This is what gets compiled into each target's
native format.

Four commands cover the full lifecycle. Initialize once, compile when the repo changes, add skills as needed, sync the dashboard often.

hocus init

Initialize

Run once in your repo. Writes AGENTS.md, CLAUDE.md, PRODUCT.md, copies the persona cast into .hocus/personas/, installs bundled skills, and spawns an interactive session with the founder persona.

hocus cast

Compile

Scans the repo for language and framework signals, tailors each persona with that context, and compiles for every detected tool — Claude Code, OpenCode, Cursor, and Antigravity.

hocus skill add

Extend

Installs a skill into .claude/skills/ and .agents/skills/. Skills use the shared SKILL.md standard — one file, all four tools.

hocus sync

Refresh

Cheap refresh of dashboard.html from .hocus/personas/ and _spells/. Run often; run cast when the repo itself has changed.

The bundled cast borrows wizard names from history and myth — Merlin plans, Roger Bacon orchestrates, Flamel implements, Zoroaster reviews. Each persona keeps aliases for the original Silicon Valley cast and an earlier occultist recast. Click a card to expand voice, triggers, and aliases.

Terminal
npm i -g @darkmagicstudios/hocus
# or: pnpm i -g @darkmagicstudios/hocus

hocus init --name my-project
hocus cast
hocus sync

MIT license · Dark Magic Studios · github.com/dark-magic-studios/hocus