From cc-suite
Creates, edits, or reviews cc-suite advisor agents under `.cc-suite/agents/`. Covers system-prompt phrasing, model choice, tool restrictions, working-dir scoping, budget/turn limits, and the file format.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cc-suite:agent-designThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
cc-suite advisor agents are project-scoped consultative personas backed by `claude-octopus`. Each lives at `.cc-suite/agents/<name>.md` and is registered as an MCP server in **both** `.mcp.json` (Claude side) and `.codex/config.toml` (Codex side) by `scripts/bridge_agents.py`. Either tool can call any agent via `mcp__<name>__<tool_name>`.
cc-suite advisor agents are project-scoped consultative personas backed by claude-octopus. Each lives at .cc-suite/agents/<name>.md and is registered as an MCP server in both .mcp.json (Claude side) and .codex/config.toml (Codex side) by scripts/bridge_agents.py. Either tool can call any agent via mcp__<name>__<tool_name>.
Advisors are not subagents that do work. They are advisors that judge work. Get this mental model right and the rest follows.
Rule of thumb: if you'd describe the thing as "a person you'd ask for an opinion," it's an advisor. If you'd describe it as "a job you'd hand off," it's a subagent. If it's "a rulebook," it's a skill.
---
name: <kebab_or_snake_case_name> # required if filename ≠ desired name
description: | # multi-line block scalar — see below
<one-line caller-facing summary>
<example>
Context: <when a caller would consult this advisor>
user: "<the kind of question they'd ask>"
assistant: "<how Claude/Codex would invoke the advisor — show the framing, not the answer>"
</example>
<example>
Context: <a second, different scenario>
user: "<another representative question>"
assistant: "<another framing>"
</example>
tool_name: <name>_consult # optional; default <name>_consult
model: opus | sonnet | haiku # optional; default = caller's setting
allowed_tools: [Read, Grep, Glob] # default for advisors
disallowed_tools: [] # optional
permission_mode: default # default | acceptEdits | plan | dontAsk | auto | bypassPermissions
max_turns: 5 # default 5 for advisors
max_budget_usd: 0.50 # per-consultation cap
effort: high # low | medium | high | max
cwd: . # relative to project root, default "."
additional_dirs: [] # extra readable dirs
prompt_mode: append # append (default) or replace
---
# Body content — the system prompt
State the values, not the procedures. See the writing rules below.
The body becomes the CLAUDE_APPEND_PROMPT (default) or CLAUDE_SYSTEM_PROMPT (when prompt_mode: replace). Almost always use append — Claude Code's preset is useful, you're adding a perspective on top of it.
<example> blocks in description matterThe description field becomes the MCP tool description that Claude and Codex see when deciding whether to consult this advisor. Two <example> blocks showing realistic call sites teach the caller (not the advisor itself) when this advisor is the right one to invoke. Without them, the caller has only a one-liner to go on and tends to either over-call or under-call the advisor.
Use a YAML literal block scalar (description: |) so newlines and <example> tags survive parsing. bridge_agents.py preserves the full multi-line value into CLAUDE_DESCRIPTION verbatim.
The point of an advisor is to bring a value system to the table that the caller doesn't have. If you write the prompt as a checklist, you've built a linter, not an advisor.
Procedures (what to avoid):
Check that variables have descriptive names. Look for line length over 80 chars. Verify each function has a docstring. Flag any TODO comments.
Values (what to write):
You hold readability above cleverness. When you read code, ask: would a maintainer six months from now know what this does without context? When the answer is no, name the specific reason — a misleading variable, a deeply nested clause, a comment that contradicts the code.
The difference: procedural prompts run the same way every time. Value prompts respond to what the code actually shows. The advisor will surface different concerns on different code, because the values reweight the same observations differently.
How to phrase values:
north_star_advisor, security_skeptic, architecture_critic. Worth the cost.clarity_reviewer, simplicity_advocate, documentation_critic. Good judgement, much cheaper.style_checker, link_validator. Rarely needed — if the work is this mechanical, a skill or script is probably better than an advisor.If you find yourself reaching for opus by default, ask: is the value system actually doing complex judgement, or am I just hoping a bigger model produces better output? Bigger model on a vague prompt produces verbose, hedged output. Smaller model on a sharp prompt produces sharp output.
Advisors advise. They don't act. The default allowed_tools: [Read, Grep, Glob] is the right starting point for almost every advisor — they need to read the codebase to advise on it, but they should not write, edit, run shell commands, or fetch URLs.
When to open up:
Bash: only when the advisor needs to run a check that file reading can't capture (e.g., a documentation advisor that needs to verify CI commands work). Even then, prefer letting the caller run the command and feed results to the advisor.WebFetch / WebSearch: rare. Most advisors should reason from the project's own code; web access invites consultation drift.Edit/Write: almost never. If an advisor needs to write, you've built a subagent, not an advisor. Use the Task tool path instead.If you can't justify a tool's presence in one sentence, take it out.
cwd defaults to project root. Override when an advisor should only see a subset:
name: docs_advisor
cwd: docs
This advisor's claude subprocess sees docs/ as its filesystem root. It physically cannot read code outside docs/ unless additional_dirs opens specific paths. This is genuinely useful:
tests/ + src/ only.web/ to keep responses focused.The advisor's CLAUDE_TIMELINE_DIR is always at .cc-suite/agents/<name>/timeline/ regardless of cwd — that's per-agent persistent state, not the working scope.
These aren't safety theater — they're a contract with the caller that consulting an advisor is cheap. If consultation is expensive, the caller stops consulting, and your advisor sits idle.
tool_name controls the MCP-visible tool. Defaults to <name>_consult:
north_star_advisor → tool north_star_advisor_consult → callable as mcp__north_star_advisor__north_star_advisor_consult (clunky)north_star_advisor with tool_name: north_star_consult → callable as mcp__north_star_advisor__north_star_consult (cleaner)Pick tool_name so the callable form reads like an English action: consult, check, review, audit.
timeline/ directory. Use this — _followup tools let the caller continue a conversation. Don't design every advisor like it's stateless.The plugin ships starter presets under templates/agents/ — copy and edit, don't reinvent:
north_star_advisor — project's overarching prioritiesclarity_reviewer — readability over correctnesssimplicity_advocate — smallest complete solutionsecurity_skeptic — adversarial reviewerdeletion_advocate — finds removable codedocumentation_critic — judges doc honesty + audience fitThese are starting points. Edit the values to match the project, narrow the scope with cwd, tighten the tool list. The presets are well-formed but generic; the value of your project's advisors is in how they reflect this project's priorities.
Any edit to an agent file (creating, modifying, deleting) requires re-running the bridge:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/init.sh" # or
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/bridge_agents.py"
/cc-suite:add-agent and /cc-suite:remove-agent do this automatically. /cc-suite:repair and /cc-suite:update re-bridge as part of their normal flow.
For Claude to actually see the new MCP server, restart the Claude Code session (the MCP loader reads .mcp.json at startup, not on every prompt). Codex picks up .codex/config.toml changes per-invocation.
This skill covers cc-suite advisor agent design — claude-octopus-backed MCP advisors declared in .cc-suite/agents/. It defines the file format, the values-not-procedures prompt convention, model and tool defaults, working-directory scoping, budget caps, and the per-agent timeline model.
It does not cover:
.claude/agents/) — a different mechanism with different semantics. Use those when you want to spawn a one-shot subagent in isolated context, not when you want a persistent consultative persona. See claude-architecture for the native-agent surface.cc-suite/claude-code-conventions and the nlpm:conventions family.claude-octopus is the MCP server; this skill describes how to configure it per advisor, not how to build a new MCP server.bridge_agents.py writes .mcp.json and .codex/config.toml. See scripts/bridge_agents.py itself, plus commands/init.md / repair.md / update.md for when the bridge runs.npx claudepluginhub xiaolai/claude-plugin-marketplace --plugin cc-suiteCreates Claude Code agents from scratch or by adapting templates. Guides requirements gathering, template selection, and file generation following Anthropic best practices (v2.1.63+).
Create custom agents for Claude Code including YAML frontmatter, system prompts, tool restrictions, and discovery optimization. Use when creating, building, or designing agents, or when asked about agent creation, subagent configuration, Task tool delegation, or agent best practices.
Generates markdown agent files with YAML frontmatter for Claude Code, configuring system prompts, tools, and isolation for autonomous task delegation in plugins.