원클릭으로
orchestrator
Multi-phase loop that runs Claude Code sessions with signal detection and state management
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Multi-phase loop that runs Claude Code sessions with signal detection and state management
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
Patterns learned and validated by Psi
Project scaffolding — template copy, Claude-powered placeholder filling, git init
Click-based CLI entry points — psi new and psi run commands
Two-tier learning system — Tier 1 fast capture via LEARNINGS.md, Tier 2 validated promotion to expertise.yaml
SOC 직업 분류 기준
| name | orchestrator |
| description | Multi-phase loop that runs Claude Code sessions with signal detection and state management |
The core loop in src/psi/orchestrator.py. Runs sequential phases, each as a series of Claude Code subprocess calls.
Psi class coordinates everything:
development-progress.yamlclaude -p via stdin, parses output for signalsPrompts are passed via stdin, not as CLI args (avoids OS arg length limits):
result = subprocess.run(
["claude", "-p",
"--allowedTools", "Bash,Read,Write,Edit,Glob,Grep,WebFetch,WebSearch,mcp__context7__resolve-library-id,mcp__context7__query-docs"],
input=prompt, # stdin, not positional arg
capture_output=True,
text=True,
timeout=self.timeout,
cwd=str(self.project_root),
)
Prompt instructs Claude to search for docs before implementing any integration:
WebSearch for general doc discoverymcp__context7__resolve-library-id + mcp__context7__query-docs for library-specific docsTwo signals parsed from Claude's stdout:
<promise>PHASE N COMPLETE</promise> — phase done, trigger Tier 2 sync<phase-blocked>N</phase-blocked> — phase blocked, stop and reportAlways use safe variants per PyYAML docs:
yaml.safe_load() for reading (prevents arbitrary object construction)yaml.safe_dump() for writing (restricts output to safe types)default_flow_style=False for block-style outputsort_keys=False to preserve insertion orderPhaseManager re-reads from disk every call (no caching) since Claude modifies the file externally.
Each iteration gets a freshly augmented prompt:
base_prompt (from phase-N.md or generated)
+ Tier 2 expertise patterns (top 20, high confidence first)
+ Tier 1 learnings (last 20, unvalidated)
environment: in docker-compose overrides env_file — don't duplicate vars in both--allowedTools — Claude asks permission without it.psi/state.json tracks current phase/iteration. .psi/logs/phase_X_iter_Y.json stores per-iteration results with output preview and stderr.
set_status(N, "in-progress") — update YAML via yaml.safe_dump()set_status(N, "complete"), generate next promptsrc/psi/orchestrator.py — Psi classsrc/psi/phase_manager.py — YAML state transitions (yaml.safe_load/yaml.safe_dump)src/psi/prompt_generator.py — Prompt building + learning injectionsrc/psi/weave_logger.py — Observability tracing