Before starting, the user needs:
Ask the user for:
Also ask what they want to name their project (used for Triad tenant/project naming).
Before registration, you can verify the invite code is valid:
POST https://orc.aoendpoint.com/api/validate-invite
Content-Type: application/json
{
"code": "THE_INVITE_CODE",
"email": "user@example.com"
}
Success: 200 { "data": { "valid": true } }
Errors:
404 INVALID_INVITE — code not found or email mismatch
410 INVITE_ALREADY_USED — code already redeemed
410 INVITE_EXPIRED — code past expiration
POST https://orc.aoendpoint.com/api/register
Content-Type: application/json
{
"invite_code": "THE_INVITE_CODE",
"email": "user@example.com",
"username": "chosen-username",
"password": "SecureP@ssw0rd!"
}
Success: 201
{
"data": {
"id": "uuid",
"email": "user@example.com",
"username": "chosen-username",
"status": "active",
"created_at": "2026-02-26T00:00:00Z"
},
"provisioning": {
"akl": {
"tenant_slug": "chosen-username",
"api_key": "SHOWN_ONCE_SAVE_NOW",
"api_key_prefix": "abcd1234",
"project_slug": "default",
"status": "success"
},
"doit": { ... same structure ... },
"herald": { ... same structure ... }
}
}
Errors:
400 INVALID_INVITE — code not found or email mismatch
400 INVALID_EMAIL — bad email format
400 INVALID_USERNAME — bad username format
400 WEAK_PASSWORD — password policy not met
409 USERNAME_TAKEN — username already exists
409 EMAIL_TAKEN — email already registered
410 INVITE_ALREADY_USED — code already redeemed
410 INVITE_EXPIRED — code past expiration
IMPORTANT: The API keys in the provisioning response are shown exactly once and cannot be retrieved again. Present them to the user immediately and warn them to save the keys.
Display something like:
Your accounts have been created. Here are your API keys — save them now, they will not be shown again:
AKL: [key]
Doit: [key]
Herald: [key]
Fetch the scaffolding templates:
GET https://orc.aoendpoint.com/api/scaffolding
This returns a JSON object with file paths and template contents. For each file:
{{PROJECT_NAME}} — the user's project name{{PROJECT_KEY}} — the user's project key (slug form of project name){{AKL_URL}} — https://ama.aoendpoint.com{{DOIT_URL}} — https://din.aoendpoint.com{{HERALD_URL}} — https://herald.aoendpoint.com{{AKL_API_KEY}} — the AKL API key from registration{{DOIT_API_KEY}} — the Doit API key from registration{{HERALD_API_KEY}} — the Herald API key from registrationThis delivers 22 files total:
CLAUDE.md — Governance instructions (principles, Triad, phases, gates, risk levels).orchestra/config.yaml — Triad configuration with API keys and governance settings.mcp.json — MCP server connection configuration for Claude Code.claude/commands/ — 11 orchestration command files (orc-orchestrate, orc-create-epic, orc-backlog, etc.).claude/agents/ — 9 agent definition files (architecture, code-generation, review, verification, etc.)Add the Triad MCP servers to the project's .mcp.json file:
{
"mcpServers": {
"akl": {
"type": "url",
"url": "https://ama.aoendpoint.com/mcp",
"headers": { "Authorization": "Bearer {{AKL_API_KEY}}" }
},
"doit": {
"type": "url",
"url": "https://din.aoendpoint.com/mcp",
"headers": { "Authorization": "Bearer {{DOIT_API_KEY}}" }
},
"herald": {
"type": "url",
"url": "https://herald.aoendpoint.com/mcp",
"headers": { "Authorization": "Bearer {{HERALD_API_KEY}}" }
}
}
}
Replace {{...}} placeholders with the actual API keys from Step 4.
After setup, verify everything works by running these checks:
akl_overview() — expect a response with tenant data (not an auth error)doit_list_projects() — expect the user's "default" project to appearherald_agents() — expect no auth error.orchestra/config.yaml exists with correct API keysCLAUDE.md exists with orchestration instructionsIf all checks pass, setup is complete. Suggest the user run /orc-backlog to see the system working.
| Error | Cause | Resolution |
|---|---|---|
| INVALID_INVITE | Code not found or email doesn't match | Double-check the invite code and use the exact email it was issued to |
| INVITE_EXPIRED | Code past its expiration date | Contact administrator for a new invite code |
| INVITE_ALREADY_USED | Code was already redeemed | Each code is single-use. Contact administrator for a new one |
| USERNAME_TAKEN | Username already registered | Choose a different username |
| EMAIL_TAKEN | Email already registered | Use a different email or contact administrator |
| WEAK_PASSWORD | Password doesn't meet policy | Use 12+ chars with uppercase, lowercase, digit, and special character |
| Provisioning failed | One or more Triad services unreachable | Account was created. Contact administrator to manually provision failed services |
| MCP auth error after setup | API key not configured correctly | Check .mcp.json has the correct keys. Keys are case-sensitive. |