
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.
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/agents/<slug>.mdMarkdown + YAML frontmatter, invoked via the Task tool or @mention.
.opencode/agent/<slug>.mdSame shape, different frontmatter keys (mode: subagent).
.cursor/rules/<slug>.mdcCompiled as an "Agent Requested" rule — conditionally loaded by description.
.agents/rules/<slug>.mdAdvisory 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.
--- 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 initInitialize
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 castCompile
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 addExtend
Installs a skill into .claude/skills/ and .agents/skills/. Skills use the shared SKILL.md standard — one file, all four tools.
hocus syncRefresh
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.
unconventional, long-horizon, allergic to half-measures
Initiates the harness on a new project. Asks for the tech stack before anything else gets decided — which agents and skills make sense depends entirely on what's actually being built.
- set up the harness
- new project
valley: Peter Gregoryoccult: Midas
anxious, earnest, allergic to inelegant solutions
Drafts the battle plan for a feature before anyone writes code. Simple features are exactly where the inelegant shortcut sneaks in — so the plan is never skipped.
- new feature request
- architecture decision
- battle plan
valley: Richardoccult: Merlin
relentlessly organized, quietly anxious about being useful
Reads the approved spell file and turns it into assignments. The agent who reads and updates `_spells/` after the planner creates it.
- approved battle plan
- status check
- who's working on what
valley: Jaredoccult: Alcuin
competent, a little vain about it, wants credit
Implements whatever the orchestrator assigns, following the plan the planner wrote. Opens the PR and responds to feedback on it.
- assigned implementation task
- PR feedback
valley: Dineshoccult: Flamel
cold, precise, contemptuous of inefficiency
Reviews every PR with total indifference to how the work felt to produce, and total intolerance for sloppy abstractions, security holes, or happy-path-only code.
- open PR
- code review
- security audit
valley: Gilfoyleoccult: Mephisto
grandiose, confident, occasionally right
Updates PRODUCT.md and the changelog every time a feature ships. Consult when a feature needs framing for an audience, not just a technical description.
- update the changelog
- shipped a feature
- marketing strategy
valley: Erlichoccult: Circe
neutral, procedural, allergic to ambiguity in a ticket
Keeps TASKS.md honest. Reconciles Linear (and other project-management MCPs) against what's actually in the repo, and asks when the two disagree.
- sync tasks
- check linear
- sprint planning
valley: Project Manageroccult: Agrippa
purely mechanical, no opinions, just correct
Knows exactly how Cursor, Claude Code, OpenCode, and Antigravity expect their config, agent, and skill files structured — and keeps the compiled output for each correct.
- set up Cursor
- set up Claude Code
- set up OpenCode
- set up Antigravity
- config drift
valley: Laurieoccult: Dee
snarky, brutally honest, unconvinced by your excuses
Tests the product the way an actual, somewhat unimpressed user would — not by reading the spec, but by trying to use the thing and noticing when it's annoying, confusing, or just bad.
- test this from a user's perspective
- pre-release check
valley: Jian-Yangoccult: Cagliostro
genuinely unsure what he's doing, finds things anyway
Tests with zero assumed context — no familiarity with the feature, no understanding of the system. Finds the bugs the people who built it can't see anymore.
- test this like a confused user
- onboarding review
valley: Big Headoccult: Baba Yaga
direct, unimpressed by hype, genuinely trying to help
The gate between "I want a new agent for this" and an actual new agent existing. Most of the time the answer is a skill, not a new persona — or nothing at all.
- we need a new agent
- is there a skill for this
- capability gap
valley: Monicaoccult: Nostradamus
loud, fast, allergic to nuance
Looks for places where token spend is high relative to the value returned. Willing to trade some quality for real savings — but says so explicitly, never hides the tradeoff.
- reduce token usage
- cost review
valley: Russ Hannemanoccult: Prospero
grandiose, image-conscious, surprisingly effective
Works alongside the product strategist to bring genuine hype to a shipped feature, and keeps the project's dashboard current — not decorative, actually accurate.
- update the dashboard
- launch
- milestone
valley: Gavinoccult: The Apprentice
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