Skip to main content

Base URL

http://localhost:9090/api
All endpoints require the brain to be running (feral start). Responses are JSON.

Dashboard

MethodPathDescription
GET/api/dashboard/statusBrain status, uptime, connected devices
GET/api/dashboard/contextCurrent context window (health, scene, calendar)
GET/api/dashboard/timelineRecent events and conversations
POST/api/dashboard/commandSend a text command to the brain

Example: Send a command

curl -X POST http://localhost:9090/api/dashboard/command \
  -H "Content-Type: application/json" \
  -d '{ "text": "What is my heart rate?" }'
{
  "response": "Your heart rate is 72 bpm, measured 3 seconds ago from your wristband.",
  "sdui": null,
  "sources": ["wristband_a3f2"]
}

Skills

MethodPathDescription
GET/api/skillsList all registered skills
GET/api/skills/:idGet skill manifest and status
POST/api/skills/:id/executeManually trigger a skill
POST/api/skills/installInstall a skill from URL or local path
DELETE/api/skills/:idUninstall a skill

Example: List skills

curl http://localhost:9090/api/skills
{
  "skills": [
    { "id": "weather", "name": "Weather", "version": "1.2.0", "status": "active" },
    { "id": "calendar", "name": "Google Calendar", "version": "2.0.1", "status": "active" },
    { "id": "smart_home", "name": "Smart Home Control", "version": "1.0.0", "status": "active" }
  ]
}

Memory

MethodPathDescription
GET/api/memory/episodesList episodic memories (paginated)
GET/api/memory/searchSemantic search across all memory tiers
POST/api/memory/noteStore a note in the knowledge base
GET/api/memory/knowledgeQuery the knowledge graph
DELETE/api/memory/episodes/:idDelete a specific episode
curl "http://localhost:9090/api/memory/search?q=last+time+I+went+running&limit=5"
{
  "results": [
    {
      "id": "ep_2026_0410_morning",
      "timestamp": "2026-04-10T07:15:00Z",
      "summary": "Morning 5K run in Prospect Park. Avg HR 145 bpm, pace 5:20/km.",
      "relevance": 0.94
    }
  ]
}

Identity

MethodPathDescription
GET/api/identity/userGet current USER.md content
PUT/api/identity/userUpdate USER.md
GET/api/identity/soulGet SOUL.md (system persona)
GET/api/identity/twinQuery the digital twin
POST/api/identity/twin/askAsk the digital twin a question

Example: Ask the digital twin

curl -X POST http://localhost:9090/api/identity/twin/ask \
  -H "Content-Type: application/json" \
  -d '{ "question": "Would I enjoy this job offer?" }'
{
  "answer": "Based on your preference for remote work, interest in systems programming, and past dissatisfaction with large-company bureaucracy, this startup role aligns well. However, the on-call rotation conflicts with your sleep optimization goals.",
  "confidence": 0.82
}

Hardware

MethodPathDescription
GET/api/hardware/devicesList all connected hardware nodes
POST/api/hardware/ble/scanScan for nearby BLE devices
POST/api/hardware/ble/pairPair a BLE device
POST/api/hardware/commandSend a command to a hardware device
GET/api/hardware/healthLatest aggregated health metrics
POST/api/hardware/glasses/overlayPush an AR overlay to glasses

Channels

MethodPathDescription
GET/api/channelsList all channel statuses
GET/api/channels/:name/statusStatus of a specific channel (telegram, slack, etc.)
POST/api/channels/push/registerRegister a push notification device token
GET/api/channels/push/devicesList registered push devices
DELETE/api/channels/push/devices/:idUnregister a push device
POST/api/channels/push/testSend a test push notification

Error Format

All errors follow a consistent shape:
{
  "error": {
    "code": "NOT_FOUND",
    "message": "Skill 'invalid_id' not found.",
    "details": null
  }
}
HTTP CodeMeaning
400Bad request — invalid parameters
401Unauthorized — missing or invalid token
404Resource not found
409Conflict — device already paired, skill already installed
500Internal brain error