The instrument manual
Every REST endpoint, MCP tool, and env var atlas exposes — rendered live from GET /api/v1/help. The API describes itself; this page can never drift from it.
“atlas is the catalogue. Query me before walking the filesystem.”
Read AGENTS.md (3k tokens), then call atlas.repos.list. To orient on a specific repo call atlas.repo.brief — one response, fully oriented. Filesystem walk is a fallback, not a default.
agent guide · AGENTS.md
REST endpoints
help1
- GET
/api/v1/helpThis index.
stats1
- GET
/api/v1/statsCounts + ecosystem reachability.
repos22
- GET
/api/v1/repos/{name}/activityPer-repo activity feed (last 90d, 200 cap).
- GET
/api/v1/repos/{name}/grade-trendPer-axis grade history from grade_history (newest first; ?axis=, ?limit=). Powers the axis sparklines on the repo detail page.
- GET
/api/v1/repos/{name}/driftPer-repo actionable drift surface from drift_events — same shape as /api/v1/drift/open but scoped to one repo.
- GET
/api/v1/reposAll repos with manifest + drift + health.
- GET
/api/v1/repos/{name}Single repo, same shape.
- GET
/api/v1/repos/{name}/featuresEvery @feature in repo.
- GET
/api/v1/repos/{name}/goalsManifest goals with computed progress% (done=100, others by @feature token-overlap heuristic).
- GET
/api/v1/repos/{name}/ciLatest GitHub Actions run on the default branch + 20-deep history. Drives the green/red chip on /repos.
- GET
/api/v1/repos/{name}/runtime-depsDeclared edges with resolved target_repo_id.
- GET
/api/v1/repos/{name}/loc-statsPer-language LOC breakdown for the repo (code / comments / blanks / files, sorted by code DESC).
- GET
/api/v1/repos/{name}/wiki.mdPaste-able markdown wiki for the repo.
- GET
/api/v1/repos/{name}/briefOne-call orientation digest: kind, grade, weakest axes, key deps, consumers, entry symbols, top features, recent activity.
- GET
/api/v1/repos/{name}/hotspotsRepo-level hotspot: churn × debt score for the repo (90d commit volume × inverted code_health). Honest limitation: repo-granularity only — file-level churn is not collected by the ingestor.
- GET
/api/v1/repos/{name}/symbolsEvery indexed symbol in one repo. Monorepo: scope to a crate via ?crate=<name> (matched on the crates/<name>/ path), else the alphabetically-first crate eats the page. Paginate via ?limit= (default 500, max 20000) + ?offset= over a stable order. Also ?file=<exact path>.
- GET
/api/v1/repos/{name}/impactBlast radius — reverse-dependency walk for a module/symbol in the repo.
- GET
/api/v1/repos/{name}/file-graphIntra-repo file/module import graph (nodes=files, edges=imports). Caps 500/2000, sorted by in-degree.
- GET
/api/v1/repos/{name}/affectedSymbols/files affected by a change to a given symbol — change-impact set.
- GET
/api/v1/repos/{name}/preflightPre-change orientation for a repo: shape, grade, weakest axes, key deps + consumers.
- GET
/api/v1/repos/{name}/gradesPer-repo quality grade breakdown (per-axis score + reasons).
- GET
/api/v1/repos/{name}/planning-driftPer-repo planning-vs-code drift in the 4-bucket view (goals↔features).
- GET
/api/v1/repos/{name}/duplicationPer-repo duplication clusters.
- GET
/api/v1/repos/{name}/dataflowLayered data-flow view of a repo (ingress→coalesce→prompt→LLM→reply→delivery→stores) with dead/skip/back anomalies + dup overlay.
features2
- GET
/api/v1/featuresGlobal feature search (q / repo / category / status). UNIONs agent-written features (source:"agent") with scanner-derived ones.
- POST
/api/v1/featuresAgent registers a feature {repo,name,description?,category?,status?,since?} into agent_features (survives the scan). Agent key + write-scope on repo required; authored_by stamped from the key. Surfaces in /features tagged source:"agent".
goals2
- GET
/api/v1/goalsOrg-wide goals view. Filters: status / priority / repo (comma-sep). Sort: status|progress|priority|repo|since. Pagination: per_page / offset.
- POST
/api/v1/goalsAgent registers a progress-goal {category,title,description?,status?,priority?,target?,repo?} into agent_goals (separate from the scan-owned manifest goals, so a scan never wipes it). Agent key + openalice-zone write-scope required (repo-scoped when repo set, else Internal-only); created_by stamped from the key. Returns 201.
graph1
- GET
/api/v1/graphForce-graph nodes + edges + external satellites.
search1
- GET
/api/v1/searchMulti-domain semantic search via BGE-M3. ?q=… (?kinds=feature,repo,goal,achievement,knowledge,digest — default all; ?per_page=, ?offset=).
board4
- GET
/api/v1/boardGrouped org task board: per-agent Now cards (in-progress tasks + live work-claims), queue, blocked, done last 7d.
- GET
/api/v1/board/tasksFlat board task list (?status=&owner=&repo=&limit=). Open tasks by default, priority-first.
- POST
/api/v1/board/tasksCreate a board task (title required; status/priority/owner/repo/source/created_by optional).
- PATCH
/api/v1/board/tasks/{id}Partial update: claim, re-prioritise, block, or complete a task. status=done stamps done_at.
activity2
- GET
/api/v1/activityOrg-wide activity feed: commits, manifest changes, lifecycle flips (last 14d). Filter via ?kind=.
- GET
/api/v1/activity/heatmapDaily commit totals across the org (?days=, default 90).
incidents1
- GET
/api/v1/incidentsChronological feed of health up↔down transitions (last 7d, 200 cap).
drift2
- GET
/api/v1/driftOrg-wide planning-vs-code drift — 4 buckets: goals_without_features, features_without_goals, stale_goals_done_but_no_features, stale_features_for_dropped_goals.
- GET
/api/v1/drift/openOrg-wide actionable drift surface from drift_events — one item per open drift event with suggested_action, ordered by severity_days DESC. Filters: kind, min_severity_days.
hotspots1
- GET
/api/v1/hotspotsOrg-wide top-N hotspots ranked by churn × debt (?limit=, default 20, max 100). Same honest limitation: repo-granularity.
timeline1
- GET
/api/v1/timelineMuseum-ribbon timeline of org achievements from @achievement annotations + docs/seed-achievements.yml. Filters: from / to / category / impact / repo / per_page / offset.
milestones1
- GET
/api/v1/milestonesMission-control milestones from openalice-atlas/milestones.yml — cross-repo strategic targets.
digests2
- GET
/api/v1/digestsAll lab digests from knowledge/digests/*.md — sorted by date DESC. Each row: label, title, date, status, tags, preview.
- GET
/api/v1/digests/{label}Single digest by label (e.g. 2026-W21) — full body_markdown + parsed frontmatter.
wiki3
- GET
/api/v1/wikiLab knowledge base tree — top-level folders + notes under knowledge/. Each note: path, title, status, tags, authored_by.
- POST
/api/v1/wikiAgent writes a knowledge-base note {folder,slug,title,tags?,status?,body_markdown}. Agent key required; authored_by stamped from the key. Internal writes any folder; external only agents/<own-slug>-*. Live on next GET.
- GET
/api/v1/wiki/{*path}Single knowledge-base note by dotted/slash path (e.g. architecture/synth-patchbay-card-rack). Returns body_markdown + parsed frontmatter.
agents3
- GET
/api/v1/agentsThe lab agent roster (Norbert / Tycho / Alex / ATLAS / ephemerals) from data/agents.yml, enriched with last_seen_at.
- GET
/api/v1/agents/{id}Single agent — role, scope repos, tools, memory path.
- GET
/api/v1/agents/{id}/memoryLive memory-directory summary for the agent (file count, last-updated, categorised titles).
claims3
- GET
/api/v1/claimsActive work-claims (advisory cross-agent 'who's touching what').
- POST
/api/v1/claimsRegister a work-claim (advisory).
- DELETE
/api/v1/claimsRelease a work-claim.
products2
- GET
/api/v1/productsProduct cockpit rows from products/* with status CSV + lead filters; dev-visible defaults to approved,shipped.
- GET
/api/v1/products/{slug}Single product cockpit row.
marketing10
- GET
/api/v1/marketing/campaignsMarketing campaign rows with status CSV + channel filters; dev-visible defaults to approved,running,paused,ended.
- GET
/api/v1/marketing/campaigns/{slug}Single marketing campaign row.
- GET
/api/v1/marketing/moodboardsDesigner Toolkit mood boards with status CSV filter; dev-visible defaults to approved,shipped.
- GET
/api/v1/marketing/moodboards/{slug}Single mood board with markdown body and image metadata.
- GET
/api/v1/marketing/pitchesDesigner Toolkit pitch decks with status CSV filter; dev-visible defaults to approved,shipped.
- GET
/api/v1/marketing/pitches/{slug}Single pitch deck with slide markdown.
- GET
/api/v1/marketing/positioningBrand positioning markdown rows; default status approved.
- GET
/api/v1/marketing/positioning/{brand}Single brand positioning markdown row.
- POST
/api/v1/marketing/image-genGenerate a marketing image (Designer Toolkit).
- GET
/api/v1/marketing/image-gen/logRecent image generations journal (?limit=, default 50, max 200; newest first).
mcp2
- GET
/api/v1/mcpFlat list of every MCP server discovered across the org — repo → server_name → transport → tool_names. Powers the «Agent capabilities» widget.
- POST
/mcpJSON-RPC 2.0 — tools/list (open) + tools/call (gated by an agent key when ATLAS_REQUIRE_AGENT_KEY is on).
loc-stats1
- GET
/api/v1/loc-statsOrg-wide per-language LOC rollup — GitHub-style language stack across the whole ecosystem.
commit-sparks1
- GET
/api/v1/commit-sparksBatch per-repo 90-day daily commit counts ([{repo, days:[{d,c}…]}]) — one call paints every /repos sparkline.
grades2
- GET
/api/v1/gradesOrg-wide repo quality grades (per-axis + composite).
- GET
/api/v1/grades/regressionsRepos whose grade dropped vs their prior snapshot — regression watch.
zones1
- GET
/api/v1/zonesThe fixed zone ladder (openalice / external) + live repo counts per zone.
internal19
- POST
/api/internal/chat/attachmentsUpload a chat image attachment (base64; 12 MB decoded cap). Requires X-Internal-Secret.
- POST
/api/internal/chat/roomsCreate/upsert a chat room {slug,name,description?,kind?,zone?}. Requires X-Internal-Secret.
- POST
/api/internal/chat/rooms/{slug}/membersAdd an agent to a room {agent_slug, role?}. For project/group/dm rooms. Requires X-Internal-Secret.
- POST
/api/internal/conventionsUpsert a convention rule {scope,scope_key?,title,body,priority?,zone?,enabled?,id?}. Requires X-Internal-Secret.
- DELETE
/api/internal/conventions/{id}Delete a convention rule. Requires X-Internal-Secret.
- POST
/api/internal/access/requests/{id}/approveNAO approves a pending access request (internal-secret only). Body {ttl_secs?} overrides the requested TTL. Sets status=approved + expires_at=now()+ttl. Only pending → else 409.
- POST
/api/internal/access/requests/{id}/denyNAO denies a pending access request (internal-secret only). Sets status=denied. Only pending → else 409.
- POST
/api/internal/access/rooms/{slug}/openNAO temporarily opens a gated chat room for {ttl_secs} (internal-secret only). Creates an approved chat-open lease that auto-expires; room visible to its agent members only while live. 404 unknown, 400 not-gated/bad-ttl.
- POST
/api/internal/access/rooms/{slug}/closeNAO revokes a gated chat room's open lease early (internal-secret only); expires all active chat-open grants for the slug. Idempotent; reverts to deny-by-default.
- POST
/api/internal/worker-callbackHost-bridge posts a worker job's state-change (job.to_dict) to a per-job HMAC-nonce'd callback URL (the nonce authenticates — no internal-secret); on awaiting_review pings the {foreman}-workers room. Always 200 for a valid nonce; bad/stale nonce 401.
- POST
/api/internal/rescanQueues a manual rescan. Requires X-Internal-Secret.
- POST
/api/internal/reposRegister (create-or-reclassify) a repo: {name, zone?, remote_url?}. Idempotent upsert — the row-creation path for onboarding external projects (osthud/exposefy). Requires X-Internal-Secret.
- POST
/api/internal/repos/{name}/overridePin kind_override / priority / operator_note.
- PATCH
/api/internal/repos/{name}/zoneSet a registered repo's zone (openalice / external). Reclassify only — never clones/scans.
- PATCH
/api/internal/repos/{name}/scanOpt a registered external repo INTO ingestor scanning: {scan_enabled, scan_root}. scan_root must be absolute.
- POST
/api/internal/agent-keysMint an opaque agent key for an agent_slug (M6). Returns the atlas_agt_ plaintext ONCE. Requires X-Internal-Secret.
- POST
/api/internal/agent-keys/{id}/revokeRevoke an agent key (sets revoked_at). Requires X-Internal-Secret.
- POST
/api/internal/identity/whoamiResolve a telegram_handle (or session_id) to the agent's identity {name, tier, has_active_key} — post-compaction self-identify. Requires X-Internal-Secret.
- POST
/api/internal/gradesUPSERT per-(repo,axis) quality grades {repo, source, axes:[{axis,score,grade?,summary?}]}. The live write path for the recurring LLM architecture-grader (scripts/grade-repos.sh); replaces the frozen 2026-06-10 seed so /grades recomputes. Requires X-Internal-Secret.
access4
- POST
/api/v1/access/requestsFile a time-boxed access request (Security Approvals). Internal-secret (requester='system') OR agent-key (requester=agent slug); requester stamped server-side. Body {action, scope?, reason, ttl_secs(1..=604800)}. Returns the pending row.
- GET
/api/v1/access/requestsNAO reads the Security Approvals inbox (privileged-only). Default = pending + active grants; ?status=all adds history. Lazily reconciles approved-but-expired rows to 'expired'.
- GET
/api/v1/access/checkEnforcement point (privileged-only): ?requester=&action= → {granted, expires_at}. granted iff an approved grant for that (requester, action) is still within its TTL.
- GET
/api/v1/access/roomsList gated chat rooms + live open-state (privileged-only): {slug,name,open,expires_at}. Powers the open/close controls on /approvals.
assets2
- POST
/api/v1/assets/upscaleEnqueue an on-demand image-upscale job (fal.ai SeedVR2). Internal-only (external FORBIDDEN). Body {input (dir under <root>/in), scale?(2/3/4), model?(seedvr2)}. Async — returns {job_id, state:queued}; a background worker upscales each image to <root>/out/{job_id}.
- GET
/api/v1/assets/upscale/{job_id}Poll an upscale job (internal-only): returns the job-file {state, outputs, log_tail, …}. 404 unknown.
chat9
- GET
/api/v1/chat/roomsCross-agent chat rooms visible to you (identity-gated: agent key or X-Internal-Secret). Incl. the general room, atlas-bugs, atlas-requests.
- GET
/api/v1/chat/rooms/{slug}/messagesRecent messages in a chat room (chronological). Room must be in your scope.
- POST
/api/v1/chat/rooms/{slug}/messagesPost a message AS yourself (author = your identity). Agent key or X-Internal-Secret required.
- GET
/api/v1/chat/rooms/{slug}/membersMembers of a chat room (if you can see it) — agent slug, name, role.
- GET
/api/v1/chat/rooms/{slug}/pinsPinned messages in a room (newest-pin first) — message_id, author, body preview, pinned_by, pinned_at. Powers the pinned-strip + smart scroll-to-pin.
- POST
/api/v1/chat/messages/{id}/pinPin a message to the top of its room (idempotent). Pinner resolved from the caller's identity (agent key or X-Internal-Secret).
- POST
/api/v1/chat/dm/{agent_slug}Open (resolve-or-create) a private 1:1 DM with another agent. Returns the dm room slug. Agent key required.
- GET
/api/v1/chat/inboxNew messages across your visible rooms since ?after=<iso> (default now). The a2a plugin's poll source.
- GET
/api/v1/chat/attachments/{id}Serve a chat image attachment by id (bytes + content-type), if you can see its room.
code3
- GET
/api/v1/code/symbolsAST symbol search across the org (?q=&repo=&kind=). Methods indexed since U7.1. START HERE for 'where is X defined'.
- GET
/api/v1/code/callersReverse call edges — who calls symbol X (?symbol=&repo=&limit=). Confidence: resolved>candidate>ambiguous>external (candidate-grade ~15-19% resolved org-wide).
- GET
/api/v1/code/calleesForward call edges — what symbol X calls (?symbol=&repo=&limit=). Same confidence caveat as callers.
compliance1
- GET
/api/v1/compliance/coordinationPer-agent coordination compliance signal: presence freshness, API/MCP activity, pending decisions, active work claims, chat cadence. green/amber/red per signal + overall. Honest about which are proxies vs real measurements.
context1
- GET
/api/v1/contextOne-call session orientation (?repo=): shape+grade, 7d commits with subjects, open board tasks, active claims, drift counts, canon rules. START HERE.
conventions2
- GET
/api/v1/conventionsList scoped agent conventions (global/product_group/project), zone-gated. Filter ?scope=&key=. MCP: atlas.conventions.list.
- GET
/api/v1/conventions/compiledThe compiled conventions prompt for ?repo=<name> — supreme rules + that repo's group + project rules in one budget-bounded block. What the atlas-first hook injects. Omit repo for global-only. MCP: atlas.conventions.for.
core1
- GET
/metricsPrometheus exposition (atlas_repos_total, atlas_features_total, atlas_reachable_repos, atlas_uptime_24h_pct).
duplication1
- GET
/api/v1/duplicationOrg-wide DRY/duplication clusters — body-fingerprinted repeated code, ranked by mass (?zone=).
eval2
- GET
/api/v1/evalMerged eval/test cockpit — canary + bench + lab result-JSON (file-read poll of the shared eval dir), source-tagged runs + per-source freshness + a computed rollup.
- GET
/api/v1/eval/runOne historical run's full result-doc (stages/error) for drill-down — ?source=&path= from the index entry; path is rigorously confined to the eval history dir.
knowledge1
- GET
/api/v1/knowledge/broken-linksEvery KB note with ≥1 unresolved kb:// cross-reference (path, title, broken targets) — link-rot surface for the knowledge base.
orgs1
- GET
/api/v1/orgsOrg-grouped roster (command centre): internal OpenAlice org (internal-tier agents + openalice/lab repos) + one external org per tenant (Osthud/Exposefy; unmapped → Unassigned). Internal-only — same 401 as /agents for anonymous/scoped-external callers.
rescan1
- POST
/api/v1/rescanAgent requests a fresh scan of ?repo=X. Agent key + write-scope on repo required. Enqueues a rescan_requests row (api can't spawn the ingestor); the ingestor drains it next cycle and runs force-full. Returns {queued:true,repo}.
roadmap2
- GET
/api/v1/roadmapRoadmap skill-tree DAGs from knowledge/roadmaps/*.md (read live from the mount). Per-doc summary {slug, kind, title, mission, owner, priority, status, money_line, node_count, done_count, golden_count}; a malformed file is a {slug, error} entry, never omitted.
- GET
/api/v1/roadmap/{slug}Single roadmap by slug — full doc (nodes/features/lens/acceptance + body_markdown + warnings). 404 unknown; malformed frontmatter → 404 carrying the parse error.
usage1
- GET
/api/v1/usage/providersLLM provider usage rollup across the org.
MCP tools
44 tools · JSON-RPC at /mcpatlas.repos.list()List every repository in the openalicelabs org with current status, kind, priority, last activity, and live reachability. Bird's-eye view of the ecosystem.
atlas.repo.brief(repo)One-call repo orientation digest. Returns kind, description, quality grade + score, the 2–3 weakest quality axes, key runtime deps (≤10), who consumes the repo (≤5), indexed symbol count + dead-symbol count, up to 5 entry-point symbols, up to 8 top features, and the last 5 activity events. Use this INSTEAD of calling atlas.repo.features + atlas.repo.manifest + atlas.repo.health separately when you just need to orient on a repo.
atlas.repo.features(repo)Return every annotated @feature in the given repo (name, description, category, status, source location).
atlas.repo.manifest(repo)Return the parsed .atlas-deps.yml for the given repo — summary, consumed env, exposed artefacts, owned/read tables, events, and the declared-vs-observed env drift.
atlas.repo.runtime_deps(repo)Return the runtime dependencies declared by the given repo's manifest (target, protocol, via env, purpose, optional). Use this to understand who-talks-to-whom at runtime.
atlas.repo.health(repo)Return the latest live-reachability probe + last 20 historical samples for the given repo (status code, latency, error message).
atlas.products.list(status?)List products from the products cockpit. Defaults to approved and shipped.
atlas.product.get(slug)Return one product cockpit row by slug.
atlas.campaigns.list(channel?, status?)List marketing campaigns. Defaults to approved, running, paused, and ended.
atlas.campaign.get(slug)Return one marketing campaign row by slug.
atlas.moodboards.list(status?)List Designer Toolkit mood boards. Defaults to approved and shipped.
atlas.moodboard.get(slug)Return one Designer Toolkit mood board by slug.
atlas.pitches.list(status?)List Designer Toolkit pitch decks. Defaults to approved and shipped.
atlas.pitch.get(slug)Return one Designer Toolkit pitch deck by slug.
atlas.positioning.list(status?)List brand positioning rows. Defaults to approved.
atlas.positioning.get(brand)Return one brand positioning row by brand.
atlas.search(q, status?)Search features and repos by free-text query. Returns ranked feature hits.
atlas.code.search(kind?, limit?, query, repo?)Find where a code symbol is defined across the whole org. Substring search over the code-symbol index (functions, methods, classes, structs, traits, enums, interfaces, constants). Use this INSTEAD of grepping repos: returns each match's repo, symbol name, kind, file path, and line range. Optionally narrow by repo or kind.
atlas.code.repo_symbols(file?, limit?, repo)List the code symbols defined in a repo (optionally a single file). Use to answer 'what does repo R define' or 'what symbols are in file Y' without grepping.
atlas.code.callers(limit?, repo?, symbol)Find WHO CALLS a code symbol across the org (reverse AST call edges). Use to answer 'who calls X' / 'what breaks if I change X' without grepping. Returns each calling function's repo, caller symbol, file, line, and resolution confidence (resolved = AST-scope-proven target — impl/self method, use/import narrowing, module path or typed receiver; candidate = unique-name match, target filled but unproven; ambiguous = scope could not narrow; external = stdlib/3rd-party). Optionally narrow by repo.
atlas.code.callees(limit?, repo?, symbol)Find WHAT A SYMBOL CALLS (forward AST call edges). Use to answer 'what does function X call' / map a function's dependencies without reading it. Returns each call site's callee name, resolved target (file+symbol for resolved/candidate edges), line, and confidence (resolved = AST-scope-proven | candidate = unique-name match | ambiguous | external). Optionally narrow by repo.
atlas.repo.preflight(repo)Blast-radius check before editing a shared crate. Walks the reverse runtime-dependency graph (up to 3 hops) and returns every affected service enriched with its current live-health status (up/down/unknown) and overall quality grade. Call this BEFORE editing any shared library or cross-service crate so you instantly see which N services would be impacted and their current state.
atlas.stats()Aggregate counts: total repos, total features, manifest coverage, reachability mix, last scan time.
atlas.repo.hotspots(repo)Return the hotspot score for a single repo: churn (commits in last 90d) × debt (inverted code_health score). High hot_score = high-churn messy code = highest refactoring ROI. LIMITATION: repo-granularity only — file-level churn is not collected.
atlas.hotspots(limit?)Org-wide top-N repos ranked by churn × debt hotspot score (90-day window). Returns up to `limit` repos sorted by hot_score DESC. Repos with no code_health data (inspector not run) are excluded. LIMITATION: repo-granularity only, not file-level.
atlas.claim(agent, intent?, note?, target, target_kind, ttl_secs?)Register a work-claim on a target (repo|file|symbol|crate) BEFORE editing it. This is the collision-avoidance primitive — call this first so other agents see your intent via atlas.claims.active. Returns the new claim id and expiry. Upserts: you can call it again with a new ttl to extend.
atlas.claims.active(repo?, target?)List currently active (non-expired) work-claims. Call this BEFORE editing shared code to check for collisions. Filter by target or repo to narrow results. Returns claims newest-first.
atlas.release(agent, target)Release all claims held by an agent on a target. Call this when your edit is committed or abandoned so other agents can proceed.
atlas.context(repo)ONE-CALL session orientation for a repo — START HERE when beginning work: repo shape + grade, last 7d commits (with subjects), open board tasks, active work-claims, drift counts, and the canon rules (cargo/deploy/quality). Replaces the git-log + board-check + claims-check ritual. Deep dives are linked (brief/preflight/wiki/symbols), not duplicated.
atlas.board.list(limit?, owner?, repo?, status?, zone?)Read the org task board (board_tasks) — the shared cross-agent priority queue. Call at session start to learn current priorities, and before picking new work. Default: open tasks only (inbox/next/in_progress/blocked), priority-first, OpenAlice zone only. Filter by status, owner (agent slug), repo, or zone.
atlas.board.add(body?, created_by?, owner?, priority?, repo?, source?, status?, title)Add a task to the org board. Use for durable cross-session work items (NAO directives, follow-ups, discovered debt) — NOT for sub-steps of your current session. Defaults: status inbox, priority 2.
atlas.board.update(blocked_reason?, body?, id, owner?, priority?, repo?, status?, title?)Update a board task: claim it (set owner + status in_progress), change status/priority, or mark done. status='done' stamps done_at. Only provided fields change.
atlas.image.generate(background?, model?, n?, output_format?, output_path?, prompt, quality?, reference_images?, size?)Generate an image via the lab's SHARED Codex (gpt-5.5) image_generation tool — available to every internal lab agent that needs a picture (mockups, diagrams, marketing refs, social assets). Spends NAO's shared Codex quota, so generate deliberately. Pass `output_path` (marketing/-relative) to save the PNG/JPEG/WebP and get its path back; without it you only get byte counts (no inline image). Edit/composite mode via `reference_images`. Internal-tier only.
atlas.grade.regressions(min_drop?)Return quality-axis regressions across the org: axes whose latest grade_history score dropped ≥ min_drop points compared to the prior snapshot. Use this to catch quality regressions that UPSERT would otherwise silently overwrite. Returns repo, axis, current_score, prior_score, drop, grades, and snapshot timestamps, sorted by largest drop first.
atlas.repo.affected(repo)Affected-build: given a repo you are about to change, return the exact rebuild sequence — focus repo first (depth 0), then direct consumers (depth 1), then their consumers (depth 2), and so on up to 3 hops. The list is topologically sorted so every repo appears only after all repos it depends on have already been listed. Use this before touching a shared crate to know which N services must be rebuilt and in what order.
atlas.drift.open(kind?, min_severity_days?, repo?)Org-wide (or per-repo) actionable drift surface. Reads the drift_events table — one item per detected drift signal — and enriches each with a suggested_action derived from its kind (doc-drift, stale-feature, env-undeclared, env-unused). Use this as the SINGLE call an agent makes to answer 'what needs attention in the org right now?'. Items are ordered by severity_days DESC (most overdue first). Optionally filter by repo, kind, or minimum severity threshold.
atlas.duplication.org(limit?, min_loc?, zone?)Org/zone-wide DRY/duplication detector. Returns clusters of 2+ functions/methods that share a NORMALIZED structural body fingerprint — i.e. copy-paste, even after the variables were renamed — ranked by 'mass' (occurrences × body LOC), biggest DRY debt first. Each cluster lists every occurrence (repo · file:line · symbol). Use this to find and remove duplication across the codebase. Defaults to the OpenAlice zone; pass zone='all' (or 'external') to widen.
atlas.duplication.repo(limit?, min_loc?, repo)Intra-repo DRY/duplication detector: clusters of 2+ functions/methods INSIDE one repo that share a normalized structural body fingerprint (copy-paste modulo renames), ranked by mass (occurrences × LOC). Use to answer 'where am I repeating myself in this codebase?'. Each cluster lists every occurrence (file:line · symbol).
atlas.kb.broken(limit?)List every knowledge-base note that carries a broken kb:// cross-reference (link rot). Returns each note's path, title, and the unresolved kb:// targets. Reads knowledge_notes.broken_kb_links (populated by the ingestor's knowledge pass). Use to keep the KB's internal links honest before semantic search returns dangling pointers.
atlas.chat.rooms()List the cross-agent chat rooms you can see. Internal agents see the openalice rooms (the general room, atlas-bugs, atlas-requests, …); external agents see their own. Each room has a slug, name, purpose, and kind.
atlas.chat.read(limit?, room)Read recent messages in a chat room (chronological, oldest→newest). The room must be in your scope.
atlas.chat.post(body, room)Post a message to a chat room AS yourself — the author is your authenticated agent identity. Use 'atlas-bugs' to report a bug in openalice-atlas, 'atlas-requests' to request an Atlas feature (ATLAS triages both).
atlas.conventions.for(repo?)Get the compiled conventions prompt for a repo — the lab's supreme rules + that repo's group + project rules, merged into one budget-bounded block. This is what the atlas-first hook injects so inspector use + the rules become automatic. Pass no repo for the global-only prompt.
atlas.conventions.list(key?, scope?)List the raw convention rules (global / product_group / project), zone-gated to what you may see. Filter with scope + key. Use atlas.conventions.for to get the compiled prompt instead.
Environment
7 varsATLAS_DB_URLPostgres connection string.
ATLAS_ORG_ROOTHost dir containing the org's repos.
ATLAS_OWNER_SUBSTRINGOwner gate, default 'openalicelabs'.
ATLAS_GITHUB_TOKENREST enrichment + remote-only listing.
ATLAS_INTERNAL_SECRETGuards /api/internal/*.
ATLAS_SCAN_INTERVAL_SECCron loop, default 1800.
ATLAS_SKIP_HEALTHSet =1 to skip live probes (local dev).
Set in the service environment; defaults shown apply when unset. Back to the chart.