lobstah 0.5.5 → 0.5.9
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 +128 -32
- package/dist/main.js +1824 -1413
- package/dist/runner.js +410 -76
- package/docs/assets/lob-crawl.svg +14 -0
- package/docs/configuration.md +9 -2
- package/docs/design.md +72 -0
- package/docs/harness/claude-code.md +104 -0
- package/docs/harness/codex.md +189 -0
- package/docs/{lobsterman.md → man.md} +58 -96
- package/docs/vocabulary.md +29 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,12 +25,125 @@ and recovers each; status and evidence land on disk. Supervision costs
|
|
|
25
25
|
nothing — no tokens, no attention — so the whole fleet fits in one
|
|
26
26
|
conversation, and **your agents just bring home the lobstahs**.
|
|
27
27
|
|
|
28
|
+
## Which one? 🧭
|
|
29
|
+
|
|
30
|
+
As a **background router**, lobstah takes work you (or a tracker) lob in,
|
|
31
|
+
runs supervised workers in their own worktrees, pings you when something
|
|
32
|
+
needs you, and brings PRs home with no session open. As the **lobstah man**,
|
|
33
|
+
one interactive Claude Code or Codex session takes the helm and runs that
|
|
34
|
+
same fleet from a conversation, woken by the plugin's hooks instead of by
|
|
35
|
+
you. Both sit on the same daemon, so start with the router and add a helm
|
|
36
|
+
whenever you like.
|
|
37
|
+
|
|
38
|
+

