بنقرة واحدة
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 ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
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
| 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