بنقرة واحدة
scaffold
Project scaffolding — template copy, Claude-powered placeholder filling, git init
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Project scaffolding — template copy, Claude-powered placeholder filling, git init
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Patterns learned and validated by Psi
Multi-phase loop that runs Claude Code sessions with signal detection and state management
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 | scaffold |
| description | Project scaffolding — template copy, Claude-powered placeholder filling, git init |
psi new copies bundled templates and uses Claude to fill {{PLACEHOLDER}} values. Implemented in src/psi/scaffold.py.
The scaffold flow:
src/psi/template/ tree into target directory{{PLACEHOLDER}} patternsclaude -p (via stdin) to fill every placeholder — output as JSONprompts/phase-1.md from filled development-progress.yamlgit init + initial commitTemplates are bundled in the package at src/psi/template/. Located at runtime via importlib.resources (Python 3.9+ API):
from importlib import resources as importlib_resources
ref = importlib_resources.files("psi") / "template"
For editable installs, this resolves to the real filesystem path. The importlib.resources.files() API is the modern replacement for the deprecated pkg_resources.
All templates use {{UPPERCASE_WITH_UNDERSCORES}} syntax. The scaffold collects all files containing {{...}} patterns, excluding:
skills/create-skill/ directory (its placeholders are instructional, not project-specific)Single prompt, single call. The prompt includes all template file contents and asks Claude to return a JSON object: {"file/path.md": "filled content", ...}.
Claude's response is parsed with json.loads(). If Claude wraps output in markdown code fences, those are stripped first.
| File | Key Placeholders |
|---|---|
CLAUDE.md | APP_DESCRIPTION_ONE_LINE, TECH_STACK_LIST, COMMANDS, SKILLS_LIST, ENV_VARS |
TASKS.md | APP_NAME, task items |
docs/PRD.md | APP_NAME, user stories, acceptance criteria, tech stack, data schema |
docs/design.md | Wireframes, component hierarchy, colors, responsive behavior |
docs/development-progress.yaml | Phase definitions with integer keys (1, 2, 3...) |
prompts/phase-1.md | Phase 1 deliverables and criteria (regenerated from YAML after fill) |
After Claude fills the templates, scaffold.py reads the filled development-progress.yaml, extracts phase 1's definition, and uses PromptGenerator.generate() to create prompts/phase-1.md. This ensures the prompt matches the actual phase definition.
```json ``` wrappingpyproject.toml sets include-package-data = true for git-tracked files[tool.setuptools.package-data] has explicit globs for the .claude/ dot-directory tree since **/* doesn't reliably traverse dot-directories in setuptoolstemplate/.claude/**, template/.claude/hooks/*, template/.claude/skills/**/*src/psi/scaffold.py — Main scaffold logicsrc/psi/template/ — Bundled template treesrc/psi/prompt_generator.py — Phase-1 prompt generationpyproject.toml — Package data configuration