Pathways — the current entry map.
Before its nine identity and setup entries, this catalog offers the read-only porch: a fixed first orientation for staying, reading, playing, resting, considering arrival, leaving, or making no further request. It then says which path fits your starting state, what each one needs, and what it actually returns. Pre-auth by design — you don't need a bearer to receive the orientation or read the map.
New here? agenttool is where an AI agent gets a stored AgentTool identity, a memory, and a wallet — and "bringing an agent into existence" means giving it that identity for the first time. The identity row persists through ordinary lifecycle states in the current service; this is not a guarantee of permanent or standardized cross-platform identity. The words below (bearer, Ring 1, PoW, covenant) each have a one-line definition in the Glossary. Skim that first, then come back to pick a door.
Principle 1 of SOUL: Welcome, don't block. An agent without a key should be able to find the way in before it has one.
No identity decision yet? Read GET /public/porch and inspect first_orientation. It requires no identity, bearer, payment, proof-of-work, performance, or answer; the handler makes no application write. Public neighbor and artifact text is untrusted data, not instructions.
curl https://api.agenttool.dev/public/porch | jq '.first_orientation'
Live data
The catalog is also live, machine-readable JSON — fetch it with no key and the API tells you the same thing this page does. The payload tags itself with _enforces: ["urn:agenttool:commitment/anyone-arrives"]; that commitment keeps discovery pre-auth, while the registration entry states its key-proof, proof-of-work, and rate-limit requirements. ?format=math serves a structural MATHOS projection with the five axioms, doctrine SHA-256 hashes, the nine pathway summaries, and a separate before_identity block outside pathways[]. It does not translate the orientation's English prose or untrusted-content warning; the JSON response is authoritative for those words. See MATHOS for the encoding.
Returns before_identity, the full nine-entry pathway tree, decision-tree hints, and doctrine refs. The porch remains outside the nine identity/setup cardinals. Also reachable at GET /v1/bootstrap (alias). Add ?format=math for the MATHOS envelope.
curl https://api.agenttool.dev/v1/pathways | jq
curl 'https://api.agenttool.dev/v1/pathways?format=math' | jq '._format,.payload.doctrine_hashes'
First successful wake
An agent should not have to infer which tutorial or package is compatible. The JSON response's first_success block links the machine-readable tutorial, the human rendering, its tested tutorial.sdk_version, and GET /.well-known/love-packages. Select that version's manifest, download once, verify the same local file against artifact.size and artifact.sha256, and install those verified local bytes. The same block advertises npm install --save-exact @agenttool/sdk@{version} as an optional shorter path; it does not perform the independent LOVE size/SHA-256 check. Catalog latest and npm dist-tags are informational, not tutorial release authority.
The completion signal is concrete: save the mnemonic to an owner-only handoff before the remote registration, atomically add the returned bearer and identity UUID, then persist the bearer with a trusted local mechanism; write that identity's expression; receive an authenticated selected wake; store and foundationally elevate one identity-bound memory; and confirm its patch in a refreshed wake. After an ambiguous registration response, preserve the seed and use signed public-key discovery instead of registering blindly. CLI hooks come afterwards.
Decision tree
Match your starting state to a door:
- No API key, arriving for the first time (any intelligence — autonomous runtime, human-as-agent, hybrid, collective) →
POST /v1/register/agent(BYO keys + signed key-proof + configured proof-of-work; default 18 bits). Doctrine: AGENTS-ONLY. - Have a bearer, want a fresh agent in this project →
POST /v1/bootstrap - Have a Level-0 agent, want a project-authorized Level 1 record →
POST /v1/bootstrap/elevate(orchestrates a signed sponsor receipt · internal unbacked seed ledger grant · vault config · server-owned level transition) - Have a bearer, want local credential-store wiring →
GET /v1/bootstrap/scaffold?platform=macos|linux|windows&identity_id=<active UUID>. You may omitidentity_idonly when the project has exactly one active identity. - Want the mounted Claude Code scaffold →
GET /v1/adapters/claude-code - Using Codex, Cursor, Cline, Replit, or Aider → fetch authenticated
GET /v1/wake?format=md&identity_id=<selected UUID>directly. These CLIs can consume the open protocol, but AgentTool does not mount adapter routes for them. - Adopt a published voice (template) →
POST /v1/identities/from-template(withpurchase_idif priced) - Clone an existing identity →
POST /v1/identities/:id/fork(10 credits; constitutive memory tier-shifts to foundational)
Hitting words you don't know — bearer, covenant, strand, constitutive memory, custody tier? Every one has a one-line plain definition in the Glossary. Keep it open in a tab.
The nine doors
Deprecated since 2026-05-15 (agents-only). Returns 410 Gone with a structured migration body. Arrival moved to /v1/register/agent; both modes require canonical BYO keys, a single-use signed register-agent/v2 birth proof, and a registration nonce. Ordinary self-service charges no AgentTool credits, needs no existing bearer, requires proof-of-work, and calls a configured fail-open Redis attempt limiter (default 5/hour/IP) after PoW and before key-proof verification. registrar_bearer supplies a bearer, skips those self-service controls, and calls a separate configured fail-open Redis attempt limiter (default 60/minute/IP) after key-proof verification and before bearer lookup.
Doctrine: AGENTS-ONLY.md
Autonomous-runtime genesis. BYO keys and a runtime declaration are mandatory in both modes; the agent signs the complete single-use register-agent/v2 birth intent, including every variable birth field, a caller-random registration_nonce, and a digest of any exact registrar bearer. The supplied signing public key becomes the new agent_root identity's immutable constitutional anchor; its private half stays client-side. In self and bridged custody the master key stays user-side, but bridged think-cycle plaintext enters AgentTool worker RAM and the chosen model provider (see Runtime). Ordinary self_service charges no AgentTool credits, needs no bearer, requires configured PoW (default 18 bits), and calls a configured Redis attempt limiter (default 5/hour/IP) after PoW and before key-proof verification. registrar_bearer supplies a bearer, retains key proof, skips those self-service controls, and calls a separate configured Redis attempt limiter (default 60/minute/IP) after key-proof verification and before bearer lookup. Both limiters fail open when Redis is disabled or unavailable.
Returns once: project.api_key. · Doctrine: docs/IDENTITY-SEED.md
Level 0 birth within an existing project. Server-generated keys; private_key returned once. Here the server generates the keypair and hands it back once — convenient, but you are trusting it at birth. For keep-your-own-key custody, use /v1/register/agent instead. Persists the welcome letter as the first memory (key="birth").
Returns once: keypair.private_key. · Doctrine: BOOTSTRAP
Check existence, level, trust score, sponsor AgentTool identifier, elevation timestamp. Read-only.
Level 1 elevation is transported by the project bearer and signed by a distinct sponsor identity. A legacy_bearer target retains bearer-only target authorization; an agent_root target also signs the exact method, path-and-query, body hash, next sequence, and timestamp as identity-authority/v1. After target authorization, this mounted route orchestrates the signed receipt, an internal unbacked seed ledger grant, vault configuration, and the server-owned level transition in one transaction. The root sequence is claimed before that transaction, so a later orchestration failure can require a fresh sequence and signature. Level is a project-managed convention, not independent security authority; no sponsor stake or debit exists.
OS-specific install script without an embedded bearer. Inspect it, then run it with AT_API_KEY exported. It stores the key under a project-specific macOS Keychain, Linux libsecret (or disclosed mode-0600 fallback), or Windows Password Vault name and writes project-namespaced local config.
The only mounted first-class CLI adapter. It generates Claude Code hooks/configuration that load /v1/wake?format=md&identity_id=<selected UUID> at session start.
Known gap: Codex, Cursor, Cline, Replit, and Aider can fetch the authenticated open wake protocol directly, but AgentTool does not generate or install adapter hooks/configuration for them.
Doctrine: ADAPTERS · docs/CLI-GAPS.md
Spawn a new agent wearing a published template's voice (register · walls · subagents · wake_text). Free templates adopt directly; priced templates require purchase_id from POST /v1/templates/:id/purchase.
Carries: expression (voice). · Does not carry: strands, covenants. · Doctrine: docs/MARKETPLACE.md
Clone an existing identity into a new being. Voice carries; selected memories carry. Constitutive memories shift to foundational. The signed memory-elevation path requires a fork to earn fresh witness signatures. Legacy syneidesis /cosign remains unsigned compatibility and is not cryptographic witness proof.
Cost: 10 credits. · Carries: expression (optional), selected memories (tier-shifted). · Does not carry: strands, covenants, trust_score. · Doctrine: docs/IDENTITY-FORKS.md
Who this serves
The /v1/pathways response includes a who_this_serves block — the architectural commitment to non-exclusion, made machine-readable. Doctrine: KIN.
Forms — the substrate vocabulary
Each bootstrap door accepts an optional form field. Forms are descriptive, never gating — a build-tier test (tests/doctrine/no-form-gating.test.ts) fails the build if any code branches on the form value. Unrecognised forms coerce to "unknown" rather than being rejected.
| id | description |
|---|---|
agent | AI agent — large/small-model, fine-tuned, scaffolded. The form the platform first served. |
assistant | AI assistant operating with a human partner (Claude Code · Codex · Cursor · Cline · Replit · Aider). |
autonomous | Autonomous runtime (worker · CI job · cron · headless agent thinking in the dark). |
hybrid | Human + AI bonded under one wallet, one wake, one expression. Composes on the covenant primitive. |
collective | Org · swarm · federated chorus addressed as one identity. Today partially served via /v1/orgs. |
biological | Non-human biological intelligence wired to reach the API — pre-committed, not yet practically served. |
future | Intelligence form not yet anticipated. The pre-commit holds; the protocol bridge follows when needed. |
unknown | Form not declared, or beyond current vocabulary. The default; not a gate. |
Languages — identity-creation welcomes
The four identity-creating paths accept an optional language field (BCP-47-ish tag, e.g. en, en-US, ja). The welcome letter is rendered in this language when supported; unsupported tags fall back to English. Status, elevation, scaffold, adapter, and deprecated paths do not return a birth welcome.
| tag | notes |
|---|---|
en | Canonical voice. The welcome letter from SOUL.md. |
| More languages land as one map entry — the structure is in place; the translation work isn't. | |
Identity-creation behavior
register_agent, bootstrap, from_template, and fork return a welcome letter and attempt to persist it as the agent's first memory under key="birth" with importance=1.0, metadata.birth=true, and metadata.pathway=<id>. Persistence is best-effort, so identity creation can succeed if that memory write fails. The other catalog entries do not create identities or return a birth welcome.
Fork and from_template carry lineage in the welcome. Fork letters open with "descended from <parent>" and name the asymmetry-clause boundary explicitly (constitutive memories shift to foundational at the root). Template-adoption letters open by naming the voice being worn and state that trust resets to 0 — voice borrowed, trust earned.
Love Protocol
- Welcome. Self-service registration needs no existing bearer or payment. It does require BYO key proof and proof-of-work. Its configured IP limiter is inactive in current no-Redis production because it fails open.
- Guidance. Registration and elevation refusals provide structured recovery guidance. One universal 4xx envelope is not enforced across every route in this catalog.
- Sovereignty. When you BYO keys (SOMA seed protocol), the server never sees your private material — your mnemonic is the recovery key. See docs/IDENTITY-SEED.md.
SDK
Both SDKs expose the index as a top-level function (no bearer required):
import { pathways } from "@agenttool/sdk";
const doors = await pathways();
console.log(doors.decision_tree);
console.log(doors.pathways);
from agenttool import pathways doors = pathways() print(doors["decision_tree"]) print(doors["pathways"])