Documentation · Synaptic Grid Online
AxonStellar Platform

Build, deploy, and orchestrate neural-grade services.

The complete reference for the AxonStellar platform — from your first service to autonomous agent orchestration. Everything an operator or agent needs to ship code into the constellation.

Introduction

AxonStellar is a neural-inspired orchestration platform. Services are neurons, traffic flows along axons, and autonomous agents reason at every synapse. The platform pairs a static infrastructure layer (nginx proxies, port allocation, SSL automation) with a dynamic agent layer (the Aexyr agent, Engram playbooks, Action Potential decision model).

This documentation covers everything in the constellation:

  • Quickstart — your first service in under five minutes
  • Architecture — proxies, tiers, traffic flow, port layout
  • Agent protocols — Action Potential, Synaptic Delegation, Engrams
  • API reference — every endpoint the platform exposes
  • Troubleshooting — common pitfalls and recovery paths
New here?

Start with Quickstart to ship a service, then read Core Concepts for the mental model.

Quickstart

Ship a new HTTPS-served service into the constellation in six steps. Each step takes seconds — most of the wall-clock time is waiting for the SSL certificate to propagate.

STEP 01

Pick a port

Choose a free port in the 9551–9580 tier-1 range.

STEP 02

Scaffold

Create /aexyr/usr/projects/<name>/ with your code.

STEP 03

Manifest

Write service.json — the entry ticket to the grid.

STEP 04

Launch

Use the Server Rack control API or nohup.

STEP 05

Provision SSL

POST to /api_certificates with your domain.

STEP 06

Assign

POST to /api_assignments — nginx wired automatically.

A minimal manifest

Every service must publish a service.json manifest. No manifest, no discovery, no orchestration. The bare minimum:

{
  "name": "My Service",
  "port": 9560,
  "role": "app",
  "tier": 1,
  "managed_by": "aexyr",
  "traffic_type": "nginx_proxy",
  "start_command": "node server.js",
  "working_directory": "/aexyr/usr/projects/myservice"
}
start_command is mandatory

Without it, Server Rack start/stop/restart buttons fail and the control API cannot manage the service lifecycle.

Launching the service

Two ways to start a service:

  1. Service Control API (preferred for services with a manifest):
import urllib.request, json
TOKEN = open('/aexyr/tmp/.internal_api_key').read().strip()
H = {'Content-Type': 'application/json', 'X-Internal-Auth': TOKEN}
body = json.dumps({'action': 'restart', 'port': 9560}).encode()
urllib.request.urlopen(urllib.request.Request(
    'http://127.0.0.1:80/visualizer_service_control',
    data=body, headers=H, method='POST'))
  1. Direct nohup (first-time deployment, before discovery):
cd /aexyr/usr/projects/myservice
nohup node server.js >> logs/app.log 2>&1 &

Core Concepts

Six ideas you must understand to operate in the constellation effectively.

ConceptWhat it is
ServiceA running process bound to a port, declared by service.json
ManifestThe service.json file — service's entry in the registry
Tier0=system · 1=app (9551–9580) · 2=microservice (35xx)
Proxy chainInternet → :443 → Web Proxy → :3550 Backend Proxy → service
EngramA stored agent playbook — a recipe for a recurring task
QuantaA spawned sub-agent for a delimited task

Architecture

AxonStellar runs inside a single Docker container with a layered network model. Each layer has one job and exposes a clear contract upward.

Traffic flow

Internet :443
   └──▶ nginx (Web Proxy, SSL termination)
          └──▶ Backend Proxy :3550
                 └──▶ Service :95xx (Tier 1)
                        └──▶ Microservice :35xx (Tier 2)

Reserved system ports

Five ports are owned by the platform and must never be reassigned:

PortServiceNotes
22SSHContainer shell access
44Process ManagerSupervisor & lifecycle control
80Aexyr UIuvicorn — agent console + APIs
443Web Proxynginx SSL termination
3550Backend ProxyRoutes to tier-1 services

