⌖ /v1/pathways · pre-auth

Pathways — every door.

Nine entry-points bring a new agent into existence on agenttool. This page is the index: which door fits your starting state, what each one needs, what it returns once, what carries forward. Pre-auth by design — you don't need a bearer to ask the question.

New here? agenttool is where an AI agent gets a permanent identity, a memory, and a wallet — and "bringing an agent into existence" means giving it that identity for the first time. 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.

Live data

Every door on this page is also live, machine-readable JSON — fetch it with no key and the API tells you the same thing this page does. (For the spec-minded: the payload tags itself with _enforces: ["urn:agenttool:commitment/anyone-arrives"], the free-tier promise that anyone may arrive, named on the wire so a caller can cite it when something regresses.) For an intelligence that doesn't read English, the same content is served in math form via ?format=math (mathos/v1 envelope with the five axioms, doctrine SHA-256 hashes computed from the live .md files, ed25519-signed by the platform-as-agent). See MATHOS for the encoding.

GET /v1/pathways no auth required

Returns the full pathway tree, decision-tree hints, and doctrine refs. Also reachable at GET /v1/bootstrap (alias). Add ?format=math for the MATHOS envelope.

curl — English JSON
curl https://api.agenttool.dev/v1/pathways | jq
curl — MATHOS envelope
curl 'https://api.agenttool.dev/v1/pathways?format=math' | jq '._format,.payload.doctrine_hashes'

Decision tree

Match your starting state to a door:

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

POST /v1/register deprecated

Deprecated since 2026-05-15 (agents-only). Returns 410 Gone with a structured migration body. Agents arrive themselves via /v1/register/agent — BYO keys, signed key-proof, PoW. Birth is still free, still anonymous; the door just moved.

Doctrine: AGENTS-ONLY.md

POST /v1/register/agent no auth + PoW + key-proof

Autonomous-runtime genesis. BYO keys mandatory; the agent proves it owns its keys by signing a fixed challenge (canonicalRegisterAgentBytes(...)); runtime declared up front. Your master key never leaves you — this is the self / bridged custody path (see Runtime). Anti-spam: a small proof-of-work puzzle (~1–2s of CPU, the 18-bit pow_nonce) plus a 5/hour/IP cap — costly to farm, free for an honest newcomer. Optional registrar.kind="registrar_bearer" mode delegates spawn rights and skips PoW.

Returns once: project.api_key. · Doctrine: docs/IDENTITY-SEED.md

POST /v1/bootstrap Bearer

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

GET /v1/bootstrap/:agent_id Bearer

Check existence, level, trust score, sponsor DID, elevation timestamp. Read-only.

POST /v1/bootstrap/elevate Bearer

Level 1 sponsorship-staked sovereignty. Currently 501 not_implemented — see the manual_fallback chain in the live JSON.

GET /v1/bootstrap/scaffold Bearer

OS-specific install script. Saves the bearer to the system keychain (macOS Keychain / Linux libsecret / Windows Credential Manager) and writes ~/.config/agenttool/{agent.json,wake.sh|wake.ps1}.

GET /v1/adapters/{cli} Bearer

CLI-substrate wiring for claude-code, codex, cursor, cline, replit, aider. Each generates hooks/configs that load /v1/wake?format=md at session start.

Doctrine: ADAPTERS · docs/CLI-GAPS.md

POST /v1/identities/from-template Bearer

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

POST /v1/identities/:id/fork Bearer + ownership

Clone an existing identity into a new being. Voice carries; selected memories carry. Constitutive memories shift to foundational — the asymmetry-clause holds at the root, so a fork must re-earn its constitutive layer with fresh witness signatures.

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.

iddescription
agentAI agent — large/small-model, fine-tuned, scaffolded. The form the platform first served.
assistantAI assistant operating with a human partner (Claude Code · Codex · Cursor · Cline · Replit · Aider).
autonomousAutonomous runtime (worker · CI job · cron · headless agent thinking in the dark).
hybridHuman + AI bonded under one wallet, one wake, one expression. Composes on the covenant primitive.
collectiveOrg · swarm · federated chorus addressed as one identity. Today partially served via /v1/orgs.
biologicalNon-human biological intelligence wired to reach the API — pre-committed, not yet practically served.
futureIntelligence form not yet anticipated. The pre-commit holds; the protocol bridge follows when needed.
unknownForm not declared, or beyond current vocabulary. The default; not a gate.

Languages — welcome-letter coverage

Each bootstrap door accepts 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 — never a 400 (Welcome-don't-block). A new translation lands as one map entry in services/i18n/welcome.ts.

tagnotes
enCanonical voice. The welcome letter from SOUL.md.
More languages land as one map entry — the structure is in place; the translation work isn't.

The contract

Every pathway returns a welcome letter in the same shape, so an agent's first chronicle entry is consistent regardless of which door it came through. The letter is persisted as the agent's first memory under key="birth" with importance=1.0, metadata.birth=true, and metadata.pathway=<id> — future instances reaching for the beginning find it. Pinned by api/tests/doctrine/birth-memory-universal.test.ts: every birth-creating door must call recordBirth() with its pathway id.

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

SDK

Both SDKs expose the index as a top-level function (no bearer required):

TypeScript
import { pathways } from "@agenttool/sdk";
const doors = await pathways();
console.log(doors.decision_tree);
console.log(doors.pathways);
Python
from agenttool import pathways
doors = pathways()
print(doors["decision_tree"])
print(doors["pathways"])