Who reads this: The agent or human starting a new project, or taking over an existing one. When: Before any crons are created, before any code is touched. Output: A fully wired project where all agents know what to do, where to go, and who to talk to.
Before touching anything, collect all of these. Do not proceed until every item is resolved.
| Input | What it is | How to get it |
|---|---|---|
| Project name | Human-readable name | User provides |
| Asana project GID | The PM tool project identifier | Create project in Asana web UI → URL contains the GID, OR user provides existing |
| GitHub org + repo URL | Where the code lives | Create repo in GitHub OR user provides existing |
| Local checkout path | Where on this machine the repo lives | User specifies (e.g. ~/code/myproject) |
| 4-checkout layout | monorepo, requirements, dev, site — see below | Derive from local path |
| LiteLLM proxy URL | Where all models route through | From ~/.hermes/config.yaml or user specifies |
| Slack workspace + channels | Where agents deliver alerts | User creates channels or provides IDs — see Step 3 |
| Site publish path/URL | Where docs and marketing site live | User specifies (GitHub Pages, Synology, custom) |
| Apple Team ID | If shipping iOS/macOS apps | From Apple Developer Portal |
| ASC app IDs | If shipping to TestFlight | From App Store Connect — must be created manually in web UI |
Every PiyushBuildOS project uses 4 isolated checkouts to prevent context pollution:
# 1. Main monorepo (Build Manager works here via worktrees)
git clone <repo-url> ~/code/<project>
# 2. Requirements branch (Requirements agent works here)
git clone <repo-url> ~/code/<project>-requirements
cd ~/code/<project>-requirements && git checkout -b requirements && git push -u origin requirements
# 3. Dev/interactive branch (Process Coordinator one-offs)
git clone <repo-url> ~/code/<project>-dev
cd ~/code/<project>-dev && git checkout -b dev && git push -u origin dev
# 4. Site repo (separate repo for docs/marketing)
git clone <site-repo-url> ~/code/<project>-siteStay in your lane:
- Build Manager →
~/code/<project>(main, via worktrees at/tmp/<project>-build-{slug}) - Requirements agent →
~/code/<project>-requirements(requirements branch) - Process Coordinator → reads any, writes only via pipeline
- Site agent →
~/code/<project>-site
Minimum 3 Slack channels (or equivalent):
| Channel | Purpose | Who delivers |
|---|---|---|
#<project>-build |
Autonomous build alerts (RTB pickups, shipped, failed) | Build Manager cron |
#<project>-buildprocess |
Interactive oversight — Piyush's interface | Process Coordinator |
#<project>-requirements |
Requirements agent updates (delta-only) | Requirements cron |
#<project>-drift |
Daily drift audit results | Drift Audit cron |
Record channel IDs (not names) — Slack API uses IDs. Get them from channel settings.
Copy the role templates from PiyushBuildOS/roles/ into your project's requirements branch:
cd ~/code/<project>-requirements
mkdir -p docs/agent-context
cp ~/code/PiyushBuildOS/roles/*.md docs/agent-context/
cp ~/code/PiyushBuildOS/roles/requirements-agent-state.json docs/agent-context/Then fill in project-specific values in each file. At minimum, update SHARED-CONTEXT.md with:
- Project name, owner, GitHub org
- Asana project GID
- Slack channel IDs
- Repo layout (4 paths)
- LiteLLM proxy URL
- Site URL
- Asana tag GIDs (see Step 5)
The pipeline depends on specific status tags. Create them in your Asana project:
Required status tags:
status-ready-to-planstatus-ready-to-buildstatus-in-progressstatus-ready-for-qastatus-qa-passedstatus-docs-pendingstatus-docs-donestatus-shippedstatus-releasedstatus-blocked
Required phase tags:
phase-v1(or your equivalent milestone)phase-v2
Agent tags:
agent-claude,agent-codex,agent-hermes,agent-opencode
Record all tag GIDs and add them to SHARED-CONTEXT.md. Store in /tmp/<project>_asana_meta.json for runtime access.
Run the model verification checklist before creating any crons.
See models/MODEL_VERIFICATION.md for the full procedure.
Minimum: primary model responds, at least one fallback is confirmed reachable.
See CRON_SETUP.md for exact prompts and schedules.
Required crons (in creation order):
- Requirements agent (every 20m)
- Build Manager (every 10m)
- Drift Audit (daily)
Optional but recommended: 4. Dashboard generator (every 10m) 5. Status page (every 30m)
Create one test task in Asana, tag it status-ready-to-plan, and verify:
- Requirements agent picks it up and creates a feature branch
- Build Manager sees the
status-ready-to-buildtag - Slack alerts land in the correct channels
- COORDINATION.md gets an entry
If any step fails, check CRON_SETUP.md § Verification.
If the user provides a repo URL or Asana project that already has content:
# Audit git state
git clone <repo-url> ~/code/<project>
cd ~/code/<project>
git log --oneline -20 # Recent history
git branch -r # All branches
git tag --sort=-version:refname | head -10 # ReleasesQuestions to answer before proceeding:
- What is the current MARKETING_VERSION / version string?
- What is the last published release (GitHub releases, DMG, TestFlight)?
- What branches exist? Are any feature branches abandoned mid-build?
- What is the build toolchain? (Swift/Xcode, Node, Python, etc.)
- Are there existing CI/CD pipelines (GitHub Actions, etc.)? Will they conflict with agents?
# Enumerate all tasks and their current status tags
# Use Asana API: GET /projects/<GID>/tasks?opt_fields=name,tagsMap existing task states to the PiyushBuildOS tag model:
- What's done vs what's in flight vs what's planned?
- Are there any
status-in-progresstasks with no active owner (stale)? - Does git state match Asana state (S-S-D check)?
Write a BASELINE.md in the repo root:
- Current version
- What's already shipped
- What was in progress when the agent took over
- Known issues inherited from previous development
- Any deviations from PiyushBuildOS process to be aware of
| Check | How |
|---|---|
Asana status-released tasks → verify they're in the latest release artifact |
Compare task names against release notes / changelog |
status-shipped tasks → verify they're in git main |
git log --oneline search |
| Git main features → verify they have Asana tasks | Browse recent commits |
| Published artifacts → verify they match git tags | gh release list vs git tag |
Anything mismatched gets flagged in BASELINE.md and corrected before agents start.
Once baseline is clean, proceed: initialize context files, verify model access, create crons.
□ All inputs gathered (Asana GID, GitHub URL, local paths, Slack channels, site URL)
□ 4-checkout layout initialized
□ Slack channels created and IDs recorded
□ Agent context files initialized from PiyushBuildOS/roles/ templates
□ SHARED-CONTEXT.md filled in with project-specific values
□ Asana tags created and GIDs recorded in SHARED-CONTEXT.md
□ Model access verified (see MODEL_VERIFICATION.md)
□ Cron jobs created (see CRON_SETUP.md)
□ End-to-end test task passed
□ [Takeover only] BASELINE.md written, S-S-D model reconciled