{
  "service": "@otto/api-server",
  "defaultTenantId": "family-office-cos-demo",
  "auth": {
    "required": true,
    "loginPath": "/login"
  },
  "appPath": "/app",
  "routes": [
    {
      "method": "GET",
      "path": "/",
      "description": "Route manifest and server metadata."
    },
    {
      "method": "GET",
      "path": "/health",
      "description": "Basic liveness probe."
    },
    {
      "method": "GET",
      "path": "/login",
      "description": "Operator login page."
    },
    {
      "method": "GET",
      "path": "/app",
      "description": "Primary operator app entrypoint."
    },
    {
      "method": "GET",
      "path": "/builder",
      "description": "Primary builder app entrypoint."
    },
    {
      "method": "GET",
      "path": "/builder/runtimes",
      "description": "Builder runtime catalog."
    },
    {
      "method": "GET",
      "path": "/builder/templates",
      "description": "Builder template catalog."
    },
    {
      "method": "GET",
      "path": "/builder/skills",
      "description": "Curated builder skill catalog."
    },
    {
      "method": "GET",
      "path": "/builder/templates/:templateId/seed",
      "description": "Full template+instance seed for forking."
    },
    {
      "method": "GET",
      "path": "/builder/templates/:templateId/skills",
      "description": "Curated builder skills relevant to one template."
    },
    {
      "method": "GET",
      "path": "/builder/tenants",
      "description": "Builder tenant directory, including drafts."
    },
    {
      "method": "GET",
      "path": "/builder/templates/:templateId",
      "description": "Builder template detail."
    },
    {
      "method": "GET",
      "path": "/builder/skills/:skillId",
      "description": "Curated builder skill detail."
    },
    {
      "method": "GET",
      "path": "/builder/skill-library/groups",
      "description": "List skill library groups (e.g., Engineering Team, Product Strategy)."
    },
    {
      "method": "GET",
      "path": "/builder/skill-library/groups/:groupId",
      "description": "List skills in a library group."
    },
    {
      "method": "GET",
      "path": "/builder/skill-library/skills/:skillId",
      "description": "Fetch a single curated skill with full markdown."
    },
    {
      "method": "GET",
      "path": "/builder/skill-library/categories/:category",
      "description": "List skills by category."
    },
    {
      "method": "GET",
      "path": "/builder/skill-wizard/patterns",
      "description": "List available workflow pattern templates for the skill wizard."
    },
    {
      "method": "POST",
      "path": "/builder/skill-wizard/generate",
      "description": "Generate skill markdown from wizard configuration."
    },
    {
      "method": "POST",
      "path": "/builder/tenants",
      "description": "Create a draft builder tenant from a template."
    },
    {
      "method": "DELETE",
      "path": "/builder/tenants/:tenantId",
      "description": "Delete an agent and all its data (platform admin only)."
    },
    {
      "method": "GET",
      "path": "/builder/tenants/:tenantId/setup",
      "description": "Draft builder setup snapshot."
    },
    {
      "method": "POST",
      "path": "/builder/tenants/:tenantId/setup",
      "description": "Save builder draft setup without deploying."
    },
    {
      "method": "GET",
      "path": "/builder/tenants/:tenantId/brain",
      "description": "Builder Brain snapshot for one tenant."
    },
    {
      "method": "GET",
      "path": "/builder/tenants/:tenantId/brain/search",
      "description": "Builder Brain search results for one tenant."
    },
    {
      "method": "POST",
      "path": "/builder/tenants/:tenantId/context/sources",
      "description": "Ingest source material into the tenant Brain from the builder flow."
    },
    {
      "method": "POST",
      "path": "/builder/tenants/:tenantId/context/upload",
      "description": "Upload a file (PDF, DOCX, TXT, MD) and ingest into the tenant Brain."
    },
    {
      "method": "POST",
      "path": "/builder/tenants/:tenantId/context/fetch-url",
      "description": "Fetch a URL, extract readable content, and ingest into the tenant Brain."
    },
    {
      "method": "POST",
      "path": "/builder/tenants/:tenantId/context/fetch-url/preview",
      "description": "Fetch a URL and preview extracted content without ingesting."
    },
    {
      "method": "POST",
      "path": "/builder/tenants/:tenantId/sandbox/session",
      "description": "Create a builder sandbox session."
    },
    {
      "method": "GET",
      "path": "/builder/tenants/:tenantId/sandbox/transcript",
      "description": "Read a builder sandbox transcript."
    },
    {
      "method": "POST",
      "path": "/builder/tenants/:tenantId/sandbox/message",
      "description": "Send a builder sandbox message."
    },
    {
      "method": "POST",
      "path": "/builder/tenants/:tenantId/deploy",
      "description": "Deploy the saved builder draft."
    },
    {
      "method": "GET",
      "path": "/builder/tenants/:tenantId/deploy/status",
      "description": "Builder deployment status."
    },
    {
      "method": "GET",
      "path": "/builder/tenants/:tenantId/skills",
      "description": "List custom skills for one tenant."
    },
    {
      "method": "POST",
      "path": "/builder/tenants/:tenantId/skills",
      "description": "Create a custom skill for one tenant."
    },
    {
      "method": "PUT",
      "path": "/builder/tenants/:tenantId/skills/:skillId",
      "description": "Update a custom skill for one tenant."
    },
    {
      "method": "DELETE",
      "path": "/builder/tenants/:tenantId/skills/:skillId",
      "description": "Delete a custom skill for one tenant."
    },
    {
      "method": "POST",
      "path": "/builder/tenants/:tenantId/deploy/validate",
      "description": "Preflight validation dry-run without deploying."
    },
    {
      "method": "GET",
      "path": "/builder/tenants/:tenantId/workspace/export",
      "description": "Export compiled workspace files for one tenant."
    },
    {
      "method": "GET",
      "path": "/tenants",
      "description": "Authenticated tenant directory."
    },
    {
      "method": "GET",
      "path": "/auth/session",
      "description": "Current operator session state."
    },
    {
      "method": "POST",
      "path": "/auth/login",
      "description": "Create an operator session."
    },
    {
      "method": "POST",
      "path": "/auth/logout",
      "description": "Destroy the current operator session."
    },
    {
      "method": "POST",
      "path": "/bootstrap",
      "description": "Seed the demo tenant and build artifacts."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/app",
      "description": "Authenticated operator app for one tenant."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/setup",
      "description": "Setup studio data for one tenant."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/setup",
      "description": "Save tenant setup and redeploy."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/models/:modelId/ping",
      "description": "Ping a configured model to verify connectivity."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/sandbox/complete",
      "description": "Run a freeform prompt against a configured model slot."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/brain",
      "description": "Brain snapshot for one tenant."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/brain/sources",
      "description": "Ingest a source into the tenant Brain."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/brain/search",
      "description": "Search tenant Brain pages and records."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/brain/proposals/:proposalId/approve",
      "description": "Approve a Brain thesis proposal."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/brain/proposals/:proposalId/reject",
      "description": "Reject a Brain thesis proposal."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/workspace/export",
      "description": "Export compiled workspace files for one tenant."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/runtime",
      "description": "Current runtime snapshot."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/runtime/pause",
      "description": "Pause the active deployment."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/runtime/resume",
      "description": "Resume the active deployment."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/runtime/restart",
      "description": "Restart the active deployment."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/runtime/rollback",
      "description": "Rollback to a prior healthy deployment."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/dashboard",
      "description": "Dashboard snapshot JSON."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/dashboard.html",
      "description": "Rendered operator dashboard HTML."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/approvals",
      "description": "Pending approvals and recent decisions."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/approvals/:approvalId/approve",
      "description": "Approve a pending request."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/approvals/:approvalId/reject",
      "description": "Reject a pending request."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/activity/events",
      "description": "Persisted activity events."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/activity/transcripts",
      "description": "Persisted transcript entries."
    },
    {
      "method": "GET",
      "path": "/tenants/:tenantId/activity/notifications",
      "description": "Operator notifications."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/conversations/:conversationId/reply",
      "description": "Persist an operator reply for one conversation."
    },
    {
      "method": "POST",
      "path": "/tenants/:tenantId/channels/telegram/webhook",
      "description": "Telegram webhook ingest endpoint."
    },
    {
      "method": "POST",
      "path": "/local-runner/pair-start",
      "description": "Operator requests a pairing code for a local Codex runner."
    },
    {
      "method": "POST",
      "path": "/local-runner/pair",
      "description": "Local runner redeems a pairing code for a runner token."
    },
    {
      "method": "POST",
      "path": "/local-runner/heartbeat",
      "description": "Local runner heartbeats with a fingerprint."
    },
    {
      "method": "POST",
      "path": "/local-runner/unpair",
      "description": "Local runner requests unpair from the server."
    },
    {
      "method": "GET",
      "path": "/local-runner/work",
      "description": "Local runner long-polls for queued Codex jobs."
    },
    {
      "method": "POST",
      "path": "/local-runner/work/:jobId/result",
      "description": "Local runner submits a Codex job result."
    },
    {
      "method": "GET",
      "path": "/local-runner/status",
      "description": "Operator lists paired local runners and their online state."
    }
  ]
}
