lobstah 0.1.0 β 0.1.2
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 +58 -39
- package/dist/main.js +901 -176
- package/dist/runner.js +2 -1
- package/docs/configuration.md +122 -0
- package/docs/design.md +669 -0
- package/docs/lobsterman.md +201 -0
- package/docs/openclaw.md +76 -0
- package/docs/pickup.md +319 -0
- package/docs/vocabulary.md +118 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,32 +1,41 @@
|
|
|
1
|
-
# lobstah
|
|
1
|
+
# lobstah π¦β¨
|
|
2
|
+
|
|
3
|
+
*Nobody stares at the water.*
|
|
2
4
|
|
|
3
5
|
[](https://github.com/aequitas-labs/lobstah/actions/workflows/ci.yml)
|
|
4
6
|

|
|
5
7
|

|
|
6
8
|

|
|
9
|
+
[](https://www.npmjs.com/package/lobstah)
|
|
7
10
|

|
|
8
11
|
|
|
9
|
-
Harness-agnostic, token-efficient
|
|
12
|
+
Harness-agnostic, token-efficient supervision framework for coding agents.
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
stuck, which one is waiting on
|
|
13
|
-
minutes ago
|
|
14
|
-
|
|
15
|
-
credentials that never leave the laptop.
|
|
14
|
+
You were promised agents that do the work. Somehow, watching them became the
|
|
15
|
+
work: which one is stuck, which one is waiting on an answer nobody saw, which
|
|
16
|
+
one died forty minutes ago. Watching is why you run two agents instead of
|
|
17
|
+
ten.
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
A trap doesn't fish faster for being watched, and an agent doesn't code
|
|
20
|
+
faster either. You **lob** bait into a trap and walk away. Each dispatch runs
|
|
21
|
+
in its own git worktree; the daemon tells a dead process from a wedged one
|
|
22
|
+
and recovers each; status and evidence land on disk. Supervision costs
|
|
23
|
+
nothing β no tokens, no attention β so the whole fleet fits in one
|
|
24
|
+
conversation, and **your agents just bring home the lobstahs**.
|
|
22
25
|
|
|
23
|
-
## Requirements
|
|
26
|
+
## Requirements π
|
|
24
27
|
|
|
25
28
|
- Node 20+, git, pnpm
|
|
26
29
|
- An authenticated harness CLI: `claude` (Claude Code) and/or Codex. Lobstah
|
|
27
30
|
never handles harness login β you authenticate your own CLI; lobstah invokes it.
|
|
28
31
|
|
|
29
|
-
## Install
|
|
32
|
+
## Install β
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm i -g lobstah
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Or from source:
|
|
30
39
|
|
|
31
40
|
```bash
|
|
32
41
|
git clone https://github.com/aequitas-labs/lobstah
|
|
@@ -35,12 +44,16 @@ pnpm install && pnpm build
|
|
|
35
44
|
ln -s "$PWD/bin/lobstah" /usr/local/bin/lobstah # Windows: add .\bin to PATH
|
|
36
45
|
```
|
|
37
46
|
|
|
38
|
-
## Quick start
|
|
47
|
+
## Quick start πͺ
|
|
39
48
|
|
|
40
49
|
```bash
|
|
41
|
-
lobstah init
|
|
50
|
+
lobstah init --scan ~/src # ~/.lobstah + a [repos.*] block per repo found
|
|
51
|
+
# (bare `init` writes an example config instead;
|
|
52
|
+
# `lobstah repos add <path>` appends one repo)
|
|
42
53
|
$EDITOR ~/.lobstah/config.toml
|
|
43
|
-
lobstah
|
|
54
|
+
lobstah doctor # binaries, config, repos, harnesses, heartbeat
|
|
55
|
+
lobstah daemon install # launchd agent / systemd user unit β survives
|
|
56
|
+
# reboots, restarts on crash (`daemon &` for a try)
|
|
44
57
|
lobstah dispatch --repo myapp --brief ./brief.md
|
|
45
58
|
```
|
|
46
59
|
|
|
@@ -65,34 +78,38 @@ lobstah swap <uuid> --harness codex # hand an active dispatch to a fresh sessi
|
|
|
65
78
|
lobstah catch <uuid> # the evidence: branch, commits, PR, session
|
|
66
79
|
lobstah cancel <uuid>
|
|
67
80
|
lobstah cull --apply # sweep aged results and orphaned worktrees
|
|
81
|
+
lobstah man tend # the whole string: fleet verdict, waiting
|
|
82
|
+
# questions, each item's chain + PR + gate
|
|
68
83
|
```
|
|
69
84
|
|
|
70
|
-
|
|
71
|
-
and `status`.
|
|
85
|
+
Prefer the water? π `set --bait`, `buoys`, and `buoy` alias `dispatch`,
|
|
86
|
+
`ls`, and `status`.
|
|
72
87
|
|
|
73
|
-
Dispatches report six verbs
|
|
74
|
-
`paused`, `done`, `failed
|
|
75
|
-
brief is fulfilled
|
|
88
|
+
Dispatches report six verbs: `working`, `needs-decision`, `blocked`,
|
|
89
|
+
`paused`, `done`, `failed`. The write path rejects anything else. `done`
|
|
90
|
+
means the brief is fulfilled. Merging is never the dispatch's job.
|
|
76
91
|
|
|
77
|
-
Everything lives under `$LOBSTAH_HOME` (default `~/.lobstah`)
|
|
78
|
-
|
|
92
|
+
Everything lives under `$LOBSTAH_HOME` (default `~/.lobstah`). To run more
|
|
93
|
+
instances, use more homes. One daemon per home, enforced.
|
|
79
94
|
|
|
80
|
-
## When something needs you
|
|
95
|
+
## When something needs you ποΈ
|
|
81
96
|
|
|
82
|
-
Set one config line
|
|
83
|
-
|
|
84
|
-
the loop. Driving lobstah from an agent session instead? `lobstah
|
|
85
|
-
the lobsterman's manual
|
|
86
|
-
|
|
87
|
-
Claude Code Stop hook that parks the session on the fleet and
|
|
88
|
-
turn the moment something
|
|
97
|
+
Set one config line β `notifyCommand = "ntfy pub my-topic ..."` β and the
|
|
98
|
+
daemon pings you on `needs-decision`, `blocked`, `done`, and `failed`. No
|
|
99
|
+
model in the loop. Driving lobstah from an agent session instead? `lobstah
|
|
100
|
+
man` prints the lobsterman's manual. `man wait` blocks until a dispatch needs
|
|
101
|
+
attention, and unanswered questions re-fire until answered. `man init`
|
|
102
|
+
installs a Claude Code Stop hook that parks the session on the fleet and
|
|
103
|
+
continues the turn the moment something needs it.
|
|
89
104
|
|
|
90
|
-
## Add-ons
|
|
105
|
+
## Add-ons π£
|
|
91
106
|
|
|
92
107
|
- **Tracker pickup** β `lobstah pick` polls Linear and GitHub outbound (no
|
|
93
108
|
webhooks, no tunnel), dispatches assigned work, streams status back as
|
|
94
109
|
comments, forwards replies into the running dispatch, reconciles drift, and
|
|
95
|
-
optionally merges approved PRs.
|
|
110
|
+
optionally merges approved PRs. GitHub pickup spans every repo you mark
|
|
111
|
+
`pickup = true`; `lobstah pick install` runs it as a service.
|
|
112
|
+
[docs/pickup.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/pickup.md)
|
|
96
113
|
- **OpenClaw plugin** β gives fleet agents `lobstah_dispatch` / `lobstah_status`
|
|
97
114
|
/ `lobstah_send` / `lobstah_cancel` tools and operators a `/lobstah` command.
|
|
98
115
|
[docs/openclaw.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/openclaw.md)
|
|
@@ -100,7 +117,7 @@ turn the moment something does.
|
|
|
100
117
|
supervises, and hands you outcomes, woken by the `lobstah man` commands.
|
|
101
118
|
[docs/lobsterman.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/lobsterman.md)
|
|
102
119
|
|
|
103
|
-
## How it holds together
|
|
120
|
+
## How it holds together π§
|
|
104
121
|
|
|
105
122
|
```
|
|
106
123
|
CLI / pick / OpenClaw plugin / anything ββwritesββ> ~/.lobstah/queue/
|
|
@@ -111,10 +128,12 @@ daemon ββspawnββ> runner (one per dispatch) ββSDKββ> harness CLI
|
|
|
111
128
|
βββ dead/wedged classification Β· bounded restart ladder Β· zero tokens
|
|
112
129
|
```
|
|
113
130
|
|
|
114
|
-
Design: [docs/design.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/design.md).
|
|
115
|
-
|
|
116
|
-
and
|
|
117
|
-
|
|
131
|
+
Design: [docs/design.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/design.md). Every verb, verdict, and gate in
|
|
132
|
+
one place: [docs/vocabulary.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/vocabulary.md).
|
|
133
|
+
Verified by CI on Linux and Windows, by live end-to-end runs on both
|
|
134
|
+
harnesses, and by fault-injection drills. A SIGKILL'd runner respawns and
|
|
135
|
+
completes. A SIGSTOP'd one is classified wedged, killed cleanly, and recovers
|
|
136
|
+
with a nudge.
|
|
118
137
|
|
|
119
138
|
## Non-goals
|
|
120
139
|
|