- Reset master to upstream/main (16,697 commits) - Overlay 2,271 local-only files (skills, tools, workspace, configs, apps) - Restore IDENTITY.md and USER.md templates - Build verified, gateway running, Discord working Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1.3 KiB
1.3 KiB
NODES.md — Node Model Implementation
Nodes are identified by environment variables. Each node runs a watcher and publishes to Redis.
Identity
Set these on every node:
JAMES_NODE— node name (example:node-a)JAMES_ROLE— role (example:storage,compute,control)
Watcher Run Example
PYTHONPATH=<repo-root>/workspace JAMES_NODE=node-a JAMES_ROLE=compute \
REDIS_URL=redis://:<pass>@127.0.0.1:6379/0 \
python3 workspace/james/agents/watcher/watcher.py
Node Registry
Watchers maintain a lightweight registry in Redis so other components can discover active nodes.
Keys:
james:nodes(set) — all known node namesjames:nodes:<node>(hash) — node metadata (role, last_seen, capabilities)james:nodes:last_seen(sorted set) — node last_seen timestamps
Defaults:
JAMES_NODE_REGISTRY=1(enabled)JAMES_NODE_REGISTRY_TTL=180seconds
If a node stops updating, its hash key expires automatically based on the TTL.
Node Health Event (example)
{
"node": "node-a",
"role": "compute",
"status": "degraded",
"issues": ["disk_usage_high"],
"timestamp": 1738678200
}
Capabilities
- Compute nodes: GPU and container metrics
- Storage nodes: disk and backup alerts
- Control nodes: Redis uptime and network health