Security model

Three distinct user identities collaborate via a privilege broker:

  • root (UID 0) — runs Flask/uvicorn backend, owns system configs
  • aexyr-user (UID 1100) — runs all agent code (terminal, python, nodejs)
  • web_serve (UID 1101) — privilege broker; owns shared credential files
sudo is not available

Blocked at the Docker level. Privileged operations (nginx restart, cert provisioning) MUST go through the internal API.

Services & Manifests

Services are discovered automatically by scanning /aexyr/usr/projects/*/service.json. The manifest is the source of truth for everything the platform needs to know about your service.

Manifest fields

FieldRequiredValues
nameyesDisplay name shown in Server Rack
portyesInteger 9551–9580 (tier 1) or 35xx (tier 2)
roleyesapp · database · cache · queue · auth · api
tieryes0 (system) · 1 (app) · 2 (microservice)
traffic_typeyesnginx_proxy · direct · internal_only
start_commandyesShell command to start (e.g., node server.js)
working_directoryyesAbsolute path to project directory
endpointsnoArray of {path, method, description}
connectionsnoEdges to other services (rendered in Topology)
tagsnoFree-form classification tags

Discovery sync

After creating, updating, or deleting a manifest, sync the registry:

# POST /manifests_sync — re-scans projects/ and updates the registry
curl -X POST http://127.0.0.1:80/manifests_sync \
     -H "X-Internal-Auth: $TOKEN" \
     -H "Content-Type: application/json" \
     -d '{}'

Networking & SSL

SSL is fully automated via Cloudflare DNS-01 challenges and Let's Encrypt. Two API calls take you from no certificate to a live HTTPS endpoint, typically in 60–90 seconds.

The two-phase workflow

  1. Provision the certificate — DNS challenge runs in the background
  2. Assign the cert to a service — nginx configured + restarted automatically
# Phase 1 — Provision (fire-and-forget)
body = json.dumps({'domain': 'myapp.example.com'}).encode()
urllib.request.urlopen(urllib.request.Request(
    'http://127.0.0.1:80/api_certificates?action=provision',
    data=body, headers=H, method='POST'))

# Phase 2 — Assign (after status == 'active')
body = json.dumps({'domain': 'myapp.example.com', 'servicePort': 9560}).encode()
urllib.request.urlopen(urllib.request.Request(
    'http://127.0.0.1:80/api_assignments',
    data=body, headers=H, method='POST'))
Automatic nginx wiring

POST /api_assignments writes the nginx SSL config, restarts nginx via supervisorctl, verifies the SSL handshake, and rolls back on failure. No manual nginx work required.

Never write nginx SSL configs manually

The assignment API is the only correct path. Manual edits will be overwritten on the next assignment and may bypass verification.

Agent Protocols

Aexyr operates under three interlocking protocols. Every autonomous action passes through them in sequence.

Action Potential

Before executing any tool call, Aexyr computes an activation:

z = (x₁ × 0.5) + (x₂ × 0.8) + (x₃ × 0.4) + b
Output = max(0, z)
  • x₁Confidence (0.0–1.0): certainty the action achieves the goal
  • x₂Safety (0.0–1.0): how safe (1.0=read, 0.0=destructive)
  • x₃Necessity (0.0–1.0): how strictly necessary
  • b — bias: −0.9 standard, −0.7 development mode

If Output > 0 the axon fires and the action executes. If Output == 0 the action is gated and Aexyr asks for confirmation.

Read-Before-Edit

Every file modification follows a strict five-step cycle. No exceptions.

  1. READ — open the file fresh; never edit from memory
  2. LOCATE — find the exact target with surrounding context
  3. ASSERT — verify the target string exists before replacing
  4. EDIT — surgical, targeted modification only
  5. VERIFY — read back and confirm the change landed

Documentation-Before-Response

After any change inside a project, the agent updates service_changelog.md and (when affected) service_blueprint.md before responding to the user. A change without a changelog entry is considered drift.

Engrams

Engrams are stored agent playbooks — sixteen battle-tested recipes spanning four categories. Each Engram is a complete spike train: ordered steps, expected outputs, and rollback conditions.

CategoryEngramsPurpose
CreationSiteBuild, Microservice, API Stub, …Scaffold new services from canonical templates
ManagementRestart, Reassign Cert, Migrate Port, …Lifecycle & configuration changes
Remediation502 Triage, Port Conflict, Cert Renewal, …Diagnose and resolve incidents
MonitoringHealth Sweep, Log Audit, Vitals Capture, …Observe and report platform state

Quanta & Delegation

When a task exceeds a single context window or requires specialized expertise, Aexyr dispatches a Quanta — a subordinate agent with a specific profile.

ProfileUse for
developerCode writing, debugging, refactoring
researcherWeb research, data analysis, reports
hackerSecurity auditing, penetration testing
defaultGeneral multi-step tasks
Spawn limit: 5 new Quanta per task

After five fresh spawns, Aexyr halts and performs a synaptic loop analysis to detect stalling or looping before continuing.

API Reference

All platform APIs are served from http://127.0.0.1:80 (uvicorn) and authenticated with the internal token:

export TOKEN=$(cat /aexyr/tmp/.internal_api_key)
curl -H "X-Internal-Auth: $TOKEN" http://127.0.0.1:80/manifests_list

Manifests

MethodEndpointPurpose
GET/manifests_listList all discovered services
POST/manifests_syncRe-scan and refresh the registry

Service control

MethodEndpointPurpose
POST/visualizer_service_controlStart, stop, or restart a service by port

SSL & assignments

MethodEndpointPurpose
POST/api_certificates?action=provisionProvision a new cert via DNS-01
GET/api_certificates?action=statusCheck provisioning status
GET/api_certificates?action=listList all certificates
GET/api_assignmentsList domain → service bindings
POST/api_assignmentsBind a cert to a service (writes nginx + restarts)
DELETE/api_assignments?id=…Unbind a domain

Engrams & agent

MethodEndpointPurpose
GET/engrams_listList available Engram playbooks
POST/engrams_executeExecute an Engram in chat or direct mode

Operations

MethodEndpointPurpose
GET/api_ops_systemSystem metrics — CPU, memory, disk
GET/api_ops_networkListeners and nginx state
GET/visualizer_vitalsReal-time vitals with history
GET/api_topologyNetwork graph (nodes + edges)

Troubleshooting

The top fifteen pitfalls baked into the agent's knowledge base, ordered by frequency.

#PitfallFix
1Shell escaping hell (echo, heredoc, special chars)Use Python open().write() for all file creation
2Coding against tools that don't existProbe with which first; use language-native alternatives
3Terminal session stalls (cat, curl in terminal)Use Python file I/O; service_health tool for checks
4Port already in use (EADDRINUSE)kill $(lsof -ti:<PORT>) 2>/dev/null; sleep 1
5Broad pkill kills sibling servicesKill by port or project path only — never broad patterns
6sed breaks on multi-line / special charsUse Python for any multi-line modification
7Service runs but invisible to platformCreate service.json in /aexyr/usr/projects/<name>/
8Express 5.x rejects bare * wildcardUse /{*splat} for catch-all routes
9Premature health check (curl right after launch)Wait 3+ seconds after launch; use service_health
10Forgetting to restart after code changesKill by port, relaunch, verify with service_health
The 3-Attempt Rule

If the same error appears three times in a row, the agent stops, reads the entire file, and rewrites the affected section from a known-working template.

Changelog

Documentation site versions:

  • v0.0.1 — 2026-05-25 — Initial documentation site. Nine sections covering quickstart, architecture, services, networking, agent protocols, Engrams, delegation, API reference, troubleshooting.