lobstah 0.1.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/LICENSE +21 -0
- package/README.md +126 -0
- package/dist/main.js +2688 -0
- package/dist/runner.js +1319 -0
- package/package.json +36 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 aequitas labs LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# lobstah
|
|
2
|
+
|
|
3
|
+
[](https://github.com/aequitas-labs/lobstah/actions/workflows/ci.yml)
|
|
4
|
+

|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
Harness-agnostic, token-efficient supervisor for local coding agents.
|
|
10
|
+
|
|
11
|
+
One coding agent in a terminal is fine. Three is tab-juggling: which one is
|
|
12
|
+
stuck, which one is waiting on a question nobody saw, which one died forty
|
|
13
|
+
minutes ago? And the cloud sandboxes can't help when the work needs your
|
|
14
|
+
actual machine — private toolchains, local services, unpushed branches,
|
|
15
|
+
credentials that never leave the laptop.
|
|
16
|
+
|
|
17
|
+
Lobstah runs coding agents like services instead of terminal tabs. Each
|
|
18
|
+
dispatch gets an isolated git worktree; a daemon tells a dead process from a
|
|
19
|
+
wedged one and treats them differently (auto-restart vs. a bounded
|
|
20
|
+
fork-with-nudge ladder); status and evidence land on disk. Supervision spends
|
|
21
|
+
zero tokens — no model watches the models.
|
|
22
|
+
|
|
23
|
+
## Requirements
|
|
24
|
+
|
|
25
|
+
- Node 20+, git, pnpm
|
|
26
|
+
- An authenticated harness CLI: `claude` (Claude Code) and/or Codex. Lobstah
|
|
27
|
+
never handles harness login — you authenticate your own CLI; lobstah invokes it.
|
|
28
|
+
|
|
29
|
+
## Install
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
git clone https://github.com/aequitas-labs/lobstah
|
|
33
|
+
cd lobstah
|
|
34
|
+
pnpm install && pnpm build
|
|
35
|
+
ln -s "$PWD/bin/lobstah" /usr/local/bin/lobstah # Windows: add .\bin to PATH
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Quick start
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
lobstah init # ~/.lobstah + example config
|
|
42
|
+
$EDITOR ~/.lobstah/config.toml
|
|
43
|
+
lobstah daemon & # under tmux/pm2/launchd for real use
|
|
44
|
+
lobstah dispatch --repo myapp --brief ./brief.md
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```toml
|
|
48
|
+
[repos.myapp]
|
|
49
|
+
path = "~/src/myapp"
|
|
50
|
+
trunk = "main"
|
|
51
|
+
setup = ["pnpm install"] # runs in each fresh worktree
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Every key, with defaults: [docs/configuration.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/configuration.md).
|
|
55
|
+
|
|
56
|
+
Watch, steer, take over:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
lobstah ls # queue, active, recent done
|
|
60
|
+
lobstah status <uuid> # reconciled state + last note
|
|
61
|
+
lobstah logs <uuid> --follow # normalized event stream
|
|
62
|
+
lobstah send <uuid> "also update the docs" # delivered between turns
|
|
63
|
+
lobstah attach <uuid> # open the agent's own session in its worktree
|
|
64
|
+
lobstah swap <uuid> --harness codex # hand an active dispatch to a fresh session
|
|
65
|
+
lobstah catch <uuid> # the evidence: branch, commits, PR, session
|
|
66
|
+
lobstah cancel <uuid>
|
|
67
|
+
lobstah cull --apply # sweep aged results and orphaned worktrees
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
(Prefer the water? `set --bait`, `buoys`, and `buoy` alias `dispatch`, `ls`,
|
|
71
|
+
and `status`.)
|
|
72
|
+
|
|
73
|
+
Dispatches report six verbs — `working`, `needs-decision`, `blocked`,
|
|
74
|
+
`paused`, `done`, `failed` — validated at the write path. `done` means the
|
|
75
|
+
brief is fulfilled; merging is never the dispatch's job.
|
|
76
|
+
|
|
77
|
+
Everything lives under `$LOBSTAH_HOME` (default `~/.lobstah`); multiple
|
|
78
|
+
isolated instances are just multiple homes, one daemon per home (enforced).
|
|
79
|
+
|
|
80
|
+
## When something needs you
|
|
81
|
+
|
|
82
|
+
Set one config line and the daemon pings you on `needs-decision`, `blocked`,
|
|
83
|
+
`done`, and `failed` — `notifyCommand = "ntfy pub my-topic ..."` — no model in
|
|
84
|
+
the loop. Driving lobstah from an agent session instead? `lobstah man` prints
|
|
85
|
+
the lobsterman's manual: `man wait` blocks until a dispatch needs attention
|
|
86
|
+
(unanswered questions re-fire until answered), and `man init` installs a
|
|
87
|
+
Claude Code Stop hook that parks the session on the fleet and continues the
|
|
88
|
+
turn the moment something does.
|
|
89
|
+
|
|
90
|
+
## Add-ons
|
|
91
|
+
|
|
92
|
+
- **Tracker pickup** — `lobstah pick` polls Linear and GitHub outbound (no
|
|
93
|
+
webhooks, no tunnel), dispatches assigned work, streams status back as
|
|
94
|
+
comments, forwards replies into the running dispatch, reconciles drift, and
|
|
95
|
+
optionally merges approved PRs. [docs/pickup.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/pickup.md)
|
|
96
|
+
- **OpenClaw plugin** — gives fleet agents `lobstah_dispatch` / `lobstah_status`
|
|
97
|
+
/ `lobstah_send` / `lobstah_cancel` tools and operators a `/lobstah` command.
|
|
98
|
+
[docs/openclaw.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/openclaw.md)
|
|
99
|
+
- **The lobsterman** — one interactive agent session that dispatches,
|
|
100
|
+
supervises, and hands you outcomes, woken by the `lobstah man` commands.
|
|
101
|
+
[docs/lobsterman.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/lobsterman.md)
|
|
102
|
+
|
|
103
|
+
## How it holds together
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
CLI / pick / OpenClaw plugin / anything ──writes──> ~/.lobstah/queue/
|
|
107
|
+
│ claim (atomic rename)
|
|
108
|
+
daemon ──spawn──> runner (one per dispatch) ──SDK──> harness CLI
|
|
109
|
+
│ │
|
|
110
|
+
│ └── worktree per dispatch · status/evidence/events on disk
|
|
111
|
+
└── dead/wedged classification · bounded restart ladder · zero tokens
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Design: [docs/design.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/design.md).
|
|
115
|
+
Verified by CI on Linux and Windows, live end-to-end runs on both harnesses,
|
|
116
|
+
and fault-injection drills (SIGKILL'd runners respawn and complete; SIGSTOP'd
|
|
117
|
+
ones are classified wedged, killed cleanly, and recover with a nudge).
|
|
118
|
+
|
|
119
|
+
## Non-goals
|
|
120
|
+
|
|
121
|
+
No webhooks or inbound listeners, no merge decisions in core, no tracker
|
|
122
|
+
vocabulary in core, no hosted service.
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
[MIT](https://github.com/aequitas-labs/lobstah/blob/main/LICENSE)
|