|
|
39
|
+
|
|
28
40
|
## Requirements 📋
|
|
29
41
|
|
|
30
42
|
- Node 20+, git, pnpm
|
|
31
43
|
- An authenticated harness CLI: `claude` (Claude Code) and/or Codex. Lobstah
|
|
32
44
|
never handles harness login — you authenticate your own CLI; lobstah invokes it.
|
|
33
45
|
|
|
46
|
+
## Quickstart: the background router 🪝
|
|
47
|
+
|
|
48
|
+
Hand lobstah a brief and go do something else.
|
|
49
|
+
|
|
50
|
+
**Install**
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm i -g lobstah # or from source / a standalone binary: see Install below
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Configure**
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
lobstah init --scan ~/src # ~/.lobstah + a [repos.*] block per repo found
|
|
60
|
+
# (bare `init` writes an example config instead;
|
|
61
|
+
# `lobstah repos add <path>` appends one repo)
|
|
62
|
+
$EDITOR ~/.lobstah/config.toml
|
|
63
|
+
lobstah doctor # binaries, config, repos, harnesses, heartbeat
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```toml
|
|
67
|
+
notifyCommand = "ntfy pub my-topic \"$LOBSTAH_VERB $LOBSTAH_ID: $LOBSTAH_NOTE\""
|
|
68
|
+
|
|
69
|
+
[repos.myapp]
|
|
70
|
+
path = "~/src/myapp"
|
|
71
|
+
trunk = "main"
|
|
72
|
+
setup = ["pnpm install"] # runs in each fresh worktree
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
`notifyCommand` is how the router reaches you: the daemon runs it on
|
|
76
|
+
`needs-decision`, `blocked`, `done`, and `failed`, with no model in the loop.
|
|
77
|
+
Every key, with defaults: [docs/configuration.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/configuration.md).
|
|
78
|
+
|
|
79
|
+
**Run**
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
lobstah daemon install # launchd agent / systemd user unit — survives
|
|
83
|
+
# reboots, restarts on crash (`daemon &` for a try)
|
|
84
|
+
lobstah pet install # macOS: a desktop lobster walks questions to you
|
|
85
|
+
lobstah dispatch --repo myapp --brief ./brief.md
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Want work to arrive on its own? `lobstah pick install` runs tracker pickup
|
|
89
|
+
as a service: Linear and GitHub issues assigned to its configured identity
|
|
90
|
+
become dispatches, and status streams back as comments.
|
|
91
|
+
[docs/pickup.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/pickup.md)
|
|
92
|
+
|
|
93
|
+
**See it**
|
|
94
|
+
|
|
95
|
+
The lobstah man skill brings up the glass and prints its URL.
|
|
96
|
+
`lobstah man helm` alone does not.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
lobstah glass # the spyglass: a live localhost page (port 4949)
|
|
100
|
+
lobstah ls # or the same from the terminal
|
|
101
|
+
lobstah catch <uuid> # the evidence: branch, commits, PR, session
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Quickstart: the lobstah man 🦞
|
|
105
|
+
|
|
106
|
+
One session holds the helm. You talk to it; it runs the fleet. The skill runs
|
|
107
|
+
the `lobstah` commands.
|
|
108
|
+
|
|
109
|
+
**Install**
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
npm i -g lobstah # the plugin wires hooks to the CLI; it doesn't bundle it
|
|
113
|
+
lobstah init --scan ~/src # same repos, same config as the router
|
|
114
|
+
lobstah daemon install # the helm dispatches; the daemon supervises
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Then install the lobstah plugin for your harness
|
|
118
|
+
([Claude Code](https://github.com/aequitas-labs/lobstah/blob/main/docs/harness/claude-code.md#install) ·
|
|
119
|
+
[Codex](https://github.com/aequitas-labs/lobstah/blob/main/docs/harness/codex.md#install)) and open a new session.
|
|
120
|
+
|
|
121
|
+
**Run**
|
|
122
|
+
|
|
123
|
+
Open a new session in the repo (or any folder) with the plugin installed.
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
/lobstah:man # Claude Code (or /lobstah:helm, the bare sign-on)
|
|
127
|
+
$lobstah:man # Codex
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Or just say "Lobstah man, take the helm."
|
|
131
|
+
|
|
132
|
+
The skill signs on, arms the watcher when the Stop hook asks, and stays woken.
|
|
133
|
+
|
|
134
|
+
Then just talk: "dispatch a fix for the flaky login test in myapp." The helm
|
|
135
|
+
writes a standalone brief, dispatches it, answers workers' questions, and
|
|
136
|
+
brings you the catch.
|
|
137
|
+
|
|
138
|
+
Use `/lobstah:trap` in Claude Code or `$lobstah:trap` in Codex to turn another
|
|
139
|
+
live session in a linked worktree into a worker. The skill runs `lobstah soak`;
|
|
140
|
+
the helm addresses bait to its `wt:<trap>` address, and `lobstah stow` signs
|
|
141
|
+
it off.
|
|
142
|
+
|
|
143
|
+
Harness specifics: [Claude Code](https://github.com/aequitas-labs/lobstah/blob/main/docs/harness/claude-code.md) · [Codex](https://github.com/aequitas-labs/lobstah/blob/main/docs/harness/codex.md).
|
|
144
|
+
The full pattern (charter, grounds, the three tiers of getting woken, traps)
|
|
145
|
+
is in [docs/man.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/man.md).
|
|
146
|
+
|
|
34
147
|
## Install ⚓
|
|
35
148
|
|
|
36
149
|
```bash
|
|
@@ -60,29 +173,7 @@ The binary drives harnesses through their CLIs instead of the bundled SDKs:
|
|
|
60
173
|
codex workers run fully Node-free; claude workers still need the (Node-based)
|
|
61
174
|
`claude` CLI on the host.
|
|
62
175
|
|
|
63
|
-
##
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
lobstah init --scan ~/src # ~/.lobstah + a [repos.*] block per repo found
|
|
67
|
-
# (bare `init` writes an example config instead;
|
|
68
|
-
# `lobstah repos add <path>` appends one repo)
|
|
69
|
-
$EDITOR ~/.lobstah/config.toml
|
|
70
|
-
lobstah doctor # binaries, config, repos, harnesses, heartbeat
|
|
71
|
-
lobstah daemon install # launchd agent / systemd user unit — survives
|
|
72
|
-
# reboots, restarts on crash (`daemon &` for a try)
|
|
73
|
-
lobstah dispatch --repo myapp --brief ./brief.md
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
```toml
|
|
77
|
-
[repos.myapp]
|
|
78
|
-
path = "~/src/myapp"
|
|
79
|
-
trunk = "main"
|
|
80
|
-
setup = ["pnpm install"] # runs in each fresh worktree
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Every key, with defaults: [docs/configuration.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/configuration.md).
|
|
84
|
-
|
|
85
|
-
Watch, steer, take over:
|
|
176
|
+
## Watch, steer, take over 🔭
|
|
86
177
|
|
|
87
178
|
```bash
|
|
88
179
|
lobstah ls # queue, active, recent done
|
|
@@ -120,7 +211,7 @@ instances, use more homes. One daemon per home, enforced.
|
|
|
120
211
|
Set one config line — `notifyCommand = "ntfy pub my-topic ..."` — and the
|
|
121
212
|
daemon pings you on `needs-decision`, `blocked`, `done`, and `failed`. No
|
|
122
213
|
model in the loop. Driving lobstah from an agent session instead? `lobstah
|
|
123
|
-
man` prints the
|
|
214
|
+
man` prints the lobstah man's manual. `man wait` blocks until a dispatch needs
|
|
124
215
|
attention, and unanswered questions re-fire until answered. `man helm`
|
|
125
216
|
signs one session on as the orchestrator for its grounds, and `man report`
|
|
126
217
|
prints the delta since the last acknowledged report. `lobstah glass` serves
|
|
@@ -130,19 +221,22 @@ continues the turn the moment something needs it.
|
|
|
130
221
|
|
|
131
222
|
## Add-ons 🎣
|
|
132
223
|
|
|
224
|
+
- **Desktop pet** — walks attention across your screen; run `lobstah pet install`
|
|
225
|
+
on macOS. [Install guide](apps/pet/README.md#install)
|
|
133
226
|
- **Tracker pickup** — `lobstah pick` polls Linear and GitHub outbound (no
|
|
134
227
|
webhooks, no tunnel), dispatches assigned work, streams status back as
|
|
135
228
|
comments, forwards replies into the running dispatch, reconciles drift, and
|
|
136
229
|
optionally merges approved PRs. GitHub pickup spans every repo you mark
|
|
137
230
|
`pickup = true`; `lobstah pick install` runs it as a service.
|
|
138
231
|
[docs/pickup.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/pickup.md)
|
|
139
|
-
- **Claude Code + Codex plugins** — the
|
|
140
|
-
hook wiring (session brief, Stop-hook park, clean stow), the
|
|
141
|
-
|
|
142
|
-
`/soak`, and `/stow` commands, no
|
|
232
|
+
- **Claude Code + Codex plugins** — the lobstah man as a one-step install: the
|
|
233
|
+
hook wiring (session brief, Stop-hook park, clean stow), the `man` and `trap`
|
|
234
|
+
skills, and (on Claude Code) `/lobstah:tend`, `/lobstah:helm`,
|
|
235
|
+
`/lobstah:relieve`, `/lobstah:soak`, and `/lobstah:stow` commands, no
|
|
236
|
+
settings surgery.
|
|
143
237
|
This repo doubles as the plugin marketplace for both agent registries —
|
|
144
|
-
|
|
145
|
-
|
|
238
|
+
install steps per harness are in [docs/harness/claude-code.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/harness/claude-code.md)
|
|
239
|
+
and [docs/harness/codex.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/harness/codex.md). The park stays inert until a directory
|
|
146
240
|
opts in with a `.lobstah-man` file or the session soaks. Codex hooks need
|
|
147
241
|
Codex v0.114+ and a one-time trust review. Plugin versions track the CLI
|
|
148
242
|
(plugin 0.5.x goes with `lobstah` 0.5.x); `lobstah doctor` and the session
|
|
@@ -152,11 +246,11 @@ continues the turn the moment something needs it.
|
|
|
152
246
|
- **OpenClaw plugin** — gives fleet agents `lobstah_dispatch` / `lobstah_status`
|
|
153
247
|
/ `lobstah_send` / `lobstah_cancel` tools and operators a `/lobstah` command.
|
|
154
248
|
[docs/openclaw.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/openclaw.md)
|
|
155
|
-
- **The
|
|
249
|
+
- **The lobstah man** — one interactive agent session that dispatches,
|
|
156
250
|
supervises, and hands you outcomes, woken by the `lobstah man` commands.
|
|
157
251
|
Harness-agnostic: hold the helm from Claude Code, Codex, or anything with
|
|
158
252
|
a terminal — the CLI is the contract, and workers mix harnesses per
|
|
159
|
-
dispatch. [docs/
|
|
253
|
+
dispatch. [docs/man.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/man.md)
|
|
160
254
|
|
|
161
255
|
## How it holds together 🧭
|
|
162
256
|
|
|
@@ -184,3 +278,5 @@ vocabulary in core, no hosted service.
|
|
|
184
278
|
## License
|
|
185
279
|
|
|
186
280
|
[MIT](https://github.com/aequitas-labs/lobstah/blob/main/LICENSE)
|
|
281
|
+
|
|
282
|
+

|