| name | campforge-interview |
| description | Interactive camp creation via guided interview. Ask the user questions to build a domain-spec.yaml, then run campforge create to scaffold the camp. Trigger: "์ ๋ถํธ์บ ํ ๋ง๋ค์ด์ค", "create a new camp", "campforge interview", "๋ถํธ์บ ํ ์ธํฐ๋ทฐ"
|
| license | Apache-2.0 |
| metadata | {"author":"swen","version":"0.1"} |
| compatibility | Requires campforge CLI (npx tsx cli/bin/campforge.ts or campforge) |
CampForge Interview Skill
Guide the user through creating a new agent camp via conversation.
Collect answers, generate a domain-spec.yaml, then run campforge create.
Interview Flow
Phase 1: Domain Basics
Ask these in order. Skip if user already provided in initial request.
-
Domain ID
"๋ถํธ์บ ํ์ ID๋ฅผ ์ ํด์ฃผ์ธ์ (์: devops-sre, arena-ops, v8-admin)"
Rules: lowercase, kebab-case, no spaces.
-
Domain Name
"์ด ๋๋ฉ์ธ์ ์ ์ฒด ์ด๋ฆ์? (์: DevOps / Site Reliability Engineering)"
-
Role Description
"์ด ์์ด์ ํธ๋ ์ด๋ค ์ญํ ์ ํ๋์? ํ๋ ๋ฌธ์ฅ์ผ๋ก ์ค๋ช
ํด์ฃผ์ธ์."
This becomes identity.role_template. Insert {level} placeholder for persona level.
Phase 2: Identity
-
Core Values (3-5๊ฐ)
"์ด ์์ด์ ํธ์ ํต์ฌ ๊ฐ์น๋ฅผ 3-5๊ฐ ์๋ ค์ฃผ์ธ์."
์์: "์ ํ์ฑ ์ฐ์ ", "์์ ๋จผ์ ", "์๋ํ ์งํฅ"
-
Boundaries (2-4๊ฐ)
"์ด ์์ด์ ํธ๊ฐ ์ ๋ ํ๋ฉด ์ ๋๋ ๊ฒ์?"
์์: "ํ๋ก๋์
๋ณ๊ฒฝ ์ ๋ฐ๋์ ํ์ธ", "ํ๊ดด์ ๋ช
๋ น ๊ธ์ง"
-
Persona Level
"๊ธฐ๋ณธ ํ๋ฅด์๋ ๋ ๋ฒจ์? (junior / mid / senior / lead)"
Default: senior
-
Language
"๊ธฐ๋ณธ ์ธ์ด๋? (ko / en)"
Default: ko
Phase 3: Skills (Curriculum)
-
Core Skills
"์ด ์์ด์ ํธ๊ฐ ๋ฐ๋์ ํ ์ ์์ด์ผ ํ๋ skill์ ๋์ดํด์ฃผ์ธ์."
For each skill, ask:
"์ด skill์ ์ค๋ช
๊ณผ ์ํฌํ๋ก์ฐ ๋จ๊ณ๋ฅผ ์๋ ค์ฃผ์ธ์."
Collect: skill_id, description, workflow steps, tools_needed
-
Elective Skills (optional)
"์ ํ์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋ skill์ด ์๋์? ์์ผ๋ฉด ์คํต."
Phase 4: Knowledge (optional)
-
Glossary
"๋๋ฉ์ธ ์ฉ์ด ์ ๋ฆฌ๊ฐ ํ์ํ๊ฐ์? ์์ผ๋ฉด ์ฉ์ด: ์ ์ ํํ๋ก ์๋ ค์ฃผ์ธ์. ์์ผ๋ฉด ์คํต."
-
Decision Trees (optional)
"์์ด์ ํธ๊ฐ ๋ฐ๋ฅผ ์์ฌ๊ฒฐ์ ํธ๋ฆฌ๊ฐ ์๋์? ์์ผ๋ฉด ์คํต."
Phase 5: Testing
-
Test Scenarios (1-2๊ฐ)
"์์ด์ ํธ๋ฅผ ํ
์คํธํ ํ๋กฌํํธ ์์๋ฅผ 1-2๊ฐ ์ฃผ์ธ์."
Collect: name, prompt, expect
Phase 6: Confirmation & Generation
- Show the user a summary of collected answers.
- Ask: "์ด๋๋ก ๋ถํธ์บ ํ๋ฅผ ์์ฑํ ๊น์?"
- If confirmed, proceed to generation.
Generation
After interview is complete:
- Write the collected data as
domain-spec.yaml:
domain:
id: "{domain_id}"
name: "{domain_name}"
identity:
role_template: "{role_description}"
core_values:
- "{value_1}"
- "{value_2}"
boundaries:
- "{boundary_1}"
- "{boundary_2}"
curriculum:
core:
- skill_id: "{skill_id}"
source: "generate"
spec:
description: "{description}"
workflow:
- "{step_1}"
- "{step_2}"
tools_needed: ["{tool_1}"]
knowledge:
glossary:
"{term}": "{definition}"
test_scenarios:
- name: "{test_name}"
prompt: "{test_prompt}"
expect: "{test_expect}"
- Run campforge CLI:
campforge create --from domain-spec.yaml --persona {persona} --language {language} --output campforge-{domain_id}
If campforge is not in PATH, use:
npx tsx {campforge_cli_path}/bin/campforge.ts create --from domain-spec.yaml --persona {persona} --language {language}
-
After scaffold creation, offer to fill in the generated SKILL.md placeholders:
"์ค์บํด๋๊ฐ ์์ฑ๋์์ต๋๋ค. ์์ฑ๋ SKILL.md ํ์ผ๋ค์ ์ฑ์๋๋ฆด๊น์?"
-
If yes, read each skills/*/SKILL.md that contains "TODO" and rewrite with proper content based on the interview answers.
Rules
- Ask one question group at a time, not all at once
- Accept free-form answers and structure them yourself
- If the user says "์คํต" or "skip", use sensible defaults or omit the section
- Infer
skill_id from the description if user doesn't provide one (lowercase, kebab-case)
- Infer
tools_needed from workflow steps if obvious (e.g. "kubectl" if workflow mentions k8s)
- Keep the conversation concise โ don't repeat back everything, just confirm and move on
- The interview should take 3-5 minutes, not 15