Rebrand NanoClaw to EJClaw
This commit is contained in:
44
docs/SPEC.md
44
docs/SPEC.md
@@ -1,4 +1,4 @@
|
||||
# NanoClaw Specification
|
||||
# EJClaw Specification
|
||||
|
||||
A personal Claude assistant with multi-channel support, persistent memory per conversation, scheduled tasks, and container-isolated agent execution.
|
||||
|
||||
@@ -314,12 +314,12 @@ nanoclaw/
|
||||
│ └── ipc/ # Container IPC (messages/, tasks/)
|
||||
│
|
||||
├── logs/ # Runtime logs (gitignored)
|
||||
│ ├── nanoclaw.log # Host stdout
|
||||
│ └── nanoclaw.error.log # Host stderr
|
||||
│ ├── ejclaw.log # Host stdout
|
||||
│ └── ejclaw.error.log # Host stderr
|
||||
│ # Note: Per-container logs are in groups/{folder}/logs/container-*.log
|
||||
│
|
||||
└── launchd/
|
||||
└── com.nanoclaw.plist # macOS service configuration
|
||||
└── com.ejclaw.plist # macOS service configuration
|
||||
```
|
||||
|
||||
---
|
||||
@@ -422,7 +422,7 @@ Files with `{{PLACEHOLDER}}` values need to be configured:
|
||||
|
||||
## Memory System
|
||||
|
||||
NanoClaw uses a hierarchical memory system based on CLAUDE.md files.
|
||||
EJClaw uses a hierarchical memory system based on CLAUDE.md files.
|
||||
|
||||
### Memory Hierarchy
|
||||
|
||||
@@ -555,7 +555,7 @@ This allows the agent to understand the conversation context even if it wasn't m
|
||||
|
||||
## Scheduled Tasks
|
||||
|
||||
NanoClaw has a built-in scheduler that runs tasks as full agents in their group's context.
|
||||
EJClaw has a built-in scheduler that runs tasks as full agents in their group's context.
|
||||
|
||||
### How Scheduling Works
|
||||
|
||||
@@ -616,7 +616,7 @@ From main channel:
|
||||
|
||||
## MCP Servers
|
||||
|
||||
### NanoClaw MCP (built-in)
|
||||
### EJClaw MCP (built-in)
|
||||
|
||||
The `nanoclaw` MCP server is created dynamically per agent call with the current group's context.
|
||||
|
||||
@@ -636,12 +636,12 @@ The `nanoclaw` MCP server is created dynamically per agent call with the current
|
||||
|
||||
## Deployment
|
||||
|
||||
NanoClaw runs as a single macOS launchd service.
|
||||
EJClaw runs as a single macOS launchd service.
|
||||
|
||||
### Startup Sequence
|
||||
|
||||
When NanoClaw starts, it:
|
||||
1. **Ensures container runtime is running** - Automatically starts it if needed; kills orphaned NanoClaw containers from previous runs
|
||||
When EJClaw starts, it:
|
||||
1. **Ensures container runtime is running** - Automatically starts it if needed; kills orphaned EJClaw containers from previous runs
|
||||
2. Initializes the SQLite database (migrates from JSON files if they exist)
|
||||
3. Loads state from SQLite (registered groups, sessions, router state)
|
||||
4. **Connects channels** — loops through registered channels, instantiates those with credentials, calls `connect()` on each
|
||||
@@ -652,16 +652,16 @@ When NanoClaw starts, it:
|
||||
- Recovers any unprocessed messages from before shutdown
|
||||
- Starts the message polling loop
|
||||
|
||||
### Service: com.nanoclaw
|
||||
### Service: com.ejclaw
|
||||
|
||||
**launchd/com.nanoclaw.plist:**
|
||||
**launchd/com.ejclaw.plist:**
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "...">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>com.nanoclaw</string>
|
||||
<string>com.ejclaw</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>{{NODE_PATH}}</string>
|
||||
@@ -683,9 +683,9 @@ When NanoClaw starts, it:
|
||||
<string>Andy</string>
|
||||
</dict>
|
||||
<key>StandardOutPath</key>
|
||||
<string>{{PROJECT_ROOT}}/logs/nanoclaw.log</string>
|
||||
<string>{{PROJECT_ROOT}}/logs/ejclaw.log</string>
|
||||
<key>StandardErrorPath</key>
|
||||
<string>{{PROJECT_ROOT}}/logs/nanoclaw.error.log</string>
|
||||
<string>{{PROJECT_ROOT}}/logs/ejclaw.error.log</string>
|
||||
</dict>
|
||||
</plist>
|
||||
```
|
||||
@@ -694,19 +694,19 @@ When NanoClaw starts, it:
|
||||
|
||||
```bash
|
||||
# Install service
|
||||
cp launchd/com.nanoclaw.plist ~/Library/LaunchAgents/
|
||||
cp launchd/com.ejclaw.plist ~/Library/LaunchAgents/
|
||||
|
||||
# Start service
|
||||
launchctl load ~/Library/LaunchAgents/com.nanoclaw.plist
|
||||
launchctl load ~/Library/LaunchAgents/com.ejclaw.plist
|
||||
|
||||
# Stop service
|
||||
launchctl unload ~/Library/LaunchAgents/com.nanoclaw.plist
|
||||
launchctl unload ~/Library/LaunchAgents/com.ejclaw.plist
|
||||
|
||||
# Check status
|
||||
launchctl list | grep nanoclaw
|
||||
|
||||
# View logs
|
||||
tail -f logs/nanoclaw.log
|
||||
tail -f logs/ejclaw.log
|
||||
```
|
||||
|
||||
---
|
||||
@@ -763,7 +763,7 @@ chmod 700 groups/
|
||||
| Issue | Cause | Solution |
|
||||
|-------|-------|----------|
|
||||
| No response to messages | Service not running | Check `launchctl list | grep nanoclaw` |
|
||||
| "Claude Code process exited with code 1" | Container runtime failed to start | Check logs; NanoClaw auto-starts container runtime but may fail |
|
||||
| "Claude Code process exited with code 1" | Container runtime failed to start | Check logs; EJClaw auto-starts container runtime but may fail |
|
||||
| "Claude Code process exited with code 1" | Session mount path wrong | Ensure mount is to `/home/node/.claude/` not `/root/.claude/` |
|
||||
| Session not continuing | Session ID not saved | Check SQLite: `sqlite3 store/messages.db "SELECT * FROM sessions"` |
|
||||
| Session not continuing | Mount path mismatch | Container user is `node` with HOME=/home/node; sessions must be at `/home/node/.claude/` |
|
||||
@@ -772,8 +772,8 @@ chmod 700 groups/
|
||||
|
||||
### Log Location
|
||||
|
||||
- `logs/nanoclaw.log` - stdout
|
||||
- `logs/nanoclaw.error.log` - stderr
|
||||
- `logs/ejclaw.log` - stdout
|
||||
- `logs/ejclaw.error.log` - stderr
|
||||
|
||||
### Debug Mode
|
||||
|
||||
|
||||
Reference in New Issue
Block a user