@brutalsystems/birddog 0.0.0 → 0.1.4
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 +104 -2
- package/bin/birddog +0 -0
- package/package.json +47 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Mike Williams
|
|
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
CHANGED
|
@@ -1,3 +1,105 @@
|
|
|
1
|
-
#
|
|
1
|
+
# birddog
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](./LICENSE)
|
|
4
|
+
|
|
5
|
+
birddog watches live coding-agent sessions on one machine and tells an
|
|
6
|
+
orchestrating agent what it observed — a session went idle, asked for input,
|
|
7
|
+
exited, or went quiet. It never sends a prompt, never approves anything, and
|
|
8
|
+
never starts, stops or restarts a session.
|
|
9
|
+
|
|
10
|
+
**birddog monitors sessions; it does not manage their work.** Stopping birddog
|
|
11
|
+
leaves every watched agent running.
|
|
12
|
+
|
|
13
|
+
It is the observation half of a pair: [muster](https://github.com/BrutalSystems/muster)
|
|
14
|
+
launches instructed agents, [tincan](https://github.com/BrutalSystems/tincan)
|
|
15
|
+
lets them message each other, birddog watches them.
|
|
16
|
+
|
|
17
|
+
> **Status: working, early.** Instances run, observe Claude Code sessions and
|
|
18
|
+
> Codex threads, report what deserves attention, and can deliver alerts into a
|
|
19
|
+
> Claude Code orchestrator's inbox. The opencode adapter is next. What each
|
|
20
|
+
> runtime actually exposes — and does not — is in
|
|
21
|
+
> [`docs/providers.md`](./docs/providers.md).
|
|
22
|
+
|
|
23
|
+
## Try it
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
npm i -g @brutalsystems/birddog # macOS, Apple silicon
|
|
27
|
+
birddog discover # what can be watched
|
|
28
|
+
birddog doctor # what can and cannot be observed
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The package carries the compiled binary, so nothing is built at install time
|
|
32
|
+
and no Go toolchain is needed. From a clone, or without npm:
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
go build -o birddog ./cmd/birddog
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Then watch something. Take a `session_id` (and, for Claude Code, the `pid` and
|
|
39
|
+
`proc_start` beside it) from `discover` into a config — see
|
|
40
|
+
[`examples/`](./examples/) — and start an instance:
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
birddog start --config birddog.json
|
|
44
|
+
birddog status --instance <id>
|
|
45
|
+
birddog events --instance <id> --after <cursor> --wait 30
|
|
46
|
+
birddog stop --instance <id>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The instance keeps observing after the shell that started it is gone, and
|
|
50
|
+
stopping it leaves every watched session running.
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
NAME PROVIDER STATUS PID SESSION CWD
|
|
54
|
+
api-refactor claude busy 41207 11111111-2222-3333-4444-555555555555 /work/api
|
|
55
|
+
auth-thread codex unavailable 41880 01a0c46d-1afb-7b52-80d5-f91870af433f /work/auth
|
|
56
|
+
checkout-7f claude idle 41996 66666666-7777-8888-9999-000000000000 /work/checkout
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Seeing more
|
|
60
|
+
|
|
61
|
+
Two things birddog cannot observe from outside a session, both opt-in and both
|
|
62
|
+
per-user:
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
birddog hooks install # Claude Code: tool calls and permission requests
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```toml
|
|
69
|
+
# opencode: nothing outside the process can see it at all
|
|
70
|
+
[plugins.birddog]
|
|
71
|
+
npm = "@brutalsystems/birddog-opencode"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Sessions already running pick hooks up without restarting. Both preserve what
|
|
75
|
+
is already configured, and both can be removed.
|
|
76
|
+
|
|
77
|
+
## What it will not tell you
|
|
78
|
+
|
|
79
|
+
Liveness is only ever reported on evidence. A Claude Code session is live when
|
|
80
|
+
its socket answers **and** the process at its PID is still the one the registry
|
|
81
|
+
recorded; a Codex thread is live when a running process holds its writer lock.
|
|
82
|
+
When the evidence fails, the last observed status is preserved and marked
|
|
83
|
+
`(stale)` rather than presented as current.
|
|
84
|
+
|
|
85
|
+
`unavailable` is a real answer, not a gap to be filled in. Codex reports its
|
|
86
|
+
threads as `notLoaded` to anyone who does not own them, which describes the
|
|
87
|
+
asking process rather than the session — so birddog says it cannot see the
|
|
88
|
+
state instead of guessing one.
|
|
89
|
+
|
|
90
|
+
Nor will it tell you a worker is unblocked. No provider exposes permission
|
|
91
|
+
requests to an outside observer today, so every target reports input-request
|
|
92
|
+
visibility as `unavailable`. An absence of observation is never reported as
|
|
93
|
+
evidence of absence — and a turn ending is not work finishing.
|
|
94
|
+
|
|
95
|
+
## Start here
|
|
96
|
+
|
|
97
|
+
- [`docs/README.md`](./docs/README.md) — index and current status
|
|
98
|
+
- [`docs/decisions.md`](./docs/decisions.md) — what has been decided, and why
|
|
99
|
+
- [`docs/providers.md`](./docs/providers.md) — what each runtime actually
|
|
100
|
+
exposes to an outside observer, and what it does not
|
|
101
|
+
|
|
102
|
+
## Scope of the first version
|
|
103
|
+
|
|
104
|
+
macOS. Claude Code, Codex and opencode. Terminal and programmatically launched
|
|
105
|
+
sessions. Desktop apps are out of scope.
|
package/bin/birddog
ADDED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,13 +1,58 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brutalsystems/birddog",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"description": "Watch live coding-agent sessions on this machine and report what they are doing. Observation only: it never prompts, approves, or starts and stops a session.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"claude-code",
|
|
7
|
+
"codex",
|
|
8
|
+
"opencode",
|
|
9
|
+
"agents",
|
|
10
|
+
"monitoring",
|
|
11
|
+
"observability"
|
|
12
|
+
],
|
|
5
13
|
"license": "MIT",
|
|
14
|
+
"author": "Mike Williams",
|
|
6
15
|
"repository": {
|
|
7
16
|
"type": "git",
|
|
8
17
|
"url": "git+https://github.com/BrutalSystems/birddog.git"
|
|
9
18
|
},
|
|
19
|
+
"bugs": {
|
|
20
|
+
"url": "https://github.com/BrutalSystems/birddog/issues"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://github.com/BrutalSystems/birddog#readme",
|
|
23
|
+
"type": "module",
|
|
24
|
+
"bin": {
|
|
25
|
+
"birddog": "./bin/birddog"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"bin/birddog"
|
|
29
|
+
],
|
|
30
|
+
"os": [
|
|
31
|
+
"darwin"
|
|
32
|
+
],
|
|
33
|
+
"cpu": [
|
|
34
|
+
"arm64"
|
|
35
|
+
],
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=22"
|
|
38
|
+
},
|
|
10
39
|
"publishConfig": {
|
|
11
40
|
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"prepack": "go build -trimpath -ldflags \"-s -w\" -o bin/birddog ./cmd/birddog",
|
|
44
|
+
"typecheck:plugin": "tsc -p tsconfig.plugin.json",
|
|
45
|
+
"test": "vitest run",
|
|
46
|
+
"test:watch": "vitest",
|
|
47
|
+
"sync-version": "node scripts/sync-version.mjs",
|
|
48
|
+
"check-version": "node scripts/sync-version.mjs --check",
|
|
49
|
+
"verify-tarball": "node scripts/verify-tarball.mjs",
|
|
50
|
+
"version": "node scripts/sync-version.mjs && npm run check-version && git add plugins/opencode/package.json plugins/opencode/birddog.ts internal/version/version.go",
|
|
51
|
+
"postversion": "git push origin HEAD --follow-tags"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/node": "22.20.4",
|
|
55
|
+
"typescript": "^5.6.0",
|
|
56
|
+
"vitest": "^2.1.0"
|
|
12
57
|
}
|
|
13
58
|
}
|