Rebrand NanoClaw to EJClaw

This commit is contained in:
Eyejoker
2026-03-19 03:31:41 +09:00
parent 29b78fc286
commit f2ad1331a9
44 changed files with 564 additions and 535 deletions

View File

@@ -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