create-walle 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/create-walle.js +276 -61
- package/package.json +1 -1
- package/template/CHANGELOG.md +44 -0
- package/template/bin/github-polish.sh +18 -0
- package/template/bin/install-service.sh +72 -0
- package/template/claude-task-manager/public/css/walle.css +9 -8
- package/template/claude-task-manager/public/index.html +1 -0
- package/template/claude-task-manager/public/setup.html +38 -1
- package/template/claude-task-manager/server.js +59 -0
- package/template/docs/site/astro.config.mjs +28 -0
- package/template/docs/site/package.json +19 -0
- package/template/docs/site/src/content/docs/api.md +189 -0
- package/template/docs/site/src/content/docs/guides/claude-code.md +62 -0
- package/template/docs/site/src/content/docs/guides/configuration.md +100 -0
- package/template/docs/site/src/content/docs/guides/quickstart.md +162 -0
- package/template/docs/site/src/content/docs/index.mdx +32 -0
- package/template/docs/site/src/content/docs/skills.md +137 -0
- package/template/docs/site/src/content.config.ts +7 -0
- package/template/package.json +11 -0
- package/template/wall-e/docs/specs/2026-04-01-publish-plan.md +2 -2
- package/template/wall-e/docs/specs/SKILL-FORMAT.md +1 -1
- package/template/wall-e/skills/_bundled/email-digest/SKILL.md +1 -1
- package/template/wall-e/skills/_bundled/email-sync/SKILL.md +1 -1
- package/template/wall-e/skills/_bundled/google-calendar/SKILL.md +1 -1
- package/template/wall-e/skills/_bundled/memory-search/SKILL.md +1 -1
- package/template/wall-e/skills/_bundled/morning-briefing/SKILL.md +1 -1
- package/template/wall-e/skills/_bundled/morning-briefing/run.js +110 -56
- package/template/wall-e/skills/_bundled/slack-backfill/SKILL.md +1 -1
- package/template/wall-e/skills/_bundled/slack-sync/SKILL.md +1 -1
|
@@ -144,6 +144,7 @@ const server = http.createServer((req, res) => {
|
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
// Redirect to setup page on first run (no API key configured)
|
|
147
|
+
// Only redirect root `/` — allow direct `/index.html` access so "Go to Dashboard" always works
|
|
147
148
|
if (url.pathname === '/' && setup.needsSetup()) {
|
|
148
149
|
res.writeHead(302, { 'Location': '/setup.html' });
|
|
149
150
|
res.end();
|
|
@@ -203,6 +204,64 @@ function handleApi(req, res, url) {
|
|
|
203
204
|
res.end(JSON.stringify({ owner_name: ownerName, has_api_key: hasApiKey, slack_connected: slackConnected, needs_setup: setup.needsSetup() }));
|
|
204
205
|
return;
|
|
205
206
|
}
|
|
207
|
+
if (url.pathname === '/api/setup/detect-key' && req.method === 'GET') {
|
|
208
|
+
let key = '';
|
|
209
|
+
let source = '';
|
|
210
|
+
|
|
211
|
+
// 1. Check process.env
|
|
212
|
+
if (process.env.ANTHROPIC_API_KEY && process.env.ANTHROPIC_API_KEY.startsWith('sk-ant-')) {
|
|
213
|
+
key = process.env.ANTHROPIC_API_KEY;
|
|
214
|
+
source = 'environment variable';
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// 2. Try shell profile
|
|
218
|
+
if (!key) {
|
|
219
|
+
try {
|
|
220
|
+
const { execFileSync } = require('child_process');
|
|
221
|
+
const shell = process.env.SHELL || '/bin/zsh';
|
|
222
|
+
const result = execFileSync(shell, ['-ilc', 'echo $ANTHROPIC_API_KEY'], { encoding: 'utf8', timeout: 3000 }).trim();
|
|
223
|
+
if (result && result.startsWith('sk-ant-')) { key = result; source = 'shell profile'; }
|
|
224
|
+
} catch {}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// 3. Try Claude Code OAuth token from macOS Keychain
|
|
228
|
+
if (!key && process.platform === 'darwin') {
|
|
229
|
+
try {
|
|
230
|
+
const { execFileSync } = require('child_process');
|
|
231
|
+
const credJson = execFileSync('security', ['find-generic-password', '-s', 'Claude Code-credentials', '-w'], { encoding: 'utf8', timeout: 3000 }).trim();
|
|
232
|
+
if (credJson) {
|
|
233
|
+
const cred = JSON.parse(credJson);
|
|
234
|
+
const oauth = cred.claudeAiOauth;
|
|
235
|
+
if (oauth && oauth.accessToken) {
|
|
236
|
+
const expired = oauth.expiresAt && oauth.expiresAt < Date.now();
|
|
237
|
+
if (!expired) {
|
|
238
|
+
key = oauth.accessToken;
|
|
239
|
+
source = 'Claude Code (OAuth)';
|
|
240
|
+
} else {
|
|
241
|
+
// Token expired — tell user to refresh
|
|
242
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
243
|
+
res.end(JSON.stringify({
|
|
244
|
+
found: false,
|
|
245
|
+
claude_code_expired: true,
|
|
246
|
+
hint: 'Found Claude Code, but the OAuth token has expired. Run "claude" in your terminal once to refresh it, then click Detect again.'
|
|
247
|
+
}));
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
} catch {}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
256
|
+
if (key) {
|
|
257
|
+
res.end(JSON.stringify({ found: true, key, source }));
|
|
258
|
+
} else if (process.env.ANTHROPIC_BASE_URL) {
|
|
259
|
+
res.end(JSON.stringify({ found: false, hint: 'Your environment uses an API gateway (' + process.env.ANTHROPIC_BASE_URL + '). You may not need a separate API key — try going to the dashboard.' }));
|
|
260
|
+
} else {
|
|
261
|
+
res.end(JSON.stringify({ found: false, hint: 'No API key found. Checked: environment variables, shell profile, Claude Code keychain. You can get a key at console.anthropic.com' }));
|
|
262
|
+
}
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
206
265
|
if (url.pathname === '/api/setup/save' && req.method === 'POST') {
|
|
207
266
|
let body = '';
|
|
208
267
|
let bodyLen = 0;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineConfig } from 'astro/config';
|
|
2
|
+
import starlight from '@astrojs/starlight';
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
site: 'https://walle.sh',
|
|
6
|
+
integrations: [
|
|
7
|
+
starlight({
|
|
8
|
+
title: 'Wall-E',
|
|
9
|
+
description: 'Your personal digital twin — documentation',
|
|
10
|
+
social: {
|
|
11
|
+
github: 'https://github.com/ShanniLi/tools',
|
|
12
|
+
},
|
|
13
|
+
sidebar: [
|
|
14
|
+
{
|
|
15
|
+
label: 'Getting Started',
|
|
16
|
+
autogenerate: { directory: 'guides' },
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
label: 'Reference',
|
|
20
|
+
items: [
|
|
21
|
+
{ label: 'Skills', link: '/skills/' },
|
|
22
|
+
{ label: 'API', link: '/api/' },
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
}),
|
|
27
|
+
],
|
|
28
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "walle-docs",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "astro dev",
|
|
7
|
+
"build": "astro build",
|
|
8
|
+
"preview": "astro preview"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@astrojs/starlight": "0.32.5",
|
|
12
|
+
"astro": "5.4.2",
|
|
13
|
+
"sharp": "^0.33.0"
|
|
14
|
+
},
|
|
15
|
+
"overrides": {
|
|
16
|
+
"@astrojs/sitemap": "3.3.0",
|
|
17
|
+
"zod-to-json-schema": "3.24.5"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: API Reference
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
CTM serves all APIs on port 3456. Wall-E APIs are proxied through CTM at `/api/wall-e/*`.
|
|
6
|
+
|
|
7
|
+
## Service Management
|
|
8
|
+
|
|
9
|
+
| Method | Path | Description |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| GET | `/api/services/status` | Returns running status and PIDs of CTM and Wall-E |
|
|
12
|
+
| POST | `/api/restart/ctm` | Restart the CTM server |
|
|
13
|
+
| POST | `/api/restart/walle` | Restart the Wall-E daemon |
|
|
14
|
+
| POST | `/api/start/walle` | Start the Wall-E daemon |
|
|
15
|
+
| POST | `/api/stop/walle` | Stop the Wall-E daemon |
|
|
16
|
+
|
|
17
|
+
### Example
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
curl -s http://localhost:3456/api/services/status
|
|
21
|
+
# {"ctm":{"running":true,"pid":1234,"uptime":3600},"walle":{"running":true,"pid":5678}}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Wall-E Brain
|
|
27
|
+
|
|
28
|
+
### GET /api/wall-e/status
|
|
29
|
+
|
|
30
|
+
Returns brain stats, owner info, and memory counts.
|
|
31
|
+
|
|
32
|
+
### GET /api/wall-e/memories
|
|
33
|
+
|
|
34
|
+
List memories with optional filters.
|
|
35
|
+
|
|
36
|
+
**Query params:**
|
|
37
|
+
- `source` — filter by source (`slack`, `calendar`, `email`, `ctm`)
|
|
38
|
+
- `since` — ISO 8601 timestamp, return memories after this time
|
|
39
|
+
- `limit` — max results (default: 50)
|
|
40
|
+
- `offset` — pagination offset
|
|
41
|
+
|
|
42
|
+
### GET /api/wall-e/knowledge
|
|
43
|
+
|
|
44
|
+
List knowledge entries.
|
|
45
|
+
|
|
46
|
+
**Query params:**
|
|
47
|
+
- `category` — filter by category
|
|
48
|
+
- `subject` — filter by subject
|
|
49
|
+
- `status` — filter by status (`active`, `superseded`, `retracted`)
|
|
50
|
+
- `limit`, `offset` — pagination
|
|
51
|
+
|
|
52
|
+
### GET /api/wall-e/people
|
|
53
|
+
|
|
54
|
+
List known people with relationship and trust info.
|
|
55
|
+
|
|
56
|
+
### GET /api/wall-e/timeline
|
|
57
|
+
|
|
58
|
+
Memory timeline ordered by timestamp DESC.
|
|
59
|
+
|
|
60
|
+
**Query params:**
|
|
61
|
+
- `limit` (default: 50)
|
|
62
|
+
- `offset`
|
|
63
|
+
|
|
64
|
+
### GET /api/wall-e/questions
|
|
65
|
+
|
|
66
|
+
List pending questions.
|
|
67
|
+
|
|
68
|
+
**Query params:**
|
|
69
|
+
- `status` — `pending`, `answered`, `inferred`
|
|
70
|
+
- `limit`
|
|
71
|
+
|
|
72
|
+
### GET /api/wall-e/brief
|
|
73
|
+
|
|
74
|
+
Get the latest daily briefing summary.
|
|
75
|
+
|
|
76
|
+
### POST /api/wall-e/chat
|
|
77
|
+
|
|
78
|
+
Send a message to Wall-E and get a response.
|
|
79
|
+
|
|
80
|
+
**Body:**
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"message": "What meetings do I have tomorrow?",
|
|
84
|
+
"channel": "ctm"
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Response:**
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"reply": "You have 3 meetings tomorrow...",
|
|
92
|
+
"tool_calls": []
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### GET /api/wall-e/stats
|
|
97
|
+
|
|
98
|
+
Brain statistics — memory counts by source, knowledge counts, people count.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Sessions
|
|
103
|
+
|
|
104
|
+
### GET /api/sessions
|
|
105
|
+
|
|
106
|
+
List active terminal sessions.
|
|
107
|
+
|
|
108
|
+
### WebSocket: ws://localhost:2001
|
|
109
|
+
|
|
110
|
+
Real-time terminal I/O for sessions. Messages:
|
|
111
|
+
|
|
112
|
+
- `{"type":"create","id":"uuid","cmd":"claude","label":"My Session"}` — create session
|
|
113
|
+
- `{"type":"input","id":"uuid","data":"text"}` — send input
|
|
114
|
+
- `{"type":"resize","id":"uuid","cols":80,"rows":24}` — resize terminal
|
|
115
|
+
- `{"type":"kill","id":"uuid"}` — kill session
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Prompts
|
|
120
|
+
|
|
121
|
+
### GET /api/prompts
|
|
122
|
+
|
|
123
|
+
List all prompts. Supports query params: `folder`, `starred`, `tag`, `search`.
|
|
124
|
+
|
|
125
|
+
### GET /api/prompts/:id
|
|
126
|
+
|
|
127
|
+
Get a single prompt with content, tags, and metadata.
|
|
128
|
+
|
|
129
|
+
### POST /api/prompts
|
|
130
|
+
|
|
131
|
+
Create a new prompt.
|
|
132
|
+
|
|
133
|
+
**Body:**
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"title": "My Prompt",
|
|
137
|
+
"content": "Prompt content here",
|
|
138
|
+
"content_html": "<p>Prompt content here</p>",
|
|
139
|
+
"tags": "[\"tag1\",\"tag2\"]",
|
|
140
|
+
"context_type": "general"
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### PUT /api/prompts/:id
|
|
145
|
+
|
|
146
|
+
Update a prompt.
|
|
147
|
+
|
|
148
|
+
### DELETE /api/prompts/:id
|
|
149
|
+
|
|
150
|
+
Delete a prompt.
|
|
151
|
+
|
|
152
|
+
### GET /api/prompts/:id/children
|
|
153
|
+
|
|
154
|
+
Get child prompts of a group/composite prompt.
|
|
155
|
+
|
|
156
|
+
### POST /api/prompts/:id/versions
|
|
157
|
+
|
|
158
|
+
Create a version snapshot of a prompt.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Tasks
|
|
163
|
+
|
|
164
|
+
### GET /api/tasks
|
|
165
|
+
|
|
166
|
+
List tasks. Supports query params: `status`, `type`, `skill`.
|
|
167
|
+
|
|
168
|
+
### POST /api/tasks
|
|
169
|
+
|
|
170
|
+
Create a task.
|
|
171
|
+
|
|
172
|
+
**Body:**
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"title": "Sync Calendar",
|
|
176
|
+
"type": "recurring",
|
|
177
|
+
"schedule": "every 30m",
|
|
178
|
+
"skill": "google-calendar",
|
|
179
|
+
"skill_config": "{\"days_back\":1,\"days_ahead\":14}"
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### PUT /api/tasks/:id
|
|
184
|
+
|
|
185
|
+
Update a task (status, schedule, config).
|
|
186
|
+
|
|
187
|
+
### DELETE /api/tasks/:id
|
|
188
|
+
|
|
189
|
+
Delete a task.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar:
|
|
3
|
+
order: 3
|
|
4
|
+
title: Claude Code Integration
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Wall-E can be used as an MCP server from Claude Code, giving Claude access to your personal knowledge base.
|
|
8
|
+
|
|
9
|
+
## Setup
|
|
10
|
+
|
|
11
|
+
Add Wall-E to your Claude Code MCP config (`~/.claude/mcp.json`):
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"mcpServers": {
|
|
16
|
+
"wall-e": {
|
|
17
|
+
"type": "http",
|
|
18
|
+
"url": "http://localhost:3457/mcp"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Start Wall-E's standalone HTTP server:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
cd wall-e
|
|
28
|
+
WALL_E_PORT=3457 node agent.js
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Available Tools
|
|
32
|
+
|
|
33
|
+
| Tool | Description |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `search_memories` | Full-text search across Slack, email, calendar memories |
|
|
36
|
+
| `calendar_events` | Get upcoming events with attendees, location, notes |
|
|
37
|
+
| `remember_fact` | Store new knowledge in the brain |
|
|
38
|
+
| `run_skill` | Execute any bundled or custom skill |
|
|
39
|
+
| `list_mcp_tools` | Discover tools from Wall-E's MCP connections |
|
|
40
|
+
|
|
41
|
+
## Example Prompts
|
|
42
|
+
|
|
43
|
+
Once connected, you can ask Claude Code:
|
|
44
|
+
|
|
45
|
+
- "What meetings do I have tomorrow?"
|
|
46
|
+
- "What did I discuss with Alice last week?"
|
|
47
|
+
- "Remember that I prefer Tailwind over Bootstrap"
|
|
48
|
+
- "Search my memories for the database migration discussion"
|
|
49
|
+
- "Run the morning briefing skill"
|
|
50
|
+
|
|
51
|
+
## Adding to Project CLAUDE.md
|
|
52
|
+
|
|
53
|
+
To give Claude Code automatic context about Wall-E in your projects:
|
|
54
|
+
|
|
55
|
+
```markdown
|
|
56
|
+
## Wall-E (Personal Digital Twin)
|
|
57
|
+
|
|
58
|
+
Wall-E is connected as an MCP server. Use it to:
|
|
59
|
+
- Search the owner's memories and knowledge base
|
|
60
|
+
- Check calendar events and meeting schedules
|
|
61
|
+
- Look up past Slack conversations for context
|
|
62
|
+
```
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar:
|
|
3
|
+
order: 2
|
|
4
|
+
title: Configuration
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Wall-E is configured through environment variables (`.env` file) and a JSON config file.
|
|
8
|
+
|
|
9
|
+
## Environment Variables
|
|
10
|
+
|
|
11
|
+
Copy `.env.example` to `.env` at the project root:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
cp .env.example .env
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Required
|
|
18
|
+
|
|
19
|
+
| Variable | Description |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `ANTHROPIC_API_KEY` | Your Anthropic API key. Required for Wall-E chat, think/reflect loops, and agent-mode skills. |
|
|
22
|
+
| `WALLE_OWNER_NAME` | Your full name. Used in system prompts and memory attribution. |
|
|
23
|
+
|
|
24
|
+
### Data Storage
|
|
25
|
+
|
|
26
|
+
| Variable | Default | Description |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `WALL_E_DATA_DIR` | `~/.walle/data` | Directory for Wall-E's brain database and backups |
|
|
29
|
+
| `CTM_DATA_DIR` | `~/.walle/data` | Directory for CTM's database, images, and backups |
|
|
30
|
+
|
|
31
|
+
### Slack Integration {#slack}
|
|
32
|
+
|
|
33
|
+
| Variable | Description |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `SLACK_TOKEN` | Slack user or bot token (starts with `xoxb-` or `xoxp-`) |
|
|
36
|
+
| `SLACK_BOT_TOKEN` | Slack bot token (for DM channel) |
|
|
37
|
+
| `SLACK_OWNER_USER_ID` | Your Slack user ID (e.g., `U0XXXXXXXX`). Used to detect message direction. |
|
|
38
|
+
| `SLACK_OWNER_HANDLE` | Your Slack handle (e.g., `your.name`). Used in search queries. |
|
|
39
|
+
|
|
40
|
+
### API Gateway
|
|
41
|
+
|
|
42
|
+
| Variable | Description |
|
|
43
|
+
|---|---|
|
|
44
|
+
| `ANTHROPIC_BASE_URL` | Override API endpoint (e.g., for Portkey gateway) |
|
|
45
|
+
| `ANTHROPIC_CUSTOM_HEADERS_B64` | Base64-encoded JSON headers for the gateway |
|
|
46
|
+
|
|
47
|
+
### Server
|
|
48
|
+
|
|
49
|
+
| Variable | Default | Description |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `CTM_PORT` | `3456` | CTM HTTP server port |
|
|
52
|
+
| `CTM_HOST` | `127.0.0.1` | CTM bind address |
|
|
53
|
+
| `WALL_E_PORT` | `3457` | Wall-E standalone HTTP port (when running separately) |
|
|
54
|
+
|
|
55
|
+
## Wall-E Config File
|
|
56
|
+
|
|
57
|
+
`wall-e/wall-e-config.json` controls the daemon behavior:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"owner": {
|
|
62
|
+
"name": "Your Name",
|
|
63
|
+
"first_name": "Your",
|
|
64
|
+
"last_name": "Name",
|
|
65
|
+
"timezone": "America/Los_Angeles"
|
|
66
|
+
},
|
|
67
|
+
"adapters": {
|
|
68
|
+
"ctm": { "enabled": true },
|
|
69
|
+
"slack": { "enabled": false }
|
|
70
|
+
},
|
|
71
|
+
"intervals": {
|
|
72
|
+
"ingest": 60000,
|
|
73
|
+
"think": 120000,
|
|
74
|
+
"reflect": 3600000,
|
|
75
|
+
"skills": 300000
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Calendar Sync {#calendar}
|
|
81
|
+
|
|
82
|
+
Calendar sync uses macOS EventKit (the same framework as the Calendar app). It reads all calendars synced to your Mac — Google Calendar, iCloud, Outlook, etc.
|
|
83
|
+
|
|
84
|
+
**Setup:**
|
|
85
|
+
|
|
86
|
+
1. The first time the calendar skill runs, macOS will prompt for Calendar access
|
|
87
|
+
2. Grant access to your terminal app in **System Settings > Privacy & Security > Calendars**
|
|
88
|
+
3. Events are synced every 30 minutes automatically
|
|
89
|
+
|
|
90
|
+
No additional configuration needed — it reads whatever calendars are visible in the macOS Calendar app.
|
|
91
|
+
|
|
92
|
+
## Email Sync
|
|
93
|
+
|
|
94
|
+
Email sync reads sent messages from macOS Mail using JXA (JavaScript for Automation).
|
|
95
|
+
|
|
96
|
+
**Setup:**
|
|
97
|
+
|
|
98
|
+
1. Ensure the macOS Mail app is configured with your email accounts
|
|
99
|
+
2. Grant Accessibility access to your terminal if prompted
|
|
100
|
+
3. Sent emails are synced every 30 minutes automatically
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar:
|
|
3
|
+
order: 1
|
|
4
|
+
title: Getting Started with Wall-E
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Get Wall-E running in under 2 minutes. No manual configuration needed — everything is auto-detected or configured in the browser.
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
- **Node.js** 18+ (recommended: 20+)
|
|
12
|
+
- **macOS** (for Calendar and Mail integration via EventKit/JXA)
|
|
13
|
+
- **Anthropic API key** ([get one here](https://console.anthropic.com/settings/keys))
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
### Option 1: npx (Recommended)
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx create-walle my-agent
|
|
21
|
+
cd my-agent
|
|
22
|
+
node claude-task-manager/server.js
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
That's it. Your name and timezone are auto-detected from `git config` and your system. Open **http://localhost:3456** — you'll be guided through the rest.
|
|
26
|
+
|
|
27
|
+
### Option 2: Clone manually
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git clone <repo-url> walle
|
|
31
|
+
cd walle
|
|
32
|
+
cd claude-task-manager && npm install && cd ..
|
|
33
|
+
cd wall-e && npm install && cd ..
|
|
34
|
+
node claude-task-manager/server.js
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Same result — the server auto-creates `.env` and config files on first run.
|
|
38
|
+
|
|
39
|
+
## Browser Setup
|
|
40
|
+
|
|
41
|
+
On first launch, you'll see the setup page at **http://localhost:3456/setup.html**:
|
|
42
|
+
|
|
43
|
+
### 1. Owner (auto-filled)
|
|
44
|
+
|
|
45
|
+
Your name is detected from `git config user.name`. Edit it if needed.
|
|
46
|
+
|
|
47
|
+
### 2. Anthropic API Key
|
|
48
|
+
|
|
49
|
+
Paste your API key. This powers Wall-E's chat, thinking, and reflection loops. Your key is stored locally in `.env` and never sent anywhere except the Anthropic API.
|
|
50
|
+
|
|
51
|
+
### 3. Integrations
|
|
52
|
+
|
|
53
|
+
Connect your data sources — all optional, enable any time:
|
|
54
|
+
|
|
55
|
+
| Integration | How to connect | What it does |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| **Slack** | Click "Connect" → OAuth in browser | Syncs messages, searches conversations |
|
|
58
|
+
| **Email** | Automatic on macOS | Reads sent mail via macOS Mail (AppleScript) |
|
|
59
|
+
| **Calendar** | Automatic on macOS | Syncs events via EventKit (Google, iCloud, Outlook) |
|
|
60
|
+
|
|
61
|
+
Slack uses the same OAuth flow as the Claude Code Slack integration — just click "Connect" and authorize in your browser. No tokens to copy-paste.
|
|
62
|
+
|
|
63
|
+
### 4. Save & Go
|
|
64
|
+
|
|
65
|
+
Hit **Save & Continue**, then click **Go to Dashboard →**. You're done.
|
|
66
|
+
|
|
67
|
+
## What You'll See
|
|
68
|
+
|
|
69
|
+
### Dashboard (http://localhost:3456)
|
|
70
|
+
|
|
71
|
+
The main interface has five tabs:
|
|
72
|
+
|
|
73
|
+
- **Sessions** — Terminal multiplexer for Claude Code. Create and manage multiple sessions.
|
|
74
|
+
- **Prompts** — Rich-text prompt editor with versioning, folders, and one-click send to any session.
|
|
75
|
+
- **Tasks** — Task dashboard with recurring tasks, skill execution, and live logs.
|
|
76
|
+
- **Wall-E** — Chat with your digital twin. Ask about your schedule, search memories, run skills.
|
|
77
|
+
- **Reviews** — Code review with inline diffs.
|
|
78
|
+
|
|
79
|
+
### Wall-E Chat
|
|
80
|
+
|
|
81
|
+
Open the **Wall-E** tab and start chatting:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
You: What meetings do I have tomorrow?
|
|
85
|
+
You: Summarize my Slack conversations from last week
|
|
86
|
+
You: What does Alice think about the migration plan?
|
|
87
|
+
You: Run the morning briefing skill
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Wall-E answers from its brain — your actual Slack messages, calendar events, and emails.
|
|
91
|
+
|
|
92
|
+
## Background Loops
|
|
93
|
+
|
|
94
|
+
Once running, Wall-E automatically:
|
|
95
|
+
|
|
96
|
+
| Loop | Interval | What it does |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| **Ingest** | 60s | Pulls new data from Claude Code session logs |
|
|
99
|
+
| **Think** | 2 min | Extracts knowledge from recent memories |
|
|
100
|
+
| **Reflect** | 1 hr | Generates daily summaries, resolves contradictions |
|
|
101
|
+
| **Skills** | 5 min | Runs scheduled skills (calendar sync, Slack sync, etc.) |
|
|
102
|
+
| **Tasks** | 30s | Executes due recurring tasks |
|
|
103
|
+
|
|
104
|
+
Wall-E starts with an empty brain and gets smarter over time as it ingests your data.
|
|
105
|
+
|
|
106
|
+
## Bundled Skills
|
|
107
|
+
|
|
108
|
+
These run automatically on a schedule:
|
|
109
|
+
|
|
110
|
+
| Skill | Schedule | Description |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| `google-calendar` | every 30 min | Syncs macOS Calendar events via EventKit |
|
|
113
|
+
| `slack-sync` | every 15 min | Incremental Slack message sync |
|
|
114
|
+
| `email-sync` | every 30 min | Syncs sent emails from macOS Mail |
|
|
115
|
+
| `morning-briefing` | daily 7am | AI-generated daily briefing |
|
|
116
|
+
| `memory-search` | on-demand | Full-text search across all memories |
|
|
117
|
+
| `slack-backfill` | manual | Full Slack history (2022–present) |
|
|
118
|
+
| `email-digest` | daily 7am | Email activity summary |
|
|
119
|
+
|
|
120
|
+
## Using with Claude Code
|
|
121
|
+
|
|
122
|
+
Wall-E can also run as an MCP server inside Claude Code, giving Claude access to your brain:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# In your Claude Code settings, add Wall-E as an MCP server:
|
|
126
|
+
{
|
|
127
|
+
"mcpServers": {
|
|
128
|
+
"walle": {
|
|
129
|
+
"type": "http",
|
|
130
|
+
"url": "http://localhost:3457/mcp"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
See [Claude Code Integration](claude-code.md) for the full guide.
|
|
137
|
+
|
|
138
|
+
## File Layout
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
walle/
|
|
142
|
+
├── claude-task-manager/ # CTM dashboard (port 3456)
|
|
143
|
+
│ ├── server.js # HTTP server + WebSocket
|
|
144
|
+
│ ├── public/ # Frontend (HTML/CSS/JS)
|
|
145
|
+
│ └── db.js # SQLite database
|
|
146
|
+
├── wall-e/ # Wall-E agent
|
|
147
|
+
│ ├── agent.js # Daemon entry point
|
|
148
|
+
│ ├── brain.js # SQLite brain database
|
|
149
|
+
│ ├── chat.js # Chat engine
|
|
150
|
+
│ ├── skills/ # Bundled + custom skills
|
|
151
|
+
│ └── loops/ # Ingest, think, reflect loops
|
|
152
|
+
├── .env # Your config (auto-generated, gitignored)
|
|
153
|
+
├── .env.example # Config template
|
|
154
|
+
└── bin/setup.js # First-run auto-setup
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Next Steps
|
|
158
|
+
|
|
159
|
+
- [Full Configuration Reference](configuration.md) — all environment variables and options
|
|
160
|
+
- [Skill Catalog](../skills/README.md) — bundled skills + how to create custom ones
|
|
161
|
+
- [API Reference](../api/README.md) — HTTP endpoints for CTM and Wall-E
|
|
162
|
+
- [Claude Code Integration](claude-code.md) — use Wall-E as an MCP server
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Wall-E Documentation
|
|
3
|
+
description: Your personal digital twin — learn how to install, configure, and extend Wall-E.
|
|
4
|
+
template: splash
|
|
5
|
+
hero:
|
|
6
|
+
title: Wall-E
|
|
7
|
+
tagline: Your personal digital twin — an AI agent that learns from your Slack, email, and calendar.
|
|
8
|
+
actions:
|
|
9
|
+
- text: Get Started
|
|
10
|
+
link: /docs/guides/quickstart/
|
|
11
|
+
icon: right-arrow
|
|
12
|
+
- text: View on GitHub
|
|
13
|
+
link: https://github.com/ShanniLi/tools
|
|
14
|
+
variant: minimal
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
import { Card, CardGrid } from '@astrojs/starlight/components';
|
|
18
|
+
|
|
19
|
+
<CardGrid>
|
|
20
|
+
<Card title="Quickstart" icon="rocket">
|
|
21
|
+
Get Wall-E running in under 2 minutes with `npx create-walle`.
|
|
22
|
+
</Card>
|
|
23
|
+
<Card title="Configuration" icon="setting">
|
|
24
|
+
Environment variables, data directories, and integration settings.
|
|
25
|
+
</Card>
|
|
26
|
+
<Card title="Skills" icon="puzzle">
|
|
27
|
+
7 bundled skills for Slack, email, calendar, and more. Create your own.
|
|
28
|
+
</Card>
|
|
29
|
+
<Card title="API Reference" icon="open-book">
|
|
30
|
+
HTTP endpoints for CTM and Wall-E.
|
|
31
|
+
</Card>
|
|
32
|
+
</CardGrid>
|