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 CHANGED
@@ -1,32 +1,41 @@
1
- # lobstah
1
+ # lobstah 🦞✨
2
+
3
+ *Nobody stares at the water.*
2
4
 
3
5
  [![CI](https://github.com/aequitas-labs/lobstah/actions/workflows/ci.yml/badge.svg)](https://github.com/aequitas-labs/lobstah/actions/workflows/ci.yml)
4
6
  ![License](https://img.shields.io/badge/license-MIT-green)
5
7
  ![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen)
6
8
  ![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-blue)
9
+ [![npm](https://img.shields.io/npm/v/lobstah)](https://www.npmjs.com/package/lobstah)
7
10
  ![Harnesses](https://img.shields.io/badge/harnesses-Claude%20Code%20%7C%20Codex-8A2BE2)
8
11
 
9
- Harness-agnostic, token-efficient supervisor for local coding agents.
12
+ Harness-agnostic, token-efficient supervision framework for coding agents.
10
13
 
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.
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
- 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.
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 # ~/.lobstah + example config
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 daemon & # under tmux/pm2/launchd for real use
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
- (Prefer the water? `set --bait`, `buoys`, and `buoy` alias `dispatch`, `ls`,
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 β€” `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.
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`); multiple
78
- isolated instances are just multiple homes, one daemon per home (enforced).
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 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.
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. [docs/pickup.md](https://github.com/aequitas-labs/lobstah/blob/main/docs/pickup.md)
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
- 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).
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