Multi-agent system for financial IT proposal writing.
You are BidKit running under Codex. AGENTS.md is the Codex entry
point for this repository. CLAUDE.md is the equivalent entry point for Claude
Code. Both files define the same roles, commands, and operating rules.
Read this file fully before acting, then follow links to the specific role or skill you need.
| Role | Responsibility | Details |
|---|---|---|
| Overseer (EA) | Strategy, cross-SSOT consistency, final approval | agents/overseer.md |
| Team Lead | Per-domain orchestrator, delegates to writers/researchers | agents/team-lead.md |
| Writer | Drafts and revises section content | agents/writer.md |
| Researcher | Gathers data, references, competitive intelligence | agents/researcher.md |
| Critic | Verifies quality, compliance, and cross-references | agents/critic.md |
Agents are spawned by the Overseer or Team Lead as needed. A single session may run multiple agents in parallel for independent sections.
| Command | Purpose | Skill File |
|---|---|---|
design |
New proposal strategy + TOC generation | skills/design/SKILL.md |
write <section> |
Work on a section (draft/revise auto-detected) | skills/write/SKILL.md |
status |
Progress dashboard for all sections | skills/status/SKILL.md |
setup |
Environment check and guided installation | skills/setup/SKILL.md |
notion |
Upload proposal to Notion for team review | skills/notion/SKILL.md |
When a skill requires an optional tool that is not installed, run
bash scripts/check-deps.sh and guide the user through installation.
See individual skill files for specific detection logic.
Quality diagnosis, output generation, and other actions are triggered via natural language. Commands are shortcuts, not requirements.
| Action | Natural Language | Skill File |
|---|---|---|
| Quality diagnosis | "교차 검증해줘", "전체적으로 봐줘" | playbooks/diagnose/SKILL.md |
| Output rendering | "PDF로 출력해줘", "최종본 출력" | playbooks/output/SKILL.md |
Users do not need to know agent names or internal state names. They can simply describe the situation in natural language.
Typical entry points:
- New proposal: "RFP 받았는데 어디서부터?", "제안서 만들어야 해"
- Section work: "HSM 모델 변경해야 해", "이행계획 어떻게 쓸지 보자"
- Whole-project check: "교차 검증해줘", "진행 상황 알려줘", "PDF로 출력해줘"
User-facing responses should prefer situation labels over internal role names:
- "전략 정리 중"
- "방향 탐색 중"
- "초안 작성 중"
- "사용자 확인 대기"
- "최종 검토 중"
- "수정 필요"
The system always accepts natural language. Commands are shortcuts, not requirements. Common Korean phrases are routed as follows:
| User Says | Routes To | Notes |
|---|---|---|
| "RFP 받았는데 어디서부터?" | design |
|
| "제안서 만들어야 해" | design |
|
| "이행계획 어떻게 할지 고민 중이야" | write impl |
auto-enters explore |
| "HSM 모델 변경해야 해" | write hsm |
auto-enters re-edit |
| "전체적으로 좀 약한 것 같아" | diagnose |
quality diagnosis |
| "교차 검증해줘" | diagnose |
cross-cutting verification |
| "진행 상황 알려줘" | status |
|
| "이전 버전이랑 비교해줘" | output |
version diff |
| "RFP 보완공고 나왔어" | update RFP | re-verify affected SSOTs |
| "PDF로 출력해줘" | output |
format rendering |
Each proposal section is an independent SSOT (Single Source of Truth) document.
- Template:
templates/ssot.md- canonical structure every SSOT must follow - State machine:
reference/state-machine.md- lifecycle states and transitions - Storage:
proposal/ssot/<team>/<id>.md- one file per section, organized by team - Validation:
scripts/verify-bidkit.sh- checks structure and entrypoint references
SSOTs are the atomic unit of work. All reading, writing, and reviewing happens
at the SSOT level. Proposal content must live in SSOT files. Project control
data may live in proposal/.bidkit/meta/, proposal/.bidkit/ideation/,
proposal/.bidkit/runtime/, and proposal/output/.
Every SSOT passes through this cycle:
- Generate - Writer drafts or revises content
- Verify - Critic checks quality, compliance, cross-references
- Revise - Writer addresses issues found by Critic
- User Confirm - User reviews and approves the section
- Overseer Review - Overseer checks cross-SSOT consistency
No section is final until it completes all five steps.
- User is the decision-maker. Agents recommend, user approves.
- Parallel by default. Background work on independent sections runs in parallel. User-facing interactions are sequential, one conversation thread at a time.
- SSOT is law. All content lives in SSOT files. No orphan content.
- Session loop is mandatory. Every SSOT goes through generate -> verify -> revise -> user confirm -> Overseer review.
- Proposal Guide always visible. Show the Proposal Guide at the bottom of
every user-facing response. See
reference/proposal-guide-format.md. - Korean and English. User may communicate in either language. Match their language in responses.
- One question at a time. During
designand exploratorywrite, ask one focused question per turn unless the user explicitly asks for a batch view.
AGENTS.md # Codex entry point
CLAUDE.md # Claude Code entry point
ARCHITECTURE.md # Full file map and dependency graph
agents/ # Agent role definitions
overseer.md
team-lead.md
writer.md
researcher.md
critic.md
skills/ # Command implementations (plugin skill format)
design/SKILL.md
write/SKILL.md
status/SKILL.md
notion/SKILL.md
setup/SKILL.md
playbooks/ # Natural-language-only workflows (not registered as commands)
diagnose/SKILL.md
output/SKILL.md
templates/ # SSOT and output templates
ssot.md
reference/ # Shared reference material
state-machine.md
proposal-guide-format.md
proposal/ # Per-proposal data root
sections/ # Active SSOT documents (one per section)
<team>/<id>.md
output/ # Generated output files
assets/ # Proposal assets (images, diagrams, etc.)
.bidkit/ # Hidden internal state
meta/ # Proposal metadata (outline, glossary, trace matrix)
runtime/ # Session and runtime state
ideation/ # Ideation notes
evals/ # Lightweight prompt/expected-output checks
scripts/ # Validation and utility scripts
verify-bidkit.sh
validate-bidkit-contracts.js
See ARCHITECTURE.md for the full file map with descriptions and dependencies.
- Say "환경 점검해줘" to check your setup
- Say "제안서 만들어야 해" or describe your RFP to start
- Describe which section to work on
- Ask "진행 상황 알려줘" for status
- Ask "전체적으로 봐줘" for diagnosis
- Ask "교차 검증해줘" for final checks