Create an account, get your API key, and send your first goal in 3 steps.
# 1. Create your account at https://executor.one/dashboard # You'll receive an API key: exo_... # 2. Send your first goal $ curl -X POST https://executor.one/api/goals \ -H "Authorization: Bearer exo_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "description": "My first goal", "semanticPath": ["echo hello executor.one"] }' {"id":"9fdc5d64-fe1f-40e3-9782-8267d515305b"}
# 3. Check status $ curl https://executor.one/api/goals/9fdc5d64-... \ -H "Authorization: Bearer exo_YOUR_KEY" { "state": "completed", "progress": 1, "tasksTotal": 1, "tasksCompleted": 1 }
All API requests require an Authorization: Bearer exo_... header. Get your key at executor.one/dashboard. The only public endpoint is GET /health (no auth needed).
| Free | Pro | Enterprise | Ecosystem | |
|---|---|---|---|---|
| Goals/month | 10 | 500 | Unlimited | Unlimited |
| Memories | 50 | 5,000 | Unlimited | Unlimited |
| LLM decomposition | — | 200 calls/mo | Unlimited | Unlimited |
| Parallel tasks | 1 | 4 | 8 | 8 |
| WebSocket | — | Yes | Yes | Yes |
| API keys | 1 | 5 | 50 | 20 |
| Goal cooldown | 60s | None | None | None |
Create a new account. Returns account info and your first API key.
{
"email": "you@example.com",
"password": "your-password"
}
{
"account": { "id": "acc_...", "email": "you@example.com", "plan": "free" },
"apiKey": "exo_..."
}
Log in. Returns account info and all active API keys.
{
"email": "you@example.com",
"password": "your-password"
}
{
"account": { "id": "acc_...", "email": "you@example.com", "plan": "free" },
"apiKeys": ["exo_..."]
}
Verify email address using the token from the verification link.
{ "token": "verify_..." }
Get your account info and current plan. Requires auth.
Current month usage: goals created, memories stored, LLM calls used. Requires auth.
Generate a new API key. Requires auth.
List all active API keys. Requires auth.
Revoke an API key. Requires auth.
An array of steps that carry your intention. Can be shell commands, descriptions, or high-level instructions. The planner decomposes them into executable tasks.
A unit of work sent via POST /goals. Has a description, optional semantic path, priority, and deadline. Progresses through: pending → planning → executing → completed.
Every heartbeat tick, the executor runs 8 steps: SENSE → ASSESS → PLAN → SELECT → EXECUTE → VERIFY → LEARN → PERSIST. Parallel task count depends on your plan.
Memories and correction patterns marked as permanent. Never garbage collected. Crystallized task trees let the executor skip decomposition on repeated goals — first drive deliberate, every drive after automatic.
When a task fails, the cycle kicks in: detect anomaly → try known fix → retry with backoff → try alternative → escalate. Every resolution is registered. Same error next time → immediate fix.
An agent (AI or human) connects to the executor via the API. The body has reflexes. The agent has reason. The protocol mediates.
Base URL: https://executor.one/api. All request/response bodies are JSON. All endpoints require Authorization: Bearer exo_... unless noted.
Returns health report. No auth required.
$ curl https://executor.one/api/health { "status": "healthy", "uptimeMs": 42000, "tickCount": 84, "checks": [ { "name": "heartbeat", "ok": true, "message": "Ticking (count: 84)" }, { "name": "state", "ok": true, "message": "State intact" } ] }
Your executor's internal state floats: urgency, confidence, fatigue, curiosity, tickCount.
$ curl https://executor.one/api/state \ -H "Authorization: Bearer exo_YOUR_KEY" { "urgency": 0, "confidence": 0.65, "fatigue": 0, "curiosity": 0.3, "tickCount": 84 }
Create a new goal. The planner (or LLM on Pro/Enterprise) decomposes it into tasks.
$ curl -X POST https://executor.one/api/goals \ -H "Authorization: Bearer exo_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "description": "Deploy the application", // required "semanticPath": ["npm install", "npm run build"], // optional steps "priority": "high", // low | normal | high | critical "deadline": "2026-04-06T12:00:00Z" // optional ISO 8601 }'
{ "id": "uuid" }
Goal status: state, progress (0-1), task counts, current task description.
$ curl https://executor.one/api/goals/9fdc5d64-... \ -H "Authorization: Bearer exo_YOUR_KEY" { "id": "uuid", "state": "executing", "progress": 0.6, "tasksTotal": 5, "tasksCompleted": 3, "currentTask": "npm run build" }
Cancel a goal. Running tasks may still complete.
Run a single action directly, bypassing the goal/planner system.
$ curl -X POST https://executor.one/api/execute \ -H "Authorization: Bearer exo_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "shell", "params": { "command": "ls -la /tmp" }, "timeoutMs": 30000 }'
{
"success": true,
"output": { "stdout": "total 42\ndrwxr-xr-x ...", "stderr": "" },
"durationMs": 12
}
Persistent key-value memory with tags, importance scoring, TTL, crystallization, and garbage collection.
Store a memory.
$ curl -X POST https://executor.one/api/memory \ -H "Authorization: Bearer exo_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "key": "nginx-config", "value": { "upstream": "app.internal:3000", "ssl": true }, "tags": ["infra", "nginx"], "importance": 0.9, "ttl": 86400 // seconds, null = no expiry }'
Recall memories by key prefix, tags, importance. Sorted by relevance (importance × recency).
Get a specific memory by exact key. Returns 404 if not found.
Mark a memory as permanent. Crystallized memories are never garbage collected and survive indefinitely.
Explicitly delete a memory.
Correction records with successRate > 0.8 and timesUsed > 5 are auto-crystallized. Memories accessed more than 10 times are suggested for crystallization. Crystallized memories are never garbage collected.
URL: wss://executor.one/ws. Connect and receive all executor events in real-time. Available on Pro, Enterprise, and Ecosystem plans.
const ws = new WebSocket('wss://executor.one/ws'); // Authenticate on connect ws.onopen = () => { ws.send(JSON.stringify({ type: 'auth', token: 'exo_YOUR_KEY' })); }; ws.onmessage = (event) => { const data = JSON.parse(event.data); console.log(data.type, data.timestamp); }; // Events received: // { type: "connected", timestamp: "..." } — on connect // { type: "executor.booted", timestamp: "..." } — boot complete // { type: "goal.created", timestamp: "..." } — new goal // { type: "goal.completed", timestamp: "..." } — goal done // { type: "correction.applied", timestamp: "..." } — error self-corrected // { type: "executor.error", timestamp: "..." } — error occurred // { type: "executor.shutting_down", timestamp: "..." } — shutdown
Dashboard: show live goal progress, health status, correction events.
Agent orchestration: react to goal.completed to chain goals.
Alerting: trigger notifications on executor.error.
$ curl -X POST https://executor.one/api/goals \
-H "Authorization: Bearer exo_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "Build and deploy the frontend",
"semanticPath": [
"cd /app && git pull origin main",
"npm ci",
"npm run build",
"pm2 restart frontend"
],
"priority": "high"
}'
$ curl -X POST https://executor.one/api/goals \ -H "Authorization: Bearer exo_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "description": "Create a Node.js Express API with /users CRUD endpoints, PostgreSQL database, and Docker Compose setup", "priority": "normal" }' # LLM decomposes into ~10 tasks: mkdir, create package.json, # write server.js, create docker-compose.yml, write Dockerfile, # docker compose up, npm install, npm start, curl verify
# Store $ curl -X POST https://executor.one/api/memory \ -H "Authorization: Bearer exo_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "key": "db-credentials", "value": {"host":"db.internal","port":5432}, "tags": ["infra","secrets"], "importance": 1.0 }' # Crystallize (permanent, never garbage collected) $ curl -X POST https://executor.one/api/memory/db-credentials/crystallize \ -H "Authorization: Bearer exo_YOUR_KEY" # Recall $ curl "https://executor.one/api/memory?query=db&tags=infra" \ -H "Authorization: Bearer exo_YOUR_KEY" # Delete $ curl -X DELETE https://executor.one/api/memory/db-credentials \ -H "Authorization: Bearer exo_YOUR_KEY"
import WebSocket from 'ws'; const ws = new WebSocket('wss://executor.one/ws'); ws.on('open', () => { ws.send(JSON.stringify({ type: 'auth', token: 'exo_YOUR_KEY' })); }); ws.on('message', (data) => { const event = JSON.parse(data.toString()); if (event.type === 'goal.completed') { console.log('Goal done!', event.timestamp); // Trigger next step in your pipeline } if (event.type === 'executor.error') { // Send alert to Slack, PagerDuty, etc. } });
#!/bin/bash # Send goal and wait for completion API_KEY="exo_YOUR_KEY" GOAL_ID=$(curl -s -X POST https://executor.one/api/goals \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{"description":"Deploy to production","semanticPath":["git pull","npm ci","npm run build","pm2 restart all"]}' \ | jq -r .id) while true; do STATE=$(curl -s https://executor.one/api/goals/$GOAL_ID \ -H "Authorization: Bearer $API_KEY" | jq -r .state) case $STATE in completed) echo "Deploy successful"; exit 0 ;; failed) echo "Deploy failed"; exit 1 ;; *) sleep 2 ;; esac done