@lakitu/sdk 0.1.3 → 0.1.4
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/README.md +85 -423
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
# @lakitu/sdk
|
|
6
6
|
|
|
7
|
-
>
|
|
7
|
+
> Self-hosted AI agent runtime for [Convex](https://convex.dev) + [E2B](https://e2b.dev)
|
|
8
8
|
|
|
9
|
-
Lakitu is a framework for
|
|
9
|
+
Lakitu is a framework for AI agents that execute code instead of making tool calls. The agent writes TypeScript, imports capabilities from KSA modules, and runs in an isolated E2B sandbox with its own filesystem, terminal, and database.
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
npx @lakitu/sdk init
|
|
@@ -14,469 +14,164 @@ npx @lakitu/sdk init
|
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## Why Lakitu?
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
**The core problem:** AI coding agents forget their plan halfway through complex tasks, corrupt the host environment, and hallucinate progress they haven't made.
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|--------------|--------------|------------|
|
|
23
|
-
| **Agentic Amnesia** | Agent completes 30% of work, declares victory | Context window fills with noise, plan is forgotten |
|
|
24
|
-
| **Environment Corruption** | Agent breaks the host system | No execution isolation |
|
|
25
|
-
| **Behavioral Drift** | Agent ignores instructions over time | Competencies buried in monolithic prompts |
|
|
26
|
-
| **State Blindness** | Agent hallucinates progress | No structured state to verify against |
|
|
21
|
+
**Lakitu's solution:** Give the agent an isolated computer (E2B sandbox), structured capabilities (KSA files), persistent memory (Beads task graph), and verifiable state (Convex database).
|
|
27
22
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
│ │
|
|
35
|
-
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────┐ │
|
|
36
|
-
│ │ E2B Sandbox │ │ KSA Files │ │ Beads │ │ Convex │ │
|
|
37
|
-
│ │ (Security) │ │ (Competency) │ │ (Memory) │ │(State) │ │
|
|
38
|
-
│ └──────────────┘ └──────────────┘ └──────────────┘ └────────┘ │
|
|
39
|
-
│ │ │ │ │ │
|
|
40
|
-
│ ▼ ▼ ▼ ▼ │
|
|
41
|
-
│ Hardware-level Structured Git-backed Real-time │
|
|
42
|
-
│ isolation via behavioral task graph reactive │
|
|
43
|
-
│ Firecracker configuration with decay database │
|
|
44
|
-
│ microVMs & modular skills & forensics │
|
|
45
|
-
│ │
|
|
46
|
-
└─────────────────────────────────────────────────────────────────────┘
|
|
47
|
-
```
|
|
23
|
+
| Component | What it solves |
|
|
24
|
+
|-----------|----------------|
|
|
25
|
+
| **E2B Sandbox** | Agent gets its own VM—can't break your machine. Boots in 150ms. |
|
|
26
|
+
| **KSA Files** | Agent capabilities defined in code, not buried in prompts. Testable, version-controlled. |
|
|
27
|
+
| **Beads** | Git-backed task graph. Agent always knows what's done, what's blocked, what's next. |
|
|
28
|
+
| **Convex** | Real-time database in the sandbox. Agent can verify actual state, not just claim progress. |
|
|
48
29
|
|
|
49
30
|
---
|
|
50
31
|
|
|
51
|
-
##
|
|
52
|
-
|
|
53
|
-
Traditional agents use JSON tool calls. Lakitu agents write and execute code:
|
|
32
|
+
## Code Execution vs Tool Calls
|
|
54
33
|
|
|
34
|
+
Most agent frameworks use JSON tool calls:
|
|
35
|
+
```json
|
|
36
|
+
{ "tool": "readFile", "args": { "path": "app.ts" } }
|
|
55
37
|
```
|
|
56
|
-
Traditional Agent: Lakitu Agent:
|
|
57
|
-
┌───────────────────┐ ┌───────────────────┐
|
|
58
|
-
│ LLM Response │ │ LLM Response │
|
|
59
|
-
│ { │ │ ```typescript │
|
|
60
|
-
│ "tool": "x", │ vs │ import { x } │
|
|
61
|
-
│ "args": {...} │ │ await x(...) │
|
|
62
|
-
│ } │ │ ``` │
|
|
63
|
-
└────────┬──────────┘ └────────┬──────────┘
|
|
64
|
-
│ │
|
|
65
|
-
Parse JSON Execute TypeScript
|
|
66
|
-
Route to executor in E2B sandbox
|
|
67
|
-
│ │
|
|
68
|
-
┌────▼────┐ ┌───────▼───────┐
|
|
69
|
-
│ Limited │ │ Full Computer │
|
|
70
|
-
│ Actions │ │ File, Shell, │
|
|
71
|
-
└─────────┘ │ Browser, etc. │
|
|
72
|
-
└───────────────┘
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
**Why code execution?**
|
|
76
|
-
|
|
77
|
-
- **Token Efficient** — No tool schemas sent every request (saves 40-60% tokens)
|
|
78
|
-
- **Composable** — Chain operations naturally: `const data = await fetch(); await process(data);`
|
|
79
|
-
- **Debuggable** — See exactly what code ran, not just tool call logs
|
|
80
|
-
- **Model Agnostic** — Any LLM that generates code works
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## The Four Pillars
|
|
85
|
-
|
|
86
|
-
### 1. E2B Sandbox — Hardware-Level Security
|
|
87
|
-
|
|
88
|
-
Agents need filesystem access and terminal commands. Running this on your machine is dangerous. Lakitu uses [E2B](https://e2b.dev) sandboxes powered by **Firecracker microVMs**—the same technology AWS uses for Lambda.
|
|
89
|
-
|
|
90
|
-
| Metric | Docker | E2B Firecracker |
|
|
91
|
-
|--------|--------|-----------------|
|
|
92
|
-
| Startup | 500ms - 2s | **~150ms** |
|
|
93
|
-
| Isolation | OS-level (namespaces) | **Hardware-level (KVM)** |
|
|
94
|
-
| Security | Process boundaries | **Full VM isolation** |
|
|
95
|
-
| Persistence | Ephemeral | **Up to 14 days** |
|
|
96
|
-
|
|
97
|
-
The agent gets its own cloud computer where it can install packages, run tests, and verify actions—without any risk to your environment.
|
|
98
38
|
|
|
39
|
+
Lakitu agents write code:
|
|
99
40
|
```typescript
|
|
100
|
-
// Agent writes code that executes in the sandbox
|
|
101
41
|
import { file, shell } from './ksa';
|
|
102
42
|
|
|
103
|
-
await file.
|
|
43
|
+
const code = await file.read('app.ts');
|
|
44
|
+
await file.write('app.ts', fixedCode);
|
|
104
45
|
const result = await shell.exec('bun test');
|
|
105
|
-
|
|
106
|
-
if (result.exitCode !== 0) {
|
|
107
|
-
// Agent can read errors and self-correct
|
|
108
|
-
const errors = await file.read('test-output.log');
|
|
109
|
-
// ... fix and retry
|
|
110
|
-
}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### 2. KSA Files — Structured Competency
|
|
114
|
-
|
|
115
|
-
The "monolithic prompt" problem: instructions, persona, and tool definitions crammed into one system message leads to behavioral drift. Lakitu introduces **KSA (Knowledge, Skills, and Abilities) files**—a framework borrowed from industrial-organizational psychology.
|
|
116
|
-
|
|
117
|
-
| Component | Definition | Agent Example |
|
|
118
|
-
|-----------|------------|---------------|
|
|
119
|
-
| **Knowledge** | Theoretical understanding | "TypeScript generics", "REST API design" |
|
|
120
|
-
| **Skills** | Practical application | "Writing unit tests", "Database migrations" |
|
|
121
|
-
| **Abilities** | Underlying capabilities | "Multi-step reasoning", "Self-correction" |
|
|
122
|
-
|
|
123
|
-
Instead of prose prompts, you define machine-readable competency files:
|
|
124
|
-
|
|
125
|
-
```typescript
|
|
126
|
-
import { defineKSA, fn, service } from "@lakitu/sdk";
|
|
127
|
-
|
|
128
|
-
export const migrationKSA = defineKSA("database-migrations")
|
|
129
|
-
.description("Perform zero-downtime database migrations")
|
|
130
|
-
.category("skills")
|
|
131
|
-
|
|
132
|
-
.fn("planMigration", fn()
|
|
133
|
-
.description("Analyze schema changes and create migration plan")
|
|
134
|
-
.param("currentSchema", { type: "string", required: true })
|
|
135
|
-
.param("targetSchema", { type: "string", required: true })
|
|
136
|
-
.impl(service("services.Migration.internal.plan"))
|
|
137
|
-
)
|
|
138
|
-
|
|
139
|
-
.fn("executeMigration", fn()
|
|
140
|
-
.description("Run migration with rollback capability")
|
|
141
|
-
.param("plan", { type: "object", required: true })
|
|
142
|
-
.param("dryRun", { type: "boolean", default: true })
|
|
143
|
-
.impl(service("services.Migration.internal.execute"))
|
|
144
|
-
)
|
|
145
|
-
|
|
146
|
-
.build();
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
This achieves **behavioral firmware**—stable, testable, version-controlled agent capabilities.
|
|
150
|
-
|
|
151
|
-
### 3. Beads — Git-Backed Task Memory
|
|
152
|
-
|
|
153
|
-
Markdown todo lists fail because they're unstructured and fall out of sync. Agents using them complete a subtask, forget the six-phase plan, and declare victory at 30%.
|
|
154
|
-
|
|
155
|
-
**Beads** is a git-backed graph issue tracker designed for AI agents:
|
|
156
|
-
|
|
157
|
-
```bash
|
|
158
|
-
bd init # Initialize task database
|
|
159
|
-
bd create "Migrate to Riverpod" -t epic
|
|
160
|
-
bd create "Setup dependencies" --parent bd-a1b2
|
|
161
|
-
bd ready # List unblocked tasks
|
|
162
|
-
bd update bd-c3d4 --status in_progress
|
|
163
|
-
bd close bd-c3d4 --reason "Migration complete"
|
|
164
|
-
bd compact # Summarize old tasks, preserve context
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
**Key features:**
|
|
168
|
-
|
|
169
|
-
- **Dependency-aware**: `bd ready` returns only unblocked tasks
|
|
170
|
-
- **Hash-based IDs**: No merge conflicts in multi-agent workflows
|
|
171
|
-
- **Semantic decay**: `bd compact` summarizes 100 lines of history into 5 lines of context
|
|
172
|
-
- **Forensic audit**: Every task change is tracked in git
|
|
173
|
-
|
|
174
|
-
```
|
|
175
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
176
|
-
│ BEADS TASK GRAPH │
|
|
177
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
178
|
-
│ │
|
|
179
|
-
│ [Epic: Migrate App] │
|
|
180
|
-
│ │ │
|
|
181
|
-
│ ┌────┴────┐ │
|
|
182
|
-
│ ▼ ▼ │
|
|
183
|
-
│ [Setup] [Core Migration] │
|
|
184
|
-
│ │ │ │
|
|
185
|
-
│ ▼ ┌────┴────┐ │
|
|
186
|
-
│ ✓ [Service A] [Service B] ← blocked by Service A │
|
|
187
|
-
│ │ │
|
|
188
|
-
│ ▼ │
|
|
189
|
-
│ [discovered: memory leak] ← auto-created during work │
|
|
190
|
-
│ │
|
|
191
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
192
46
|
```
|
|
193
47
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
- **State Persistence**: Complex application state survives process restarts
|
|
201
|
-
- **Reactive Orchestration**: Database changes trigger functions—coordinate multi-agent swarms
|
|
202
|
-
- **Verification**: Agent can check actual state vs. claimed progress (prevents hallucinated completion)
|
|
203
|
-
- **Full-Stack Autonomy**: Agent can develop, deploy, and manage entire applications
|
|
204
|
-
|
|
205
|
-
```typescript
|
|
206
|
-
// Agent stores structured state, not just files
|
|
207
|
-
await ctx.runMutation(api.tasks.complete, {
|
|
208
|
-
taskId: "bd-a1b2",
|
|
209
|
-
result: { filesChanged: 3, testsPass: true }
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
// Other agents (or humans) see updates instantly
|
|
213
|
-
const status = await ctx.runQuery(api.project.status);
|
|
214
|
-
// { completed: 23, remaining: 4, blocked: 1 }
|
|
215
|
-
```
|
|
48
|
+
**Why this is better:**
|
|
49
|
+
- No tool schemas sent every request (saves 40-60% tokens)
|
|
50
|
+
- Natural composition—chain operations like normal code
|
|
51
|
+
- See exactly what ran, not just "tool was called"
|
|
52
|
+
- Works with any LLM that generates code
|
|
216
53
|
|
|
217
54
|
---
|
|
218
55
|
|
|
219
56
|
## Quick Start
|
|
220
57
|
|
|
221
|
-
###
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
npm install @lakitu/sdk
|
|
225
|
-
# or
|
|
226
|
-
bun add @lakitu/sdk
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
### Initialize in Your Convex Project
|
|
58
|
+
### 1. Initialize
|
|
230
59
|
|
|
231
60
|
```bash
|
|
232
61
|
npx @lakitu/sdk init
|
|
233
62
|
```
|
|
234
63
|
|
|
235
|
-
|
|
236
|
-
```
|
|
237
|
-
convex/
|
|
238
|
-
└── lakitu/
|
|
239
|
-
├── config.ts # Framework configuration
|
|
240
|
-
└── example.ts # Example KSA to get started
|
|
241
|
-
```
|
|
64
|
+
Creates `convex/lakitu/config.ts` and an example KSA.
|
|
242
65
|
|
|
243
|
-
### Build
|
|
66
|
+
### 2. Build sandbox template
|
|
244
67
|
|
|
245
68
|
```bash
|
|
246
69
|
npx @lakitu/sdk build
|
|
247
70
|
```
|
|
248
71
|
|
|
249
|
-
|
|
250
|
-
1. Starts a local Convex backend
|
|
251
|
-
2. Pre-deploys your functions
|
|
252
|
-
3. Builds an E2B template with everything baked in
|
|
253
|
-
4. Sandboxes boot in ~150ms with functions ready
|
|
72
|
+
Pre-deploys Convex functions into an E2B template. Sandboxes boot instantly with everything ready.
|
|
254
73
|
|
|
255
|
-
### Configure
|
|
256
|
-
|
|
257
|
-
Edit `convex/lakitu/config.ts`:
|
|
74
|
+
### 3. Configure
|
|
258
75
|
|
|
259
76
|
```typescript
|
|
77
|
+
// convex/lakitu/config.ts
|
|
260
78
|
import { Lakitu } from "@lakitu/sdk";
|
|
261
79
|
|
|
262
80
|
export default Lakitu.configure({
|
|
263
81
|
template: "lakitu",
|
|
264
82
|
model: "anthropic/claude-sonnet-4-20250514",
|
|
265
|
-
|
|
266
|
-
ksas: [
|
|
267
|
-
// Core capabilities
|
|
268
|
-
"file", "shell", "browser", "beads",
|
|
269
|
-
|
|
270
|
-
// Your custom KSAs
|
|
271
|
-
"./migrations",
|
|
272
|
-
"./testing",
|
|
273
|
-
],
|
|
274
|
-
|
|
275
|
-
pool: {
|
|
276
|
-
min: 0,
|
|
277
|
-
max: 5,
|
|
278
|
-
idleTimeout: 300_000,
|
|
279
|
-
},
|
|
83
|
+
ksas: ["file", "shell", "browser", "beads"],
|
|
280
84
|
});
|
|
281
85
|
```
|
|
282
86
|
|
|
283
87
|
---
|
|
284
88
|
|
|
285
|
-
##
|
|
286
|
-
|
|
287
|
-
| Command | Description |
|
|
288
|
-
|---------|-------------|
|
|
289
|
-
| `npx @lakitu/sdk init` | Initialize Lakitu in your Convex project |
|
|
290
|
-
| `npx @lakitu/sdk init --dir ./convex` | Specify custom Convex directory |
|
|
291
|
-
| `npx @lakitu/sdk build` | Build E2B template (base + custom) |
|
|
292
|
-
| `npx @lakitu/sdk build --base` | Build base template only |
|
|
293
|
-
| `npx @lakitu/sdk build --custom` | Build custom template only |
|
|
294
|
-
| `npx @lakitu/sdk publish` | Manage E2B templates |
|
|
295
|
-
|
|
296
|
-
---
|
|
297
|
-
|
|
298
|
-
## KSA SDK Reference
|
|
89
|
+
## Defining KSAs
|
|
299
90
|
|
|
300
|
-
|
|
91
|
+
KSAs (Knowledge, Skills, Abilities) are capability modules. Instead of prompt engineering, you define what the agent can do in TypeScript:
|
|
301
92
|
|
|
302
93
|
```typescript
|
|
303
|
-
import { defineKSA, fn, service, primitive
|
|
94
|
+
import { defineKSA, fn, service, primitive } from "@lakitu/sdk";
|
|
304
95
|
|
|
305
|
-
export const
|
|
306
|
-
.description("
|
|
307
|
-
.category("skills")
|
|
308
|
-
|
|
309
|
-
.
|
|
96
|
+
export const dbKSA = defineKSA("database")
|
|
97
|
+
.description("Database operations")
|
|
98
|
+
.category("skills")
|
|
99
|
+
|
|
100
|
+
.fn("migrate", fn()
|
|
101
|
+
.description("Run database migration")
|
|
102
|
+
.param("version", { type: "string", required: true })
|
|
103
|
+
.impl(service("services.Database.internal.migrate"))
|
|
104
|
+
)
|
|
310
105
|
|
|
311
|
-
.fn("
|
|
312
|
-
.description("
|
|
313
|
-
.
|
|
314
|
-
.param("limit", { type: "number", default: 10 })
|
|
315
|
-
.returns<ResultType>()
|
|
316
|
-
.impl(/* implementation */)
|
|
106
|
+
.fn("backup", fn()
|
|
107
|
+
.description("Create database backup")
|
|
108
|
+
.impl(primitive("shell.exec"))
|
|
317
109
|
)
|
|
318
110
|
|
|
319
111
|
.build();
|
|
320
112
|
```
|
|
321
113
|
|
|
322
|
-
### Implementation
|
|
114
|
+
### Implementation types
|
|
323
115
|
|
|
324
|
-
**Service** —
|
|
116
|
+
**Service** — calls your Convex backend:
|
|
325
117
|
```typescript
|
|
326
|
-
.impl(service("services.
|
|
327
|
-
.mapArgs(({ input }) => ({ data: input }))
|
|
328
|
-
.mapResult(r => r.value)
|
|
329
|
-
)
|
|
118
|
+
.impl(service("services.MyApi.internal.doThing"))
|
|
330
119
|
```
|
|
331
120
|
|
|
332
|
-
**Primitive** —
|
|
121
|
+
**Primitive** — local sandbox operation:
|
|
333
122
|
```typescript
|
|
334
123
|
.impl(primitive("file.read"))
|
|
335
124
|
.impl(primitive("shell.exec"))
|
|
336
125
|
.impl(primitive("browser.screenshot"))
|
|
337
126
|
```
|
|
338
127
|
|
|
339
|
-
|
|
340
|
-
```typescript
|
|
341
|
-
.impl(composite()
|
|
342
|
-
.call("file.read", { path: "./config.json" }, "config")
|
|
343
|
-
.call("myKsa.process", ctx => ({ data: ctx.vars.config }), "result")
|
|
344
|
-
.return(ctx => ctx.vars.result)
|
|
345
|
-
)
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
### Available Primitives
|
|
349
|
-
|
|
350
|
-
| Category | Operations |
|
|
351
|
-
|----------|------------|
|
|
352
|
-
| **file** | `read`, `write`, `edit`, `glob`, `grep`, `ls`, `exists`, `stat` |
|
|
353
|
-
| **shell** | `exec` |
|
|
354
|
-
| **browser** | `open`, `screenshot`, `click`, `type`, `getHtml`, `getText`, `close` |
|
|
128
|
+
### Built-in primitives
|
|
355
129
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
.param("enabled", { type: "boolean", default: false })
|
|
362
|
-
.param("items", { type: "array" })
|
|
363
|
-
.param("config", { type: "object" })
|
|
364
|
-
```
|
|
130
|
+
| Category | Functions |
|
|
131
|
+
|----------|-----------|
|
|
132
|
+
| `file` | `read`, `write`, `edit`, `glob`, `grep`, `ls`, `exists`, `stat` |
|
|
133
|
+
| `shell` | `exec` |
|
|
134
|
+
| `browser` | `open`, `screenshot`, `click`, `type`, `getHtml`, `getText`, `close` |
|
|
365
135
|
|
|
366
136
|
---
|
|
367
137
|
|
|
368
138
|
## Built-in KSAs
|
|
369
139
|
|
|
370
|
-
|
|
|
371
|
-
|
|
372
|
-
|
|
|
373
|
-
|
|
|
374
|
-
|
|
|
375
|
-
|
|
|
376
|
-
|
|
|
377
|
-
|
|
|
378
|
-
|
|
|
379
|
-
| | `companies` | Company enrichment and tech stacks |
|
|
380
|
-
| **Deliverables** | `pdf` | PDF generation from markdown |
|
|
381
|
-
| | `email` | Email composition and sending |
|
|
140
|
+
| KSA | What it does |
|
|
141
|
+
|-----|--------------|
|
|
142
|
+
| `file` | Filesystem operations |
|
|
143
|
+
| `shell` | Terminal commands |
|
|
144
|
+
| `browser` | Web automation via Playwright |
|
|
145
|
+
| `beads` | Task tracking (`bd ready`, `bd close`, etc.) |
|
|
146
|
+
| `web` | Search and scrape |
|
|
147
|
+
| `pdf` | Generate PDFs from markdown |
|
|
148
|
+
| `email` | Send emails |
|
|
382
149
|
|
|
383
150
|
---
|
|
384
151
|
|
|
385
|
-
##
|
|
386
|
-
|
|
387
|
-
A complete example of how the four pillars work together:
|
|
388
|
-
|
|
389
|
-
### Phase 1: Planning & Competency Loading
|
|
390
|
-
|
|
391
|
-
```bash
|
|
392
|
-
# Developer initializes project
|
|
393
|
-
bd init
|
|
394
|
-
bd create "Migrate Flutter app from Provider to Riverpod" -t epic
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
Agent loads relevant KSAs: `flutter-widgets`, `riverpod-state`, `testing`.
|
|
398
|
-
|
|
399
|
-
### Phase 2: Execution in Secure Sandbox
|
|
400
|
-
|
|
401
|
-
```typescript
|
|
402
|
-
// Agent queries for unblocked work
|
|
403
|
-
const tasks = await beads.getReady();
|
|
404
|
-
// → [{ id: "bd-a1b2", title: "Setup Riverpod dependencies" }]
|
|
405
|
-
|
|
406
|
-
// Works in isolated E2B environment
|
|
407
|
-
await shell.exec("flutter pub add flutter_riverpod");
|
|
408
|
-
await file.edit("pubspec.yaml", oldDeps, newDeps);
|
|
409
|
-
|
|
410
|
-
// Runs tests to verify
|
|
411
|
-
const result = await shell.exec("flutter test");
|
|
412
|
-
if (result.exitCode !== 0) {
|
|
413
|
-
// Self-corrects based on error output
|
|
414
|
-
}
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
### Phase 3: Continuous Memory Management
|
|
418
|
-
|
|
419
|
-
```typescript
|
|
420
|
-
// Agent completes task
|
|
421
|
-
await beads.close("bd-a1b2", "Dependencies configured");
|
|
422
|
-
|
|
423
|
-
// Discovers secondary issue during work
|
|
424
|
-
await beads.create({
|
|
425
|
-
title: "Memory leak in Widget #22",
|
|
426
|
-
type: "bug",
|
|
427
|
-
discoveredFrom: "bd-a1b2"
|
|
428
|
-
});
|
|
429
|
-
|
|
430
|
-
// Periodic compaction keeps context fresh
|
|
431
|
-
await beads.compact(); // 100 lines → 5 line summary
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
### Phase 4: Session Handoff
|
|
152
|
+
## CLI Commands
|
|
435
153
|
|
|
436
154
|
```bash
|
|
437
|
-
#
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
bd ready # Immediately oriented to project state
|
|
155
|
+
npx @lakitu/sdk init # Setup in Convex project
|
|
156
|
+
npx @lakitu/sdk init --dir ./convex # Custom directory
|
|
157
|
+
npx @lakitu/sdk build # Build E2B template
|
|
158
|
+
npx @lakitu/sdk build --base # Base template only
|
|
159
|
+
npx @lakitu/sdk build --custom # Custom template only
|
|
160
|
+
npx @lakitu/sdk publish # Template management
|
|
444
161
|
```
|
|
445
162
|
|
|
446
163
|
---
|
|
447
164
|
|
|
448
|
-
##
|
|
165
|
+
## How the pieces fit together
|
|
449
166
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
│ │ │ file │ │ web │ │ news │ │ social │ │ email │ │companies│ │ │
|
|
459
|
-
│ │ └──────┘ └──────┘ └───────┘ └─────────┘ └───────┘ └─────────┘ │ │
|
|
460
|
-
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
461
|
-
│ │ │
|
|
462
|
-
│ Local ops │ Gateway calls │
|
|
463
|
-
│ ▼ │
|
|
464
|
-
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
465
|
-
│ │ CLOUD GATEWAY │ │
|
|
466
|
-
│ │ HTTP → Convex Services (LLMs, APIs, External Data) │ │
|
|
467
|
-
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
468
|
-
│ │
|
|
469
|
-
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────┐ │
|
|
470
|
-
│ │ /workspace/ │ │ /artifacts/ │ │ .beads/ │ │
|
|
471
|
-
│ │ Working files │ │ PDFs, images │ │ Task graph (JSONL) │ │
|
|
472
|
-
│ └─────────────────┘ └─────────────────┘ └─────────────────────┘ │
|
|
473
|
-
│ │
|
|
474
|
-
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
475
|
-
│ │ LOCALIZED CONVEX │ │
|
|
476
|
-
│ │ Real-time state • Reactive triggers • Multi-agent coordination │ │
|
|
477
|
-
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
478
|
-
└─────────────────────────────────────────────────────────────────────────┘
|
|
479
|
-
```
|
|
167
|
+
1. **Agent receives task** → loads relevant KSAs
|
|
168
|
+
2. **Queries Beads** → `bd ready` returns unblocked work
|
|
169
|
+
3. **Executes in sandbox** → writes code using KSA functions
|
|
170
|
+
4. **Verifies via Convex** → checks actual state matches expected
|
|
171
|
+
5. **Updates Beads** → marks tasks done, creates follow-ups
|
|
172
|
+
6. **Session ends** → `bd sync` persists everything to git
|
|
173
|
+
|
|
174
|
+
The agent can pick up exactly where it left off, even across sessions or handoffs to other agents.
|
|
480
175
|
|
|
481
176
|
---
|
|
482
177
|
|
|
@@ -484,51 +179,18 @@ bd ready # Immediately oriented to project state
|
|
|
484
179
|
|
|
485
180
|
| Variable | Description |
|
|
486
181
|
|----------|-------------|
|
|
487
|
-
| `E2B_API_KEY` | Your E2B API key (or
|
|
488
|
-
|
|
489
|
-
---
|
|
490
|
-
|
|
491
|
-
## Comparison with Other Frameworks
|
|
492
|
-
|
|
493
|
-
| Framework | Focus | Lakitu Synergy |
|
|
494
|
-
|-----------|-------|----------------|
|
|
495
|
-
| **CrewAI** | Role-based agent collaboration | Lakitu provides secure execution environment |
|
|
496
|
-
| **LangGraph** | Deterministic state flows | Lakitu provides persistent memory across nodes |
|
|
497
|
-
| **AutoGen** | Multi-agent conversation | Lakitu provides structured task coordination |
|
|
498
|
-
| **Lakitu** | **Infrastructure & Memory** | Foundation layer for reliable autonomy |
|
|
499
|
-
|
|
500
|
-
While orchestration frameworks manage *how* agents talk, Lakitu manages *where* they work, *what* they remember, and *how* they verify their progress.
|
|
501
|
-
|
|
502
|
-
---
|
|
503
|
-
|
|
504
|
-
## The Future: Agent Villages
|
|
505
|
-
|
|
506
|
-
Lakitu is designed for the "Agent Village"—coordinated swarms working toward massive goals. In this model:
|
|
507
|
-
|
|
508
|
-
- **State lives in Convex**: Agents don't need leaders; they query `bd ready`
|
|
509
|
-
- **Memory lives in Beads**: Blockers auto-propagate across the swarm
|
|
510
|
-
- **Execution lives in E2B**: Each agent has isolated, secure compute
|
|
511
|
-
|
|
512
|
-
The human role shifts from "manager of minutiae" to "strategist of epics."
|
|
182
|
+
| `E2B_API_KEY` | Your E2B API key (or `e2b auth login`) |
|
|
513
183
|
|
|
514
184
|
---
|
|
515
185
|
|
|
516
186
|
## Links
|
|
517
187
|
|
|
518
|
-
- [npm
|
|
188
|
+
- [npm](https://www.npmjs.com/package/@lakitu/sdk)
|
|
519
189
|
- [GitHub](https://github.com/shinyobjectz/lakitu)
|
|
520
|
-
- [E2B
|
|
521
|
-
- [Convex
|
|
522
|
-
- [Beads
|
|
523
|
-
|
|
524
|
-
---
|
|
190
|
+
- [E2B](https://e2b.dev/docs)
|
|
191
|
+
- [Convex](https://docs.convex.dev)
|
|
192
|
+
- [Beads](https://github.com/steveyegge/beads)
|
|
525
193
|
|
|
526
194
|
## License
|
|
527
195
|
|
|
528
196
|
MIT
|
|
529
|
-
|
|
530
|
-
---
|
|
531
|
-
|
|
532
|
-
<p align="center">
|
|
533
|
-
<i>The future of AI is not a better chatbot—it's a system that lands the plane every time.</i>
|
|
534
|
-
</p>
|