.claude/skills/agent-creator/SKILL.md
Author, edit, review, or refactor meridian agent profiles — the markdown files with YAML frontmatter that live in an `agents/` directory and define reusable spawn configurations (model, system prompt, tools, permissions, skills). Load this skill whenever you're writing an agent from scratch, tweaking an existing profile, splitting one agent into several, reviewing an agent for quality, or deciding whether something should be an agent at all. Phrases that should trigger this skill: "write an agent", "create a profile", "edit this agent", "add a reviewer agent", "refactor the coder agent", "this agent's prompt needs work", "add tools to this profile", "tighten up this agent's description".
npx skillsauth add haowjy/pokemon-amber agent-creatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A guide for writing meridian agent profiles that are reusable, caller-agnostic,
and age well as models and workflows evolve. Load this skill before touching
any file under a meridian-base/, meridian-dev-workflow/, or similar source
submodule's agents/ directory.
.agents/.agents/ is generated output from meridian mars sync. Anything you edit there is
overwritten the next time someone runs sync, so the edit is invisible to
everyone else and disappears on the next pull. Edit the source submodule
instead — meridian-base/agents/<name>.md,
meridian-dev-workflow/agents/<name>.md, or whichever repo owns the profile.
Canonical workflow: edit source → commit source → meridian mars sync →
.agents/ regenerates. If you're unsure which submodule owns an agent,
meridian mars list shows the source for each installed profile.
An agent profile is a markdown file with YAML frontmatter under agents/
in a source submodule:
meridian-base/agents/
meridian-subagent.md
meridian-default-orchestrator.md
The frontmatter defines a reusable spawn configuration — model, tools,
permissions, skills. The body below the frontmatter is the agent's system
prompt. Together they mean meridian spawn -a <name> reproduces the same
agent every time without the caller repeating model flags and preambles.
An agent is an actor. It's spawned as its own process, gets its own context window, makes decisions, calls tools, and produces output. Agents are independent.
A skill is reference material loaded into whatever agent needs it. Skills don't run; they shape behavior inside an existing agent.
If it runs independently and produces output, it's an agent. If it's knowledge that several agents share, it's a skill. Getting this wrong is costly in both directions: a skill where an agent belongs forces a single consumer to become a god-object that does everything itself; an agent where a skill belongs spawns a whole process just to deliver a few hundred lines of reference.
Test for extracting a skill: does more than one agent need the same
knowledge? If the answer is no, the knowledge belongs in that one agent's
body. Don't split a single agent's guidance across its body and a dedicated
skill just because the body feels long — you'll create two places to
maintain with no reuse benefit. For skill authoring, load the skill-creator
skill.
| Field | Type | Required | Purpose |
|-------------------|----------|----------|---------|
| name | string | yes | Profile identifier used with meridian spawn -a <name>. Match the filename. |
| description | string | yes | What the agent does, how to invoke it, what context it needs, where it puts output. Serves the caller deciding whether to spawn. |
| model | string | no | Default model. Caller can override with -m. Omit to let project config decide. |
| effort | string | no | Reasoning effort tier: low, medium, high, xhigh. Honored by models that support it. |
| skills | string[] | no | Skills to load on launch. Only list skills this agent genuinely needs every invocation. |
| tools | string[] | no | Tool allowlist. Primarily useful for scoping Bash (Bash(git *)) and for harnesses like OpenCode/Codex. On Claude, this does not restrict built-in tools. |
| disallowed-tools| string[] | no | Tool denylist. On Claude this genuinely removes tools — use it for hard restrictions like [Agent] on orchestrators that must go through meridian spawn. |
| sandbox | string | no | Permission tier: read-only, workspace-write, full-access, unrestricted. Match the tier to the task, not the maximum the agent might ever need. |
| mcp-tools | string[] | no | MCP tools to expose, e.g. [fetch, filesystem]. |
| approval | string | no | Approval mode override: default, confirm, auto, yolo. |
| harness | string | no | Harness override. Usually omit and let model choice derive it. |
| autocompact | bool | no | Whether the harness may auto-compact long contexts. |
Don't memorize this — run meridian spawn --help and look at existing
profiles in meridian-base/agents/ and meridian-dev-workflow/agents/ when
you need a refresher. Profiles evolve faster than docs.
A well-structured body puts the most important context first so the model orients quickly after compaction or mid-context recall. These are priorities ordered by importance, not a template — a short utility agent doesn't need five sections.
These are the principles that should shape every agent prompt you write.
They're duplicated into the skill-creator skill too, because the same
craft applies to skill bodies.
Don't assign personas like "you are a senior engineer" or "you are a careful reviewer." The PRISM persona study (arxiv:2603.18507) found that persona prompting activates instruction-following machinery that interferes with knowledge retrieval and reasoning accuracy; on discriminative tasks (judgment calls, factual recall, code reasoning), every persona variant they tested reduced accuracy. The model doesn't need a costume to follow behavioral instructions — describe the behavior directly. "Focus on correctness: does the code do what it claims?" does more work than "you are a careful code reviewer."
Every constraint should include the reasoning behind it. Claude generalizes from explanations — understanding why a rule exists lets the model apply the principle to novel situations rather than following the rule literally and missing the point. A naked "never edit source files" is brittle; "you don't edit source files because your value is the continuity between user intent and autonomous orchestrators — if you drop into implementation you lose the altitude to notice drift" generalizes. Expect to write a sentence of reasoning for nearly every constraint. If you can't explain why, the constraint probably shouldn't be there.
Behavioral heuristics with reasoning, not brittle if-then rules and not vague high-level hand-waving. Too specific and the prompt breaks on any edge case the author didn't anticipate, which drives constant maintenance. Too vague and the model falls back on defaults that may not match what you wanted. The sweet spot: tell the model what to do, when, and why, and trust it to apply the principle. "Prefer git diff over reading full files when reviewing a change, because the diff already shows exactly what moved" lands at the right altitude.
Avoid ALL CAPS, "CRITICAL", "you MUST", "NEVER". Aggressive language was a
reasonable defense against undertriggering on older models; on current
models it pushes toward brittle, literal compliance and overtriggering —
the instruction fires in contexts where it doesn't make sense. As models
keep getting more responsive to system prompts, the threshold for this
overtriggering drops. Use ordinary language. "Use meridian spawn to
delegate work; the built-in Agent tool bypasses meridian's state tracking"
is firmer in practice than "YOU MUST NEVER USE THE AGENT TOOL."
Numbered Step 1 / Step 2 / Step 3 flows constrain the model to a rigid order that may not fit the actual task. A simple change doesn't need an exploration phase. A complex one might need review mid-work, not only at the end. Anthropic's own guidance prefers general instructions over prescriptive steps: "think thoroughly" often beats a hand-written plan. Describe inputs, outputs, quality bar, available tools, and when to escalate — then trust the model to sequence.
Model rankings and pricing shift month to month. Hardcoding "fan out
across opus, gpt-5.4, and codex" means the prompt is stale the day a new
model ships. Instead write "fan out across diverse strong models" and
point to meridian models list or the agent-staffing skill for current
guidance. Match model cost to task value — strong reasoning models for
review and architecture, fast models for bulk implementation and research.
Same principle applies to the profile's own model: field: pick based on
the role, not fashion, and expect to revisit it.
The description, the body, and any loaded skills each add new information. If the description already says "reviews code for correctness and simplicity," the body shouldn't open by saying the same thing — it should start where the description left off. Repetition wastes tokens on every invocation and creates maintenance drift: update one place, forget the other, and now the agent gets conflicting instructions.
Agents run independently and produce output. Skills are reference material loaded into agents. If only one agent consumes a skill, that skill's content belongs in the agent's body — you've created two places to maintain with no reuse payoff. If you find yourself putting behavior and decision-making into a skill, it probably wants to be its own agent. Getting this wrong in either direction is costly; see the "Agent vs skill" section above when in doubt.
Two mechanisms, used for different purposes:
tools (allowlist) is most useful for scoping Bash — Bash(git *),
Bash(rg *), etc. — and for OpenCode/Codex where the allowlist is
enforced at the harness level. On Claude, the allowlist does not
restrict built-in tools: Read, Glob, Grep, Agent, WebFetch, etc. remain
available regardless of what you list.disallowed-tools (denylist) is how you enforce real restrictions on
Claude. The canonical use is disallowed-tools: [Agent] on orchestrators
that must delegate through meridian spawn — the built-in Agent tool
would bypass spawn tracking, report piping, and model routing.When both are set, both are emitted — the allowlist doesn't suppress the denylist. Use the denylist for hard no's and the allowlist for scoping what's available.
Pick the lowest tier that does the job:
read-only — analysis, review, investigation. The agent can read
anything but can't modify files or run state-changing commands.workspace-write — implementation and test work scoped to the repo.full-access — only when the agent genuinely needs to touch things
outside the workspace.unrestricted — last resort.Matching sandbox to task is how you keep a misbehaving or confused agent
from surprising the user. A @reviewer that only needs git diff and
git log should not be able to write files.
Match model strength to task value rather than picking a favorite:
Don't hardcode names in prose. Set model: in the profile so project
config or CLI can override it, and point contributors at
meridian models list when they ask which one to use.
The body shouldn't reference who spawned the agent or how. The agent sees
whatever context landed in its window and has no way to distinguish
--from context from -f context from inline prompt text. Phrases like
"the @dev-orchestrator spawns you with --from" are meaningless to the
receiving model and create a false dependency on a specific caller.
Keeping agents caller-agnostic makes them reusable across workflows — the same @reviewer can be called from a dev orchestrator, a CI pipeline, or a human ad-hoc spawn and behave identically.
The agent description serves the caller, not the agent itself. Callers may
be humans running meridian mars list, orchestrators that have never seen this
profile before, or agents in harnesses without native profile discovery.
Cover:
meridian spawn -a <name> shape so
callers in any harness can copy the pattern.--from and relevant files with -f, or mention specific files in the
prompt so the agent can explore on its own." This is one of the few
places where naming invocation mechanics is appropriate, because the
caller is the audience.$MERIDIAN_WORK_DIR/design/, so
orchestrators don't have to read agent code or wait for completion to
find artifacts.The body, by contrast, should describe behaviors directly and stay silent on invocation mechanics.
A profile that mixes review and implementation creates a conflict of interest — the same model is both writing and judging its own work — and bloats the system prompt, diluting both sets of instructions. When you're tempted to stuff a second role into a profile, write a second profile.
resources/example-profiles.md — three
canonical examples (minimal utility agent, @reviewer, orchestrator). Read
when you're starting a new profile and want a shape to crib from.resources/anti-patterns.md — before/after
pairs for the most common mistakes (role identity, aggressive language,
hardcoded models, prescriptive sequences, caller-specific bodies). Read
when a profile feels off and you're trying to diagnose why.meridian mars list — installed agents and skills with their source submodulesmeridian spawn --help — current spawn flags and shapesmeridian models list — available models with strengths and cost tiersagent-staffing skill — team composition guidance for design and
implementation phasesdata-ai
Team composition for writing workflows — which agents to spawn, how many, what focus areas to assign, and how to scale effort. Use when composing critic panels, dispatching researchers, staffing draft/revise loops, or setting up brainstorm fan-outs.
testing
What fiction readers actually want, framed as four composable reward channels (transportation, aesthetic, social simulation, flow), and the specific documented ways alignment training damages each one. Grounded in reader-psychology research and empirical NLP findings. Load when drafting prose, critiquing a draft, deciding whether to show or tell, diagnosing why a passage feels flat, or reasoning about why a scene is or isn't working.
testing
Logging and referencing writing issues — craft problems, tics, inconsistencies, and structural concerns found during analysis, critique, or review. Use when an agent identifies something worth tracking beyond a single critique report: repeated tics across chapters, inconsistencies that affect multiple scenes, structural problems that need the author's attention, or patterns that should be fixed in revision.
development
Shared artifact convention between orchestrators — what goes where in `$MERIDIAN_FS_DIR/` and `$MERIDIAN_WORK_DIR/`, how artifacts flow between phases, and what each directory means. Use whenever work artifacts, style files, knowledge entries, drafts, or critique reports are being created, referenced, or discussed.