ComposeSample: Skill for Claude Code

.claude/skills/design-options/SKILL.md

design-options is a skill for Claude Code from HeeGyeong/ComposeSample. It costs 82 tokens per session (2,980 once invoked), scanned A, original, MIT.

A read-only design comparison process in which several designers propose different solutions and a review panel compares them.

In plain words
What is it for?
Use it to compare options such as replacing conditional routing, changing state preservation, or selecting a refactoring direction, then receive a comparison table and recommendation.
Why use it?
It makes trade-offs visible when choosing between architectural, refactoring, or implementation approaches before code is changed.

Skill for Claude Code

Written for Claude Code: $ARGUMENTS substitution.

This is HeeGyeong/ComposeSample's own configuration. It tells Claude Code how to work on ComposeSample itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything ComposeSample configures →

Reuse

Borrowing it

Nothing to install: this file belongs to HeeGyeong/ComposeSample. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/HeeGyeong/ComposeSample/main/.claude/skills/design-options/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/HeeGyeong/ComposeSample

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for design-options

README.md
[![agentmods](https://agentmods.dev/badge/skills/heegyeong/composesample/design-options/github.svg)](https://agentmods.dev/skills/heegyeong/composesample/design-options)
Your own site
<a href="https://agentmods.dev/skills/heegyeong/composesample/design-options"><img src="https://agentmods.dev/badge/skills/heegyeong/composesample/design-options/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for design-options

Your own site · 80×15
<a href="https://agentmods.dev/skills/heegyeong/composesample/design-options"><img src="https://agentmods.dev/badge/skills/heegyeong/composesample/design-options.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 82 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,980 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00082 $0.02980
Opus 5.5 $0.00033 $0.01192
Sonnet 5.5 $0.00016 $0.00596
Haiku 4.5 $0.00008 $0.00298

Measured 1mo ago against content hash d83da49e2032, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

design-options scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/skills/design-options/SKILL.md · 171 lines

How it starts

The opening of the file, as written. The whole thing — 171 lines — stays where its author put it; the contents beside it link to each section on GitHub.

design-options — 설계 비교 결정형 하네스

접근 방향이 미결정인 문제에 대해, 관점이 다른 설계자 3명이 독립 설계하고 judge panel(심사 3렌즈) 이 교차 심사해 비교표 + 추천안을 합성하는 read-only 하네스입니다. 기존 하네스와의 역할: explore-codebase=탐색형, impact-analyze=검증형, design-options=결정형. 추천안이 정해지면 그 변경면을 impact-analyze 에 넘기는 체인이 자연스럽습니다.

호출: /design-options <문제/대상>

  • 예: /design-options ExampleRouter when-분기를 sealed/맵 기반으로 전환할지
  • 예: /design-options 예제 공통 ViewModel 상태 보존(process death) 방향

오케스트레이터 절차 (메인 루프가 따른다)

1. 문제 정의

$ARGUMENTS 에서 문제/대상을 추출한다. 제약이 모호하면(릴리즈 일정, 호환 요구, 허용 가능한 변경 범위 등) 사용자에게 1~2개만 확인하고 시작한다.

2. 문제면 정찰 (인라인, read-only)

관련 코드를 grep/Read 로 훑어 설계자들이 공유할 컨텍스트를 만든다:

  • problemSurface = { problem, constraints:[], currentState, keyFiles:[] }
  • currentState = 현재 구조와 문제 지점 요약, keyFiles = 설계의 출발점이 될 파일 목록.

3. Workflow 실행

아래 §임베드 Workflow 스크립트를 args: { surface: problemSurface } 로 호출한다(실제 JSON 값으로 전달).

  • 문제 특성상 기본 렌즈(minimal-change/root-fix/compat-first)가 안 맞으면 args.designerLenses 로 오버라이드할 수 있다 ([{key, desc}] 3개 권장).

4. 결과 제시

반환된 report(비교표+추천안 markdown)를 보여준다.

  • 비교표는 결정 자료 초안이며 최종 결정은 사용자가 한다는 점을 명시한다.
  • 사용자가 방향을 결정하면, 그 방향으로 작업 spec(00-overview + step 분해)을 이어서 작성할지 묻는다. 채택된 설계의 stepBreakdown 을 초안으로 쓴다.

임베드 Workflow 스크립트

Workflow 도구의 script 인자로 전달. args = { surface, designerLenses? } 를 실제 JSON 값으로 넘긴다. 안전 규칙: Date.now()/Math.random()/new Date() 미사용, schema 강제 출력, .filter(Boolean) 로 null 방어.

export const meta = {
  name: 'design-options',
  description: '관점별 독립 설계 fan-out → judge panel 교차 심사 → 비교표·추천안 합성',
  phases: [
    { title: 'Design', detail: '렌즈별 설계자 3명이 독립 설계' },
    { title: 'Judge', detail: '설계마다 심사 3렌즈(비용/리스크/호환) 교차 심사' },
    { title: 'Synthesize', detail: '비교표 + 추천안 + step 분해 초안 합성' },
  ],
}

const surface = (args && args.surface) || {}
const surfaceText = JSON.stringify(surface, null, 2)

if (!surface.problem) {
  log('problemSurface.problem 이 비어 있습니다. 메인 루프에서 문제 정의를 채워 다시 호출하세요.')
  return { report: '', designs: [], judgments: [] }
}

const DESIGNER_LENSES = (args && args.designerLenses) || [
  { key: 'minimal-change', desc: '최소 변경·릴리즈 안전 우선. 기존 구조를 유지하고 국소 수정으로 문제를 해결한다. 변경 파일 수와 회귀 범위를 최소화.' },
  { key: 'root-fix', desc: '근본 구조 개선 우선. 재발을 방지하고 기술 부채를 해소하는 구조적 해법을 설계한다. 변경이 커져도 올바른 구조를 지향.' },
  { key: 'compat-first', desc: '호환 우선. 네비게이션/상태복원(rememberSaveable·SavedState)/기존 로컬·서버 데이터와의 공존과 단계적 마이그레이션 경로를 최우선으로 설계한다.' },
]

const DESIGN_SCHEMA = {
  type: 'object',
  required: ['lens', 'title', 'summary', 'changes', 'pros', 'cons', 'evidenceFiles', 'stepBreakdown'],
  properties: {
    lens: { type: 'string' },
    title: { type: 'string', description: '설계안 이름 한 줄' },
    summary: { type: 'string', description: '설계 요지 3~5문장' },
    changes: {
      type: 'array',
      items: {
        type: 'object',
        required: ['file', 'what'],
        properties: { file: { type: 'string' }, what: { type: 'string' } },
      },
      description: '변경 대상 파일과 변경 내용',
    },
    pros: { type: 'array', items: { type: 'string' } },
    cons: { type: 'array', items: { type: 'string' } },
    evidenceFiles: { type: 'array', items: { type: 'string' }, description: '설계 근거로 확인한 파일:라인' },
    stepBreakdown: { type: 'array', items: { type: 'string' }, description: '채택 시 구현 step 분해 (WORKFLOW.md step 단위)' },
  },
}

const JUDGE_LENSES = [
  { key: 'effort', desc: '구현 비용·변경 범위·일정. 변경 파일 수, 난도, 검증 부담을 평가한다.' },
  { key: 'risk', desc: '크래시·사이드이펙트·회귀 리스크. 생명주기/직렬화/동시성/데이터 호환 관점에서 터질 곳을 평가한다.' },
  { key: 'compat', desc: '호환·마이그레이션 경로·롤백 가능성. 기존 네비게이션/상태복원/데이터와의 공존, 단계 출시와 되돌리기 용이성을 평가한다.' },
]

const JUDGE_SCHEMA = {
  type: 'object',
  required: ['lens', 'score', 'strengths', 'weaknesses', 'dealBreakers'],
  properties: {
    lens: { type: 'string' },
    score: { type: 'integer', minimum: 1, maximum: 5, description: '1=심각한 문제 ~ 5=우수' },
    strengths: { type: 'array', items: { type: 'string' } },
    weaknesses: { type: 'array', items: { type: 'string' } },
    dealBreakers: { type: 'array', items: { type: 'string' }, description: '치명 결격 사유 — 없으면 빈 배열' },
  },
}

// Phase 1: 렌즈별 설계자 독립 설계 (서로의 설계를 보지 못함)
const designs = (await parallel(DESIGNER_LENSES.map(lens => () =>
  agent(
    `문제면(JSON):\n${surfaceText}\n\n` +
    `당신은 "${lens.key}" 관점의 설계자다: ${lens.desc}\n` +
    `이 관점에서 위 문제의 해결 설계안 1개를 작성하라. 실제 코드를 확인(파일:라인 인용)하고 설계하라 — 추측 금지. ` +
    `변경 대상 파일/내용, 장단점, 채택 시 구현 step 분해까지 포함. read-only — 코드 수정 금지.`,
    { label: `design:${lens.key}`, phase: 'Design', agentType: 'code-explorer', schema: DESIGN_SCHEMA },
  )
))).filter(Boolean)

if (!designs.length) {
  return { report: '설계자 전원이 실패/스킵되어 비교할 설계가 없습니다.', designs: [], judgments: [] }
}
if (designs.length === 1) {
  log('설계안이 1개만 생성되어 비교가 불가합니다 — 단일 설계 기준으로 보고서를 생성합니다.')
}

// Phase 2: 설계마다 심사 3렌즈 교차 심사 (설계 간 배리어 없음)
const judged = await pipeline(
  designs,
  (design) => parallel(JUDGE_LENSES.map(jl => () =>
    agent(
      `문제면(JSON):\n${surfaceText}\n\n` +
      `심사 대상 설계안(JSON):\n${JSON.stringify(design, null, 2)}\n\n` +
      `당신은 "${jl.key}" 렌즈의 심사위원이다: ${jl.desc}\n` +
      `이 렌즈로만 설계안을 심사하라. 주장에 의심이 가면 실제 코드를 확인해 검증하라. ` +
      `점수(1~5), 강점, 약점, 치명 결격(dealBreakers — 없으면 빈 배열)을 반환하라.`,
      { label: `judge:${design.lens}/${jl.key}`, phase: 'Judge', agentType: 'code-reviewer', schema: JUDGE_SCHEMA },
    )
  )).then(verdicts => ({ design, verdicts: verdicts.filter(Boolean) })),
)

const judgments = judged.filter(Boolean)

// Phase 3: 합성 — 전체 설계·심사가 모여야 하므로 배리어 1회
phase('Synthesize')
const report = await agent(
  `문제면(JSON):\n${surfaceText}\n\n` +
  `아래는 독립 설계안들과 렌즈별 심사 결과(JSON)다. **설계 비교 보고서(markdown)** 를 작성하라. 구조:\n\n` +
  `1. **비교표** — 행=설계안, 열=심사 렌즈(effort/risk/compat) 점수 + 총점 + dealBreakers 유무\n` +
  `2. **설계안별 요약** — 각 설계의 요지·핵심 장단점·치명 결격(있다면)\n` +
  `3. **추천안** — 어느 설계를 왜 추천하는지. dealBreaker 가 있는 안은 추천 불가 사유 명시\n` +
  `4. **차점안에서 접목할 아이디어** — 추천안에 흡수하면 좋은 다른 설계의 요소\n` +
  `5. **채택 시 step 분해 초안** — 추천안(+접목 요소)의 구현 step 목록 (작업 spec 의 Step 목록 형식)\n\n` +
  `점수는 정성 판단의 보조다 — 총점만으로 기계적으로 고르지 말고 dealBreaker 와 문제의 제약(constraints)을 우선 고려하라. ` +
  `마지막에 "본 보고서는 결정 자료 초안이며 최종 결정은 사용자가 한다"를 명시하라.\n\n` +
  `데이터:\n\`\`\`json\n${JSON.stringify(judgments, null, 2)}\n\`\`\``,
  { label: 'synthesize:report', phase: 'Synthesize', agentType: 'code-explorer' },
)

return { report, designs, judgments }

Read the full file on GitHub · 171 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago First seen · 171 lines · 82 tokens per session scan A d83da49e2032

Subscribe to this mod's changes

design-options is a skill published in the GitHub repository HeeGyeong/ComposeSample (11 stars, last pushed today), licensed MIT. It adds 82 tokens to every session and 2,980 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

local-ai-agents

Build local-first AI agents that run entirely on a developer workstation with Microsoft Foundry Local and Qwen function-calling models. Covers Small Language Models (SLMs), the OpenAI-compatible local endpoint, sandboxed local tools, local RAG with Chroma, local MCP servers, hybrid cloud/local routing, and the…

microsoft/ai-agents-for-beginners · 200 tokens

systematic-debugging

Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.

obra/superpowers · 21 tokens

next-cache-components-adoption

Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the cacheComponents flag, work through a flood of blocking-prerender / instant validation errors, run the cache-components-instant-false codemod, or…

vercel/next.js · 95 tokens

chat-pet-sprite-creation

Use when creating or changing VS Code chat pet sprite art, sprite sheets, state animations, eye treatments, Stable/Insiders variants, or pet transitions under src/vs/workbench/contrib/chat/browser/widget/media/chatPet.

microsoft/vscode · 53 tokens

cpu-profile-analysis

Analyze V8/Chrome CPU profiles (.cpuprofile) and DevTools trace files (Trace-.json). Use when: profiling performance, investigating slow functions, comparing code paths, finding bottlenecks, analyzing timeToRequest, understanding call trees from sampling profiler data, analyzing layout/paint/rendering, investigating…

microsoft/vscode · 71 tokens

insight-error-page

Write or audit an insight-kind error page for the Next.js dev overlay. Use when creating a new errors/ .mdx page, auditing an existing one, or checking that a page matches the framework fix cards. Covers page structure, title alignment, FixCard cards with Copy prompt button, code snippets, terminology verification…

vercel/next.js · 83 tokens