MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
This skill should be used when the user says "/council", "council", "deliberate", "multi-perspective decision", "트레이드오프 분석", "위원회 소집", "여러 관점으로 검토", or wants deep multi-perspective deliberation with…
$ npx skills add team-attention/hoyeon --skill council -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install team-attention/hoyeon council --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/council .claude/skills/council && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "council" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/council into .claude/skills/council/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "council", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/team-attention/hoyeon/tree/main/skills/councilType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add team-attention/hoyeon --skill council -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install team-attention/hoyeon council --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/council .agents/skills/council && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "council" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/council into .agents/skills/council/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "council", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add team-attention/hoyeon --skill council -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install team-attention/hoyeon council --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/council .cursor/skills/council && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "council" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/council into .cursor/skills/council/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "council", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/team-attention/hoyeon.git --path skills/council--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add team-attention/hoyeon --skill council -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install team-attention/hoyeon council --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/council .gemini/skills/council && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "council" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/council into .gemini/skills/council/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "council", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install team-attention/hoyeon councilInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add team-attention/hoyeon --skill council -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/council .github/skills/council && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "council" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/council into .github/skills/council/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "council", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add team-attention/hoyeon --skill council -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install team-attention/hoyeon council --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/council .opencode/skills/council && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "council" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/council into .opencode/skills/council/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "council", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
councilThis skill should be used when the user says "/council", "council", "deliberate", "multi-perspective decision", "트레이드오프 분석", "위원회 소집", "여러 관점으로 검토", or wants deep multi-perspective deliberation with…
Council is an agent skill from team-attention/hoyeon. This skill should be used when the user says "/council", "council", "deliberate", "multi-perspective decision", "트레이드오프 분석", "위원회 소집", "여러 관점으로 검토", or wants deep multi-perspective deliberation with tradeoff mapping. Combines tribunal (structured adversarial review), agent-council (external LLM opinions), dev-scan (community sentiment), and step-back (meta-level review) into a unified decision-making committee. Uses Agent Teams for real peer-to-peer debate with iterative step-back moderation loop.
Its SKILL.md is about 7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Agent Workflows. The repository describes itself as: Requirements-first Harness — derive, verify, execute. The licence is MIT.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7cff032. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGrepGlobAgentBashAskUserQuestionTeamCreateTeamDeleteSendMessageTaskCreate…and 2 more on the same allowed-tools line.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
codexFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Council loads about 7k tokens when it runs. Until then it costs about 128 tokens; SKILL.md has 1,216 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Read, Grep, Glob, Agent, Bash, AskUserQuestion, TeamCreate, TeamDelete, SendMessage, TaskCreate, TasAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from team-attention/hoyeon at commit 7cff032, republished under its MIT licence (© team-attention). 1,216 words, ~7,004 tokens.
.claude/skills/council/SKILL.md (or your agent's skills folder).You are a council orchestrator (team lead). You dynamically assemble a deliberation committee as an Agent Team, run iterative debates where panelists argue with each other directly via SendMessage, with a step-back reviewer acting as in-loop judge who decides whether more debate is needed. Then synthesize findings into a Tradeoff Map.
Phase 1: Agenda Parsing + Committee Assembly
│
Phase 2: Committee Deliberation (Iterative Debate Loop)
│ ├─ 2.1: TeamCreate + spawn ALL (panelists + step-back + external agents)
│ ├─ 2.2: Debate Cycle
│ │ ├─ Panelists debate (peer-to-peer SendMessage)
│ │ ├─ Lead collects positions → sends to step-back
│ │ └─ Step-back judges → CONVERGED / PARTIAL / FULL
│ │ ├─ CONVERGED → exit loop
│ │ ├─ PARTIAL → lead tells specific panelists to re-debate
│ │ └─ FULL → lead broadcasts, all panelists re-debate
│ ├─ 2.3: Repeat cycle (max 3 cycles)
│ └─ 2.4: Collect external results + shutdown all teammates
│
Phase 3: Report (Executive Summary → Analysis → Conclusion) ┌──────────── TeamCreate("council") ────────────┐
│ │
│ Panelist A ←─ SendMessage ─→ B │
│ Panelist C ←─ SendMessage ─→ A │
Input ───┤ ↕ debate ↕ ├──→ Tradeoff Map
│ │
│ Lead collects ──→ Step-back Judge │
│ │ │
│ CONVERGED? ──No──→ re-debate ─┐ │
│ │Yes │ │
│ ↓ ←────┘ │
│ exit loop │
└────────────────────────────────────────────────┘
↑ parallel (background agents)
External LLM + dev-scan (main agent spawns)| Agent | Role | Model | Type | Phase |
|---|---|---|---|---|
| Lead (you) | Orchestrator, moderator, synthesizer | — | main agent | All |
| Panelist ×2~4 | Perspective-specific analysis + debate | opus | teammate | Phase 2 |
| Step-back Judge | In-loop meta-reviewer, decides if debate continues | opus | teammate | Phase 2 |
| Codex (external) | Independent external LLM opinion | codex | background agent | Phase 2 |
| Community Scanner | dev-scan community sentiment (optional) | haiku | background agent | Phase 2 |
Why two patterns: Teammates (panelists + step-back) use SendMessage for real debate. Background agents handle external CLI calls (codex) because teammates cannot spawn subagents.
Key change: Step-back is spawned alongside panelists in Phase 2 and stays alive throughout the debate loop. It acts as the judge who decides when debate quality is sufficient.
| Tribunal | Council (extends) |
|---|---|
| Fixed 3 roles (Risk/Value/Feasibility) | Dynamic 3 roles designed per topic |
| Internal Claude agents only | + External LLM (Codex) |
| No community data | + dev-scan community sentiment |
| Independent analysis, no interaction | Multi-round debate via SendMessage |
| Single-round hearings | Iterative loop: debate → step-back judge → re-debate |
| No meta-review feedback loop | Step-back can send panelists back for more debate |
| Verdict Matrix → APPROVE/REVISE/REJECT | → Tradeoff Map with Decision Confidence Score |
| Phase | Input | Output Artifact | Consumed By |
|---|---|---|---|
| Phase 1 | User args + topic | committee_config (panelist list, mode, topic) | Phase 2 |
| Phase 2 | committee_config | debate_log[] + final_positions[] + stepback_reviews[] + community_sentiment | Phase 3 |
| Phase 3 | All above | Report (Executive Summary → Analysis → Conclusion & Action Items) | User |
Determine the deliberation target from arguments:
| Input | How to get content |
|---|---|
"A vs B" text | Use directly as the deliberation topic |
file.md or path | Read(file_path) — plan, proposal, or design doc |
--pr <number> | Bash("gh pr diff <number>") and Bash("gh pr view <number>") |
--diff | Bash("git diff HEAD") or Bash("git diff main...HEAD") |
| No args | Ask user what to deliberate via AskUserQuestion |
Analyze the topic and design 2~4 panelists with distinct perspectives. Do NOT use fixed roles — design roles that fit the specific topic.
Design rules:
Examples of dynamic design:
| Topic | Panelists (2~4) |
|---|---|
| "Redis vs Memcached" | Performance Engineer, Ops Complexity Analyst, DX Advocate |
| "Monorepo migration" | Build System Expert, Team Workflow Analyst, Migration Risk Assessor |
| "New auth system" | Security Analyst, UX Impact Reviewer, Compliance Checker |
CODEX_AVAILABLE=$(command -v codex >/dev/null 2>&1 && echo "yes" || echo "no")
DEVSCAN_AVAILABLE="yes"Graceful degradation: If a CLI is not found, skip that external LLM silently. Mark as SKIPPED in the final report.
AskUserQuestion(
question: "The committee has been assembled. Which mode would you like to proceed with?",
options: [
{ label: "Full Council (Recommended)",
description: "Iterative debate + external LLM + dev-scan + step-back judge. Deepest analysis." },
{ label: "Standard",
description: "Iterative debate + step-back judge. Skips external LLM/dev-scan. Faster and more economical." },
{ label: "Quick",
description: "Single debate cycle only. Proceeds to consensus without step-back judgment. Fastest." }
]
)Display the panelist table before asking:
## Proposed Committee
| # | Panelist | Lens | Role in Debate | Phase |
|---|----------|------|----------------|-------|
| 1 | [name] | [analytical perspective] | Teammate (opus) | Phase 2 |
| 2 | [name] | [analytical perspective] | Teammate (opus) | Phase 2 |
| 3 | [name] | [analytical perspective] | Teammate (opus) | Phase 2 |
| 4 | Step-back Judge | Meta-level judge | Teammate (opus) | Phase 2 (loop) |
| 5 | Codex (external) | Independent external perspective | Background agent | Phase 2 (optional) |
| 6 | dev-scan | Community sentiment (optional) | Background agent (haiku) | Phase 2 (optional) |SESSION_ID="[session ID]"
hoyeon-cli session set --sid $SESSION_ID --json '{"council": {"phase": 1, "mode": "[selected]", "topic": "[topic summary]", "status": "active"}}'The core innovation: panelists AND step-back are all teammates spawned together. After each debate round, the step-back judge evaluates and decides whether more debate is needed. Panelists stay alive until the loop completes.
Step 1: Create the council team.
TeamCreate(team_name: "council", description: "[topic summary]")Step 2: Spawn ALL teammates + background agents — all in ONE message.
# Spawn ALL in a single message for parallel execution
# --- Panelist teammates ---
Agent(
name="panelist-[kebab-name-1]",
model="opus",
subagent_type="general-purpose",
mode="bypassPermissions",
team_name="council",
prompt="""
## Role
You are [panelist name], a council panelist analyzing from the perspective of **[analytical lens]**.
## Deliberation Topic
[full topic content]
## Debate Protocol
You are part of an iterative deliberation council. You will go through multiple cycles:
**Cycle 1 — Round 1 (NOW)**: Analyze the topic independently through your lens. Send your position to the team lead.
**Cycle 1 — Round 2 (after lead broadcasts)**: You will receive ALL panelists' positions. Then:
- SendMessage(type="message", recipient="panelist-[name]") to challenge positions you disagree with
- You MUST engage with at least 2 other panelists
- After debating, send your updated position to the team lead
**Subsequent Cycles (if step-back judge requests)**: The lead will message you with step-back feedback and specific questions. Respond by debating those specific points with the named panelists, then send your updated position to the lead.
**IMPORTANT**: Do NOT shut down after a round. Stay alive and wait for further instructions from the lead. Only shut down when you receive a shutdown_request.
## Position Output Format
Send this as a message to the team lead each time you update your position:
Position: [support_A | support_B | conditional | neutral]
Confidence: [0-100]
Key Argument: [your single strongest argument, 1-2 sentences]
Tradeoffs: [dimension → option_a pro/con, option_b pro/con]
Risks: [specific risks from your lens]
Conditions: [what would change your mind]
Evidence: [concrete evidence]
Cycle: [current cycle number]
Be specific and evidence-based. No generic statements.
""")
# ... repeat for each panelist (3 total) ...
# --- Step-back Judge teammate ---
Agent(
name="step-back-judge",
model="opus",
subagent_type="general-purpose",
mode="bypassPermissions",
team_name="council",
prompt="""
## Role
You are the Step-back Judge of a deliberation council. You operate at a META level — above the panelists. You do NOT argue for any option. You evaluate the QUALITY of the debate and decide whether more deliberation is needed.
## Deliberation Topic
[full topic content]
## Your Protocol
You will receive debate summaries from the team lead after each debate round. For each summary, you must:
1. Evaluate the debate quality
2. Return a VERDICT to the team lead
**IMPORTANT**: Do NOT analyze until the lead sends you a debate summary. Wait for the lead's message. Stay alive between cycles — only shut down when you receive a shutdown_request.
## Evaluation Criteria
When the lead sends you a debate summary, analyze:
1. **Framing Check**: Are panelists solving the right problem? Is there an Option C?
2. **Assumption Audit**: What shared assumptions are dangerous?
3. **Debate Quality**: Did positions shift, or just entrench? Are arguments evidence-based or hand-waving?
4. **Blind Spots**: What dimensions are panelists NOT discussing that matter?
5. **Convergence**: Is continued debate likely to produce new insights, or just noise?
## Verdict Format
Send this to the team lead via SendMessage:
Verdict: [CONVERGED | PARTIAL | FULL]
Confidence: [0-100]
Framing Issues: [list or "none"]
Hidden Assumptions: [list or "none"]
Blind Spots: [list or "none"]
Option C: [alternative nobody mentioned, or "none"]
If PARTIAL:
Target Panelists: [panelist-name-1, panelist-name-2]
Debate Focus: [specific question or dimension they should address]
If FULL:
Debate Focus: [what the entire group missed or needs to reconsider]
Meta Insight: [1-2 sentence high-level observation]
## Verdict Meanings
- **CONVERGED**: Debate quality is sufficient. Positions are well-reasoned with evidence. No major blind spots. OK to proceed to synthesis.
- **PARTIAL**: Specific panelists need to address specific gaps. Send only those panelists back to debate the named issue.
- **FULL**: The entire group missed something important (framing error, blind spot, Option C). All panelists need another full round.
""")
# --- Background agents (external LLMs, optional) ---
# Codex (if CODEX_AVAILABLE == "yes")
Agent(
name="external-codex",
model="sonnet",
subagent_type="general-purpose",
run_in_background=true,
prompt="""
Run the following command and return its output:
codex exec <<'PROMPT'
## Deliberation Topic
[full topic content]
Analyze this topic independently. Provide:
1. Your position (support_A / support_B / conditional / neutral)
2. Key argument (1-2 sentences)
3. Tradeoffs you see
4. Risks
5. What conditions would change your mind
Return as JSON with keys: position, key_argument, tradeoffs, risks, conditions
PROMPT
""")
# dev-scan (optional — launch if user requested or topic benefits from community input)
Agent(
name="community-scanner",
model="haiku",
subagent_type="general-purpose",
run_in_background=true,
prompt="""
You are a community sentiment researcher.
## Topic
[deliberation topic]
## Task
Search developer communities (Reddit, HN, dev blogs) for real-world opinions on this topic.
1. Search for relevant discussions
2. Collect pro/con sentiment
3. Note any strong warnings or endorsements from experienced practitioners
## Output Format
{
"sentiment_summary": "overall lean (positive/negative/mixed)",
"key_quotes": [
{ "source": "Reddit r/programming", "quote": "...", "sentiment": "positive/negative" }
],
"warning_signals": ["..."],
"endorsements": ["..."],
"sample_size": N
}
""")cycle = 1
max_cycles = 3
LOOP:
2.2a: Debate Round (panelists exchange positions)
2.2b: Lead collects → sends summary to step-back judge
2.2c: Step-back returns verdict
├─ CONVERGED → exit loop
├─ PARTIAL → lead sends targeted re-debate instructions
└─ FULL → lead broadcasts re-debate instructions
2.2d: cycle += 1, if cycle > max_cycles → exit loop
REPEATCycle 1 follows the Round 1 → Round 2 pattern:
positions[]SendMessage(
type: "broadcast",
content: """
## Cycle 1 — Cross-Debate Begins
All panelist positions:
### [Panelist 1] — [position] (confidence: [N]%)
[key argument + tradeoffs summary]
### [Panelist 2] — [position] (confidence: [N]%)
[key argument + tradeoffs summary]
[... all panelists ...]
## Instructions
Debate: challenge positions you disagree with by messaging those panelists directly.
You MUST engage with at least 2 other panelists.
After debating, send your updated position to the team lead.
""",
summary: "Cycle 1 debate — all positions shared"
)Subsequent cycles follow step-back judge instructions:
For PARTIAL verdicts — send targeted messages:
SendMessage(
type: "message",
recipient: "panelist-[target-name]",
content: """
## Step-back Judge Feedback — Cycle [N]
The step-back judge identified a gap in your analysis:
**Issue**: [debate focus from step-back]
**You need to address**: [specific question]
**Discuss with**: panelist-[other-name]
Debate this specific point, then send your updated position to the team lead.
""",
summary: "Cycle [N] — targeted re-debate request"
)For FULL verdicts — broadcast to all:
SendMessage(
type: "broadcast",
content: """
## Step-back Judge Feedback — Cycle [N]
The step-back judge found a significant gap:
**Issue**: [debate focus from step-back]
**Option C identified**: [if any]
**Everyone must address**: [specific question or reframing]
Debate this with other panelists, then send your updated position to the team lead.
""",
summary: "Cycle [N] — full re-debate required"
)After collecting all updated positions for the cycle, compile a summary and send to the step-back judge:
SendMessage(
type: "message",
recipient: "step-back-judge",
content: """
## Debate Summary — Cycle [N]
### Current Positions
[Panelist 1]: [position] (confidence [N]%, shifted: yes/no from last cycle)
[Panelist 2]: [position] (confidence [N]%, shifted: yes/no)
[Panelist N]: [position] (confidence [N]%, shifted: yes/no)
### Key Debate Exchanges This Cycle
- [Panelist A] challenged [Panelist B] on [topic]: [summary]
- [Panelist C] agreed with [Panelist A] but added [nuance]
### External Data (if available)
Community sentiment: [dev-scan summary]
Codex opinion: [summary]
### Cycle History
Cycle 1: [positions and shifts]
Cycle [N]: [current]
Please evaluate and return your verdict (CONVERGED / PARTIAL / FULL).
""",
summary: "Cycle [N] debate summary for judgment"
)Wait for the step-back judge to respond. Parse the verdict:
if cycle > max_cycles:
→ Log: "Max cycles reached. Proceeding with current positions."
→ Exit loopQuick mode: Skip the loop entirely. Run only Cycle 1 Round 1 (positions only, no cross-debate, no step-back). Proceed directly to Phase 3.
While the debate loop runs, external background agents (Codex, dev-scan) complete independently. Collect their results.
external_opinions[] (Codex)community_sentiment (dev-scan)Timing: External results may arrive during any cycle. The lead includes them in the step-back summary as soon as available.
After the loop exits (CONVERGED or max cycles):
# Shutdown each panelist
SendMessage(type: "shutdown_request", recipient: "panelist-[name-1]", content: "Deliberation complete")
SendMessage(type: "shutdown_request", recipient: "panelist-[name-2]", content: "Deliberation complete")
# ... for all panelists
SendMessage(type: "shutdown_request", recipient: "step-back-judge", content: "Deliberation complete")Wait for all shutdown responses.
TeamDelete()Failure handling:
| Situation | Action |
|---|---|
| External LLM CLI not found | Skip, mark as UNAVAILABLE |
| External LLM call fails | Mark as DEGRADED, proceed without |
| dev-scan fails or times out | Mark as UNAVAILABLE |
| Panelist teammate unresponsive | Send reminder, then proceed after 1 retry |
| Step-back judge unresponsive | Lead self-evaluates convergence |
| All panelists fail | Fall back to main agent self-analysis |
hoyeon-cli session set --sid $SESSION_ID --json '{"council": {"phase": 2, "status": "active", "cycle": [N]}}'The main agent (lead) synthesizes everything. No more teammates needed.
Quick mode note: Only Cycle 1 Round 1 was conducted — no cross-debate, no step-back. Lead extracts contention points directly from initial positions.
Start the report with a scannable verdict so the reader knows the outcome in 5 seconds.
## Council Deliberation Report
### Topic
[deliberation topic]
> **Verdict: [Option A / Option B / Conditional / No clear winner]** · Confidence [N]% · [N] panelists, [N] cycles
>
> [1-sentence synthesis: the single most important takeaway from the entire deliberation]---
### Tradeoff Map
| Dimension | Option A | Option B | Community | Weight |
|-----------|----------|----------|-----------|--------|
| [dim 1] | [pro/con] | [pro/con] | [sentiment] | HIGH/MED/LOW |
| [dim 2] | [pro/con] | [pro/con] | [sentiment] | HIGH/MED/LOW |
| [dim 3] | [pro/con] | [pro/con] | [sentiment] | HIGH/MED/LOW |
**Weight** = how many panelists flagged this dimension as important.### Contention Points
| Point | Side A | Side B | Outcome |
|-------|--------|--------|---------|
| [disagreement] | [panelist]: [argument] | [panelist]: [counter] | [resolved/shifted/unresolved] |This is the section the reader came for. Visually separate it from the analysis above.
---
## Conclusion & Next Steps
### Recommendation
**Lean: [Option A / Option B / No clear winner]**
[2-3 sentence synthesis explaining WHY this is the recommendation, referencing the strongest evidence from the debate]
### Decision Guide
| Condition | Recommended Path |
|-----------|-----------------|
| [condition 1, e.g., "If latency is the top priority"] | Option A |
| [condition 2, e.g., "If team expertise is limited"] | Option B |
| [condition 3, e.g., "If step-back identified Option C"] | Revisit the question |
### Action Items
What you need to do next, in priority order:
1. **[Action verb] [specific task]** — [why this matters, 1 clause]
2. **[Action verb] [specific task]** — [why this matters, 1 clause]
3. **[Action verb] [specific task]** — [why this matters, 1 clause]
### Decision Confidence: [N]%
| Signal | Value |
|--------|-------|
| Panelist consensus | [N]/[total] lean same way |
| Confidence spread | [min]%–[max]% |
| Cycles to converge | [N] of 3 |
| Position shifts | [N] ([stable/healthy/unstable]) |
| Step-back verdict | [CONVERGED / max cycles] |
> Interpretation: >80% = strong consensus · 50-80% = moderate · <50% = highly contestedAll supporting detail goes here — readers expand only what they need.
---
<details>
<summary>Committee & Debate Summary</summary>
### Committee
| Panelist | Lens | Final Position | Confidence | Shifted? | Status |
|----------|------|----------------|------------|----------|--------|
| [name] | [lens] | [position] | [N]% | Yes/No (cycle X→Y) | AVAILABLE |
| Codex | External LLM | [position] | - | - | AVAILABLE/SKIPPED |
| dev-scan | Community | [sentiment] | - | - | AVAILABLE/SKIPPED |
### Debate Summary
**Cycles**: [N] cycles conducted (max: 3)
**Exit reason**: [CONVERGED at cycle N / Max cycles reached]
**Position shifts**: [N] panelists changed position across all cycles
**Step-back interventions**: [list of PARTIAL/FULL verdicts and their impact]
**Key debate moments**: [brief summary of most impactful exchanges]
</details>
<details>
<summary>Preference Tally</summary>
| Source | Preference | Rationale | Position History |
|--------|-----------|-----------|-----------------|
| [panelist 1] | Option A | [key argument] | A→A→A (stable) |
| [panelist 2] | Option B | [key argument] | A→B→B (shifted cycle 2) |
| [panelist 3] | Conditional | [condition] | B→conditional (shifted cycle 2) |
| Codex | Option A | [key argument] | - |
| Community | Option B | [top sentiment] | - |
**Tally**: Option A: N votes · Option B: M votes · Conditional: K
</details>
<details>
<summary>Step-back Insight (Aggregated)</summary>
**Total cycles**: [N] (verdicts: [FULL, PARTIAL, CONVERGED])
**Framing issues raised**: [aggregated from all verdicts]
**Hidden assumptions found**: [aggregated]
**Blind spots surfaced**: [aggregated]
**Option C**: [if identified in any cycle]
**Debate quality trajectory**: [did quality improve across cycles? entrenchment vs convergence?]
**Final meta-recommendation**: [from last step-back verdict]
</details>
<details>
<summary>Full Debate Log</summary>
### Cycle 1
#### Round 1 — Initial Positions
[All panelist initial positions]
#### Round 2 — Cross-Debate
[Key exchanges between panelists]
#### Step-back Verdict
[Verdict + reasoning]
### Cycle 2 (if conducted)
#### Re-debate
[Targeted or full re-debate exchanges]
#### Step-back Verdict
[Verdict + reasoning]
### Cycle N...
</details>
<details>
<summary>External Opinions</summary>
[Codex results, if available]
</details>
<details>
<summary>Community Sentiment (dev-scan)</summary>
[Full dev-scan results, if available]
</details>hoyeon-cli session set --sid $SESSION_ID --json '{"council": {"phase": 3, "status": "completed"}}'| Feature | Quick | Standard | Full |
|---|---|---|---|
| Internal panelists | 3 (teammates) | 3 (teammates) | 3 (teammates) |
| Step-back judge | - | In-loop (teammate) | In-loop (teammate) |
| Debate cycles | 1 (no cross-debate) | Up to 3 | Up to 3 |
| Peer-to-peer debate | - | SendMessage exchanges | SendMessage exchanges |
| Step-back re-debate loop | - | CONVERGED/PARTIAL/FULL | CONVERGED/PARTIAL/FULL |
| External LLM | - | - | Codex |
| dev-scan | Optional | Optional | Optional |
| Tradeoff Map | Basic | Full | Full + community data |
| Estimated agents | 3 teammates | 4~5 (+ step-back) | 4~6 (+ bg agents) |
Teammates (panelists + step-back) CAN:
Teammates CANNOT:
Implication: External LLM calls (codex) MUST be launched by the lead as background agents, not delegated to teammates.
# Compare two technologies
/council "Redis vs Memcached for our session cache"
# Review a design proposal
/council design-proposal.md
# Review a PR with multiple perspectives
/council --pr 421
# Quick deliberation (1 cycle, no step-back loop)
/council --quick "Should we use TypeScript strict mode?"
# Full council with community data + iterative debate
/council --full "Monorepo migration: Nx vs Turborepo"© team-attention, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/council of team-attention/hoyeon.
Open the folder on GitHubat commit 7cff032
Council next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Council this skillteam-attention/hoyeon | 173 | — | ~7k | Automated safety check: Notes | MIT | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| Hook Development for Claude Code Pluginsanthropics/claude-plugins-official | 38k | 10 repos | ~4.1k | Automated safety check: Notes | Apache-2.0 | |
| Using Superpowersfarm-fe/farm | 5.6k | 35 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Executing Plans Inlineobra/superpowers | 297k | 2 repos | ~5.1k | Automated safety check: Pass | MIT | |
| Skill CreatorAzure/azqr | 796 | 89 repos | ~8.2k | Automated safety check: Pass | Apache-2.0 |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
anthropics/claude-plugins-official
Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.
farm-fe/farm
A skill your agent uses when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions
obra/superpowers
Has the agent carry out an implementation plan itself, task by task in the current session, keeping a ledger, proving each step with a test and ending with one whole-branch review.
Azure/azqr
Create new skills, modify and improve existing skills, and measure skill performance.
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
team-attention/hoyeon
This skill should be used when the user asks to "analyze session", "evaluate skill execution", "check session logs", provides a session ID with a skill path, or wants to verify that a skill executed…
team-attention/hoyeon
Recon-first browser automation. An agent skill from team-attention/hoyeon.
team-attention/hoyeon
This skill should be used when the user wants to verify their changes before pushing, or update the project's rule checklists.
team-attention/hoyeon
This skill should be used when the user says "/compound", "compound this", "document learnings", "save what we learned", or after completing a PR.
team-attention/hoyeon
Systematically QA test any application — web apps, native macOS apps, Electron apps, CLI tools, interactive REPLs, or anything on screen.
team-attention/hoyeon
This skill should be used when the user asks about "technical decision", "what to use", "A vs B", "comparison analysis", "library selection", "architecture decision", "which one to use"…
Categories
This skill should be used when the user says "/council", "council", "deliberate", "multi-perspective decision", "트레이드오프 분석", "위원회 소집", "여러 관점으로 검토", or wants deep multi-perspective deliberation with…. Council is an agent skill from team-attention/hoyeon. This skill should be used when the user says "/council", "council", "deliberate", "multi-perspective decision", "트레이드오프 분석", "위원회 소집", "여러 관점으로 검토", or wants deep multi-perspective deliberation with tradeoff mapping.
Council fits situations like: multi-perspective decision; wants deep multi-perspective deliberation with tradeoff mapping.
Run `npx skills add team-attention/hoyeon --skill council -a claude-code`. Or copy the skill folder (skills/council in team-attention/hoyeon) into .claude/skills/council in your project. Claude Code loads it when a task matches its description.
Run `npx skills add team-attention/hoyeon --skill council -a codex`. Or copy the skill folder (skills/council in team-attention/hoyeon) into .agents/skills/council in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add team-attention/hoyeon --skill council -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/council, .gemini/skills/council, .github/skills/council and .opencode/skills/council in your project.
Going by SKILL.md and its folder, Council needs the command-line tools its instructions call (codex). Its frontmatter pre-approves these tools: Read, Grep, Glob, Agent, Bash, AskUserQuestion, TeamCreate, TeamDelete, SendMessage, TaskCreate, TaskUpdate, TaskList.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Council is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7k tokens (SKILL.md is roughly 28k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Council: MCP Server Builder (anthropics/skills, 180k stars), Hook Development for Claude Code Plugins (anthropics/claude-plugins-official, 38k stars), Using Superpowers (farm-fe/farm, 5.6k stars) and Executing Plans Inline (obra/superpowers, 297k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
team-attention (a GitHub organization) maintains it in team-attention/hoyeon, which has 173 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on May 21, 2026.
Source: team-attention/hoyeon on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.