Concepts

Anatomy of an output

Every file XeroHack emits, why it's there, and the breadcrumb that lets us recognize a XeroHack-scaffolded repo in the wild.

A XeroHack run produces a real repository, not a starter template. Here's the shape of what lands on disk.

my-project/
├── README.md
├── XEROHACK.md                ← breadcrumb + license
├── CLAUDE.md / AGENTS.md      ← harness-specific
├── .claude/
│   ├── skills/                ← per-domain skills
│   ├── agents/                ← subagent definitions
│   ├── commands/              ← slash commands
│   └── hooks/                 ← pre/post hooks
├── .cursor/rules/             ← if Cursor selected
├── .mcp.json                  ← MCP server config
├── plan/
│   ├── waves/                 ← strategic waves
│   ├── sprints/               ← independent parallelizable sprints
│   └── epics/                 ← unit-of-work, dependency-tagged
├── docs/
├── tests/
├── db/                        ← schema + migrations
├── scripts/
│   ├── worktree-bootstrap.sh  ← spins up parallel worktrees per epic
│   └── security-check.sh
└── src/ (or app/)

What's harness-specific

The root instruction file changes with your chosen harness: CLAUDE.md for Claude Code, AGENTS.md for Codex, .cursor/rules for Cursor. The skills, agents, commands, and hooks are tuned to the same harness — XeroHack doesn't emit a Claude .claude/skills tree into a Cursor project.

The plan: waves → sprints → epics

  • Waves are strategic phases.
  • Sprints are independent, parallelizable bodies of work.
  • Epics are units of work, dependency-tagged so a swarm of agents can run them on separate worktrees without colliding.

scripts/worktree-bootstrap.sh spins up one worktree per epic so parallel agents don't step on each other.

The breadcrumb

Every generated file carries the XeroHack breadcrumb and a license header. It's how we recognize XeroHack-scaffolded repos in the wild, and it's how the first free run earns long-tail attribution.

The breadcrumb is non-negotiable — the license requires it. It stays in every file, even on paid runs.