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 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
+ [![CI](https://github.com/aequitas-labs/lobstah/actions/workflows/ci.yml/badge.svg)](https://github.com/aequitas-labs/lobstah/actions/workflows/ci.yml)
4
+ ![License](https://img.shields.io/badge/license-MIT-green)
5
+ ![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen)
6
+ ![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-blue)
7
+ ![Harnesses](https://img.shields.io/badge/harnesses-Claude%20Code%20%7C%20Codex-8A2BE2)
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)