Imported from marcoskichel/empire (
AGENTS.md). Install upstream withnpx skills add marcoskichel/empire. Copyright stays with the author.
AGENTS.md
This file provides guidance for AI agents working with code in this repository.
Repo nature
- Claude Code plugin marketplace. No build, no lint, no test harness.
- Single marketplace (
.claude-plugin/marketplace.json) exposes six plugins:empire(meta bundle),empire-git,empire-dev,empire-research,empire-product,empire-visual. Plusempire-rules(utility, auto-installed as a transitive dependency). - Plugin content = markdown SKILL files, dynamic-workflow
.jsscripts (inempire-researchandempire-dev), and bash scripts inempire-git. - Validation =
.github/workflows/validate.yml: pre-commit and manifest + SKILL.md spec checks; plus install-and-invoke in Claude Code.
Layout
.claude-plugin/marketplace.json— marketplace manifest. Eachplugins[]entry points to one of theplugins/empire-*dirs.plugins/empire-meta/.claude-plugin/plugin.json— meta plugin (name: "empire"). Empty skills dir. Usesdependenciesfield to auto-install the sub-plugins.plugins/empire-git/— git workflow skills (worktree-*,pr-description,pr-merge) + bashscripts/.plugins/empire-dev/— codeteam-reviewskill,address-reviewskill (driven byworkflows/address-review.js), pre-implementation engineering skills (shape,weigh,slice), plus 12 bundled dev subagents (code review, paradigms, domain experts).plugins/empire-research/—explore(open-ended),compare(closed), anddissect(claim investigation) research skills +workflows/*.jsorchestration scripts, withresearch-analystas bundled fallback subagent.plugins/empire-product/— product skills (pitch,vet,recon,mint,distill,probe), plus three bundled subagents (project-idea-validator,competitive-analyst,market-researcher).plugins/empire-visual/—visual-firstoutput style (inoutput-styles/) + on-demandvisualizeskill for terminal-native ASCII diagrams. No subagents.plugins/empire-*/skills/<skill-name>/SKILL.md— one dir per skill. Skill name in frontmatter MUST match dir name.plugins/empire-*/workflows/<name>.js— dynamic-workflow scripts a skill drives through whatever JS workflow runner the host exposes (Claude CodeWorkflow({scriptPath}), piworkflow({scriptPath})); a copy is bundled into the skill dir viaSCRIPT_BUNDLESso non-Claude hosts can resolve it. Plain JS run by the Claude Code workflow runtime; nopackage.json, no build. The runtime sometimes handsargsover as a JSON string, so every script MUST start its arg reads withconst input = typeof args === "string" ? JSON.parse(args) : args;and read fields offinput, never offargs(a rawargs.foothrows before any agent launches, giving a0/0 agentsrun). Scripts run in avmcontext with no imports, so this line is copied per file by necessity.plugins/empire-*/README.md— one per plugin. Plugin-specific docs (skills list, triggers, source links). RootREADME.mdis the project intro and links to these.docs/superpowers/{specs,plans}/— gitignored. Local-only design notes. Never commit.
Skill authoring rules
- Use
/skill-creatorif available - Frontmatter required:
name,description. Optional:model,allowed-tools,argument-hint,disable-model-invocation. descriptionMUST list trigger phrases verbatim — Claude auto-route uses them.- Reference bundled scripts via
${CLAUDE_PLUGIN_ROOT}/scripts/<file>.sh. Never hardcode repo paths. - Reference bundled workflows via
${CLAUDE_PLUGIN_ROOT}/workflows/<file>.jsfor Claude Code'sWorkflowtool, and via the skill-dir copy for other hosts' runners (pi'sworkflow). A skill that drives a workflow MUST document an inline-Agent fallback for hosts with no runner. - Users invoke skills as
/<plugin>:<skill-name>once installed. Plugin namespaces:empire-git,empire-dev,empire-research,empire-product,empire-visual. The metaempireplugin contributes no skills. - After editing a SKILL.md, also update the matching section in the plugin's
README.md(plugins/<plugin>/README.md) if triggers, args, or behavior changed. Update rootREADME.mdonly if the one-line plugin description in the plugins table needs to change.
Codex parity
- Skills ship to both Claude Code (marketplace) and OpenAI Codex via skills.sh (
npx skills add marcoskichel/empire -a codex), which readsmarketplace.json. Keep SKILL.md bodies platform-neutral. - Reference skill-bundled resources with relative paths (
references/<file>.md,scripts/<file>) — not${CLAUDE_PLUGIN_ROOT}. Relative refs resolve on both platforms and stay valid when skills.sh copies the skill dir verbatim. empire-git skills keep a${CLAUDE_PLUGIN_ROOT}/scripts/reference for Claude Code alongside a per-skill bundledscripts/copy for other agents. - Qualify Claude-only tools in bodies (e.g. "Claude Code: the
Agenttool; other agents: their spawn mechanism"). Avoid bare/plugin:skillcross-refs in bodies; write "the<skill>skill". scripts/sync-codex.shgenerates the Codex artifacts: personas bundled into dispatching skills (team-review,vet,recon,explore,compare), empire-git's shared scripts bundled per-skill (SCRIPT_BUNDLES), and the.agents/skillsmirror. Run it after changing an agent or a bundled script; CI enforces sync viascripts/sync-codex.sh --check..agents/skills/is a generated symlink mirror for project-local Codex discovery. Never hand-edit; runscripts/sync-codex.sh.- Output styles (empire-visual
visual-first) are Claude-only; Codex has no output-style concept, so only skills port.
Adding a new skill
- Use
/skill-creatorif available - Pick the right plugin (
empire-git,empire-dev,empire-research,empire-product, orempire-visual). Create a new plugin only if the skill clearly fits no existing namespace. - Create
plugins/<plugin>/skills/<name>/SKILL.mdwith frontmatter + body. FrontmatternameMUST match dir name. - Add a section to the plugin's
README.md(plugins/<plugin>/README.md) under## Skills, mirroring existing entries (description, triggers, source link). If the plugin's one-line summary in the rootREADME.mdtable is now out of date, update it too. - If shipping a script, drop it in
plugins/<plugin>/scripts/andchmod +x. - Bump the version in
plugins/<plugin>/.claude-plugin/plugin.json. If the change is user-visible across multiple sub-plugins, also bumpplugins/empire-meta/.claude-plugin/plugin.json. - Test by installing the marketplace locally in Claude Code:
/plugin marketplace add <local-path-or-fork>then/plugin install <plugin>@empire(orempire@empirefor the bundle).
Conventions
- Kebab-case for skill dirs and script filenames.
- Conventional Commits with optional scope. Use the plugin name as scope:
empire-git,empire-dev,empire-research,empire-product,empire-visual,empire-meta,empire-rules. Usemarketplacefor marketplace-level changes. Use!for breaking marketplace/manifest changes. - Skill prose voice depends on plugin:
empire-dev,empire-product,empire-research,empire-visual,empire-rules: imperative mood, MUST/SHOULD/MAY, fragments,<section>tags. Seeplugins/empire-dev/skills/team-review/SKILL.mdas the reference.empire-git: procedural prose with## Step Nheaders permitted. Command-style tools read more clearly as numbered procedures than as fragment lists. Seeplugins/empire-git/skills/worktree-open/SKILL.mdas the reference.
allowed-toolsdeclaration:- Declare on skills that directly invoke
Bash/Read/Glob/Grep(e.g.worktree-*,sync-rules,pr-description). - Do NOT declare on skills that purely delegate to subagents via
Agenttool (e.g.team-review,vet,recon,compare,explore,pitch).
- Declare on skills that directly invoke
- Bash scripts use
set -euo pipefail, color-codedinfo/warn/die/successhelpers (pattern inworktree-setup.sh). - Node scripts (if any): dependency-free ESM, shell out to
gh, nopackage.json/build. Keep pure logic exported and covered by a*.test.mjs(node --test); guardmain()so importing for tests does not run it.
Formatting and linting
- All formatting + security hooks orchestrated by
pre-commit(config in.pre-commit-config.yaml). - Tools:
prettier(markdown/yaml/json),shfmt(shell),shellcheck(shell security),actionlint(GH Actions),gitleaks(secrets). - One-time dev setup:
brew install pre-commit && pre-commit install. - CI runs identical checks via
.github/workflows/validate.yml. - Never bypass with
--no-verify. If a hook fails, fix the underlying issue.
What this repo is NOT
- Not a Node/Python/Go project. No
package.json, nopyproject.toml, no build — keep it that way; don't add a build system or runtime deps unless asked. - Not a backend. Skills run inside Claude Code on the user's machine. Assume zero server-side state.