bullswarm 0.30.0 → 0.32.1

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.
Files changed (85) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +151 -0
  3. package/GOAL.md +1 -1
  4. package/README.md +67 -18
  5. package/data/openrouter-benchmarks.json +7951 -7976
  6. package/docs/claude-dynamic-workflow-mechanics.md +1 -1
  7. package/docs/experiments/2026-08-29-dogfood-bullswarm-builds-bullswarm.md +3 -3
  8. package/docs/experiments/2026-08-29-ultracode-vs-bullswarm.md +6 -6
  9. package/docs/guide/concepts.md +42 -0
  10. package/docs/guide/getting-started.md +99 -33
  11. package/docs/guide/index.md +53 -0
  12. package/docs/guide/observing.md +226 -0
  13. package/docs/guide/routing.md +162 -158
  14. package/docs/guide/run.md +106 -0
  15. package/docs/guide/workflows.md +185 -303
  16. package/docs/index.md +28 -50
  17. package/docs/integrations/agent-clis.md +98 -0
  18. package/docs/integrations/claude-code.md +120 -0
  19. package/docs/integrations/issue-watcher.md +142 -0
  20. package/docs/notes/index.md +31 -0
  21. package/docs/public/favicon.svg +7 -0
  22. package/docs/reference/cli.md +1152 -0
  23. package/docs/reference/configuration.md +157 -0
  24. package/docs/reference/program.md +149 -0
  25. package/docs/{guide → reference}/providers.md +55 -81
  26. package/docs/reference/result.md +143 -0
  27. package/docs/workflow-design.md +5 -5
  28. package/mods/bullswarm/.claude-plugin/plugin.json +28 -0
  29. package/mods/bullswarm/README.md +85 -0
  30. package/mods/bullswarm/hooks/hooks.json +4 -0
  31. package/mods/bullswarm/hooks/host.ts +26 -0
  32. package/mods/bullswarm/hooks/names.ts +59 -0
  33. package/mods/bullswarm/hooks/overview.ts +51 -0
  34. package/mods/bullswarm/hooks/pane.tsx +604 -0
  35. package/mods/bullswarm/hooks/pool-rows.tsx +118 -0
  36. package/mods/bullswarm/hooks/pools.ts +228 -0
  37. package/mods/bullswarm/hooks/register.ts +815 -0
  38. package/mods/bullswarm/hooks/route.ts +74 -0
  39. package/mods/bullswarm/hooks/runs.ts +250 -0
  40. package/mods/bullswarm/hooks/strip.tsx +146 -0
  41. package/mods/bullswarm/hooks/verdict.ts +89 -0
  42. package/mods/bullswarm/tsconfig.json +17 -0
  43. package/mods/bullswarm/types/index.d.ts +209 -0
  44. package/package.json +5 -4
  45. package/providers/contrib/README.md +2 -2
  46. package/providers/contrib/command-code/provider.mjs +13 -5
  47. package/providers/contrib/{opencode2 → opencode}/connector.json +2 -1
  48. package/providers/contrib/{opencode2 → opencode}/provider.mjs +4 -4
  49. package/skill/references/providers.md +2 -2
  50. package/src/cli.js +108 -27
  51. package/src/help.js +53 -22
  52. package/src/integrate.js +86 -9
  53. package/src/lib/cli-flags.js +6 -4
  54. package/src/lib/config.js +73 -2
  55. package/src/lib/forecast.js +4 -2
  56. package/src/lib/providers.js +1 -1
  57. package/src/lib/route.js +173 -46
  58. package/src/lib/state.js +395 -3
  59. package/src/lib/strategy.js +2 -2
  60. package/src/lib/usage.js +14 -0
  61. package/src/meters/framework.js +55 -1
  62. package/src/meters/registry.js +112 -13
  63. package/src/provider-cli.js +1 -1
  64. package/src/provider-kit.js +9 -3
  65. package/src/providers/_schema.json +1 -1
  66. package/src/providers/claude-code/provider.mjs +9 -3
  67. package/src/providers/codex/provider.mjs +9 -4
  68. package/src/providers/grok/provider.mjs +9 -4
  69. package/src/setup.js +32 -0
  70. package/src/workflow/cli.js +61 -3
  71. package/src/workflow/dashboard.js +1095 -365
  72. package/src/workflow/usage-view.js +444 -0
  73. package/src/workflow/v2-dispatch.js +183 -26
  74. package/src/workflow/v2-outcome.js +4 -1
  75. package/src/workflow/v2-presentation.js +1 -1
  76. package/src/workflow/v2-runtime.js +43 -10
  77. package/src/workflow/v2-state.js +7 -1
  78. package/src/workflow/watch-cli.js +43 -2
  79. package/docs/_config.yml +0 -7
  80. package/docs/guide/dashboard.md +0 -193
  81. package/docs/guide/doctrine.md +0 -63
  82. package/docs/guide/entry-points.md +0 -71
  83. package/docs/guide/operations.md +0 -132
  84. package/docs/guide/repository-operations.md +0 -15
  85. package/docs/guide/strategy.md +0 -171
package/AGENTS.md CHANGED
@@ -16,7 +16,7 @@ content. Published as `bullswarm` on npm.
16
16
  `src/meters/framework.js`).
17
17
  3. Provider quirks live in the provider's directory (`src/providers/<name>/`,
18
18
  `providers/contrib/<name>/`, or `~/.bullswarm/providers/<name>/`), never in
19
- core logic (see `docs/guide/providers.md`).
19
+ core logic (see `docs/reference/providers.md`).
20
20
  4. Quarantine always auto-releases; recursion depth is core-owned via env
21
21
  (`BULLSWARM_DEPTH`).
22
22
  5. Workflow dispatches must honor the same guarantees as single runs:
@@ -84,7 +84,7 @@ providers live in `src/providers/<name>/`, contrib providers in
84
84
  `bullswarm provider scaffold <name> [--from <template>]`, then
85
85
  `bullswarm provider validate` and `bullswarm provider probe <pool>`. Write a
86
86
  `readUsage` export only if the vendor exposes a usage API — declared meters
87
- are the fallback, never the goal. The contract is `docs/guide/providers.md`;
87
+ are the fallback, never the goal. The contract is `docs/reference/providers.md`;
88
88
  the authoring method is `skill/references/providers.md`.
89
89
 
90
90
  ## Releasing
package/CHANGELOG.md CHANGED
@@ -1,5 +1,156 @@
1
1
  # bullswarm changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 0.32.1 — free models first, with graceful failover
6
+
7
+ - meters: rate-limited or failed live reads now persist a per-pool negative-cache hold (honouring `Retry-After` or the five-minute freshness window), and `pools`/the Claude Mod identify the stale snapshot's error and retry time.
8
+ - rename: the OpenCode pool is now `opencode`; the first run migrates saved
9
+ state, routing, provider, and meter names automatically, while historical
10
+ workflow run records keep their recorded `opencode2` name.
11
+ - routing: a pool whose model for the effort tier costs nothing is ranked ahead
12
+ of every metered pool while it is healthy. Free-ness is per (pool, effort
13
+ tier) and comes from the connector — `modelProfiles[].free`, or a model name
14
+ carrying a standalone `free` segment. The free tier sits below the forecast
15
+ gate and the 5-hour headroom tier and above expiring-soon urgency, so an
16
+ expiring metered window can now go unspent while free work runs; the ranking
17
+ among metered pools is unchanged. The reason reads `free pool first: <pool>
18
+ (free model <model>, …) · metered pools ranked below free: <pool> <surplus>`.
19
+ - routing: a pool that stalls, returns a server error, or (on a free pool) hands
20
+ back literally empty output takes a strike. The first is recorded; the second
21
+ consecutive one soft-benches the pool for a 10-minute cooldown, after which it
22
+ returns automatically. The strike count survives the cooldown and is cleared
23
+ only by a success. Auth is untouched: an upstream auth failure still
24
+ quarantines and still spreads across a credential group. An answer the
25
+ verifier judged thin but not empty stays semantic and is not retried
26
+ elsewhere.
27
+ - workflow: a free pool's silence clock is the median wall time of its own
28
+ recorded runs at that (pool, effort) rung — the `p50`, once 3 runs exist there
29
+ — with a 5-minute floor, instead of the one-hour default a metered pool keeps.
30
+ The multiplier on that median is 1 (`FREE_STALL_P50_FACTOR`): a worker silent
31
+ for as long as the whole rung usually takes has stopped working. Stalled
32
+ attempts are excluded from the median so a pool cannot tighten its own
33
+ threshold by stalling.
34
+ - workflow: a stalled attempt ends, keeps its partial output on disk (the retry
35
+ writes a new `-attempt-N` file beside it, never over it), releases its
36
+ in-flight ledger entry, and re-dispatches the same action on the next eligible
37
+ pool in the same run. The attempt record and `attempt.finished` carry
38
+ `stalled`, `partialOutput`, `silentSec` and `willRetry`; a new `pool.benched` event names
39
+ the pool, reason, strike count and deadline; the retry's reason is prefixed
40
+ `fallback from <pool> after stall <n>s`. A free-pool stall (and the
41
+ free-only literally-empty-output provider reclassification) does not spend
42
+ `maxMechanicalRetries`; the tried-set is the bound and each pool is tried at
43
+ most once for the action. A metered-pool stall keeps the mechanical retry
44
+ accounting.
45
+ - workflow: evidence and acceptance steps are exempt from the free tier and
46
+ route on pace as before, with one preference — a pool that wrote the work
47
+ being judged is chosen last, and only when no other pool is eligible, which
48
+ the reason then says (`evidence step: only the writer pool <pool> is
49
+ eligible`). This restores, in prefer-not rather than forbid form, the steering
50
+ removed in `eb83b79`; the reason line now names the exception, which its
51
+ absence was half the reason for that removal.
52
+ - pools: `bullswarm pools` prints `free=<model>` for a pool whose model costs
53
+ nothing (`free=<tier>:<model>` when it differs per effort tier, since `pools`
54
+ names no lane), `BENCHED until <time> (<reason>, <n> strikes)` for a benched
55
+ pool, and `strikes=<n>(<reason>)` for one carrying an uncounted-out strike. It
56
+ sweeps expired benches the same way it sweeps expired quarantines.
57
+ - routing: measured pacing rates now charge timed in-flight work at the actual
58
+ `rate × remaining minutes` with no 3-point floor, so an expiring-soon pool
59
+ with a known burn rate is not demoted by a tie-breaker meant for unmeasured
60
+ pools. `config.inflightPenaltyPct` remains the per-agent fallback for pools
61
+ without a measured rate (and for in-flight records with unknown duration).
62
+ - workflow: every attempt record now carries `routeWhy` (the router's reason)
63
+ and `routeCandidates` (each pool's effective surplus, urgency state and
64
+ pacing forecast at pick time); `workflow action show --json` and
65
+ `runs result --json` print them, and older state files still load.
66
+
67
+ - routing: a pool whose pacing window is about to reset is `draining` only
68
+ when its forecast is at or above 95% *and* ahead of the window's own clock,
69
+ the same clock-relative shape the 5h near-limit line already has. A pool on
70
+ or behind pace keeps spending right up to its reset instead of being ranked
71
+ last by a fixed line (observed 2026-09-16: command-code at 94.9% used with
72
+ 98% of the month gone was passed over while +3 points of quota expired).
73
+ The skip reason now reads `expiring but draining (forecast >= 95% and past
74
+ its clock): <pool> <forecast>% (<elapsed>% elapsed)`.
75
+ - workflow goal: refuses to launch a duplicate of a run that is already going.
76
+ Before anything is validated or launched, an ongoing run with the same goal
77
+ text and cwd exits 2, naming that run's shortId, age, and watch command
78
+ (JSON: `{"error":"duplicate-goal",...}`); `--again` starts the copy anyway
79
+ (observed 2026-09-16: a caller whose JSON parser failed on the first
80
+ launch's output retried five seconds later and two identical workflows ran
81
+ side by side in the same directory).
82
+
83
+ ## 0.32.0 — the dashboard is the main screen
84
+
85
+ - wording: a program run's dependency levels are called phases everywhere the
86
+ product prints them (`Phase 2 · integrate`), matching what the planner's runs
87
+ already say; the ids in the events are unchanged.
88
+ - dashboard: the full-screen Home, Run, Step, Usage, and Help pages now share
89
+ a sticky header and bottom nav, keyboard shortcuts, mouse clicks, and wheel
90
+ scrolling, so a live workflow can be understood in one place.
91
+ - usage and edit: Usage renders every meter window, elapsed mark, reset, pace,
92
+ credit meter, and rung record with the same coloured cells as the status
93
+ view; its read-only note hands `[edit]` to setup and returns with fresh data.
94
+ - install: Home's `[install]` action runs the same integration install as
95
+ `bullswarm integrate install --yes`, then shows each agent's skill,
96
+ awareness, and Claude Mod status.
97
+ - bare command: after setup, bare `bullswarm` opens the dashboard; the first
98
+ run and `bullswarm --setup` or `bullswarm setup` open setup, while
99
+ `bullswarm workflow tui` remains the explicit dashboard form.
100
+ - docs: the README, guides, CLI reference, and Claude Code pages now make the
101
+ dashboard the main screen and describe the Claude Mod as its read-only
102
+ counterpart — the same Run, Step, and Usage pages in the same colours, with
103
+ no edit or install action.
104
+
105
+ ## 0.31.0 — the Claude Mod, and a documentation site
106
+
107
+ - mod: `mods/bullswarm` puts Bullswarm inside Claude Code's own interface as a
108
+ Claude Mod (function hooks, early access behind
109
+ `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1`). Claude's general-purpose subagents
110
+ are routed to the pool with spare quota through `bullswarm run --no-caller`
111
+ and answered with the verified output; the verdict of every `bullswarm run`
112
+ and `workflow goal` the model runs is appended to its Bash result; the pool
113
+ meters are named in the model's context; a strip above the prompt lists
114
+ the ongoing workflow runs; and a docked pane shows one run as
115
+ `bullswarm workflow tui` draws it, every step a button that opens the
116
+ step laid out as the TUI's agent panel. `/bullswarm pools|status|on|off|
117
+ refresh|runs|pane|open <step> [run]|routed` answer from the mod; anything
118
+ else still reaches the packaged skill. The pool rows draw a white mark
119
+ where the window's elapsed time falls, and `usage` in the pane's bottom
120
+ nav opens a page with every meter window of every pool, its reset time
121
+ and pace, the credit meter where there is one, and every pool × tier rung
122
+ with its model, reasoning and record, grouped by lane or by provider. A
123
+ `route` tool lets the model switch routing when the person asks. Pool
124
+ display names come from the
125
+ `poolAliases` option; `strip` picks `runs`, `full` or `off`.
126
+ - integrate: `bullswarm integrate install --agents claude --yes` also links
127
+ the mod under `~/.claude/skills/bullswarm-mod` and sets
128
+ `env.CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` to `"1"` in `~/.claude/settings.json`;
129
+ `status` reports both and `remove` undoes both. A `settings.json` that is
130
+ not a JSON object is left alone and reported. `.claude-plugin/marketplace.json`
131
+ at the repository root makes `claude plugin marketplace add Bulls-Work/bullswarm`
132
+ and `claude plugin install bullswarm@bullswarm` work too.
133
+ - workflow tui: the Preflight milestone now states the accepted goal (wrapped)
134
+ with the paths of `goal.json` and `initial-planner-response.json`, and the
135
+ planner milestone says how many actions in how many dependency levels the
136
+ plan has. The Live section lists the planner only while it is planning;
137
+ the "waiting for N workers" planner row and the "· N waiting" count are
138
+ gone, since Next already says that. The first plan's own milestone is gone
139
+ too: the levels that follow it say what it planned; plan revisions and
140
+ rejected planning attempts still appear. A goal with several lines wraps
141
+ line by line instead of carrying a line break inside one row. `workflow tui <run> --overview
142
+ [--width <cols>] [--height <rows>]` prints one overview frame (or `--json`)
143
+ for a caller that draws its own.
144
+ - docs: the documentation site is now a VitePress site under `docs-site/`,
145
+ built from `docs/` and deployed to GitHub Pages by
146
+ `.github/workflows/docs.yml` at https://bulls-work.github.io/bullswarm/.
147
+ Guide (introduction, getting started, concepts, run, workflows, observing,
148
+ routing), Reference (CLI, workflow program, configuration, providers,
149
+ result envelope) and Integrations (Claude Code, Codex and Grok, issue
150
+ watcher) replace the Jekyll pages; the historical notes are indexed under
151
+ `/notes/`. `tests/unknown-flags.test.js` now checks every command form on
152
+ the new pages against the CLI.
153
+
3
154
  ## 0.30.0 — a run never waits: it finishes and hands back what is left
4
155
 
5
156
  - workflow: a run no longer waits for anyone. Every point where a
package/GOAL.md CHANGED
@@ -35,7 +35,7 @@ A working prototype installed at `~/.bullswarm/` with:
35
35
  2. **Connector registry** (`~/.bullswarm/connectors/*.json`): declarative per-CLI
36
36
  spawn command, auth-failure signatures, output extraction, verify contract,
37
37
  quirk fields (e.g. PWD resolution). Seeded with codex, grok,
38
- command-code, opencode2 — extracted from the proven `/offload` skill.
38
+ command-code, opencode — extracted from the proven `/offload` skill.
39
39
  3. **Meter layer**: per-pool window definition (5h / weekly / none) with
40
40
  programmatic readers where providers expose usage, manual declaration
41
41
  (`--meter pool=window,pct`) where they don't. Unmetered pools pace as
package/README.md CHANGED
@@ -43,12 +43,53 @@ version in place (`bullswarm update --check` only reports). Requires Node.js
43
43
  22.12 or later. `bullswarm setup` walks through detecting your
44
44
  installed agent CLIs, showing their quota state, and writing a routing
45
45
  configuration. See
46
- [Getting started](https://cowcow02.github.io/bullswarm/guide/getting-started/)
46
+ [Getting started](https://bulls-work.github.io/bullswarm/guide/getting-started)
47
47
  for integrating Bullswarm's skill into Codex, Claude, and Grok, and for the
48
48
  full quick-start command list.
49
49
 
50
+ ## Claude Mod (early access)
51
+
52
+ `mods/bullswarm` is the same routing injected into Claude Code's own engine
53
+ as a Claude Mod (a plugin of TypeScript function hooks, behind
54
+ `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1`): the pool meters drawn above the
55
+ prompt, the pools named in the model's context, Claude's general-purpose
56
+ subagents routed to whichever pool has surplus and answered with the
57
+ verified output, and the verdict appended to every `bullswarm run` the model
58
+ runs. The Mod is the dashboard's read-only counterpart: the same Run, Step and
59
+ Usage pages in the same meter colours, with no edit or install action. See
60
+ [mods/bullswarm/README.md](mods/bullswarm/README.md).
61
+
62
+ Three ways to load it:
63
+
64
+ ```bash
65
+ # with the CLI: links the mod under ~/.claude/skills and sets the flag in ~/.claude/settings.json
66
+ bullswarm integrate install --agents claude --yes
67
+
68
+ # from Claude Code's plugin marketplace (a copy that `claude plugin update` refreshes)
69
+ claude plugin marketplace add Bulls-Work/bullswarm
70
+ claude plugin install bullswarm@bullswarm
71
+
72
+ # one session only, from the installed package
73
+ CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude --plugin-dir "$(npm root -g)/bullswarm/mods/bullswarm"
74
+ ```
75
+
76
+ The marketplace route still needs `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1`, in
77
+ the shell or under `env` in `~/.claude/settings.json`, and the `bullswarm`
78
+ CLI on `PATH`. Pick one route: an installed marketplace copy takes precedence
79
+ over the skills-dir link, and Claude says so at startup.
80
+
50
81
  ## Quick start
51
82
 
83
+ Once setup is complete, bare `bullswarm` opens the dashboard on its Home page.
84
+ Use `bullswarm --setup` or `bullswarm setup` to open setup again, and use
85
+ `bullswarm workflow tui` when you want the explicit dashboard command. The
86
+ pages are Home, Run, Step, Usage, and Help. A sticky header and bottom nav
87
+ (`[ 1.<run> ] … [ usage ] [ help ] [ quit ]`, each button's key
88
+ underlined inside its label) carry `q` (quit),
89
+ `h` or `?` (help), `u` (usage), `e` (edit), `i` (install), `l`/`p` (Usage tabs), arrows or
90
+ PgUp/PgDn (scroll), and Enter; click any button, tab, run or step, or use the
91
+ wheel to scroll.
92
+
52
93
  One bounded outcome — a task with a clear finish line:
53
94
 
54
95
  ```bash
@@ -107,7 +148,7 @@ instead.
107
148
  and never retried early.
108
149
 
109
150
  The full mechanics behind each of these are in
110
- [Routing](https://cowcow02.github.io/bullswarm/guide/routing/).
151
+ [Routing](https://bulls-work.github.io/bullswarm/guide/routing).
111
152
 
112
153
  ## What you get back
113
154
 
@@ -121,7 +162,7 @@ The full mechanics behind each of these are in
121
162
  content still verified; read it before re-running
122
163
 
123
164
  A non-zero exit from the delegate is never treated as success on its own. See
124
- [Doctrine](https://cowcow02.github.io/bullswarm/guide/doctrine/) for the full
165
+ [Result envelope](https://bulls-work.github.io/bullswarm/reference/result) for the full
125
166
  verdict shape.
126
167
 
127
168
  A workflow produces a durable, versioned result envelope — a JSON document
@@ -137,29 +178,37 @@ bullswarm workflow runs result <shortId> --json --summary # compact status once
137
178
  the exact flags to keep polling; `runs result --summary` is what to read once
138
179
  a run finishes, and `runs result --json` (no `--summary`) gives the full
139
180
  envelope for a failed or partial run. See
140
- [Operations](https://cowcow02.github.io/bullswarm/guide/operations/) for the
181
+ [Observing runs](https://bulls-work.github.io/bullswarm/guide/observing) for the
141
182
  full shape of both.
142
183
 
143
184
  ## Documentation
144
185
 
145
186
  The full documentation is published at
146
- [cowcow02.github.io/bullswarm](https://cowcow02.github.io/bullswarm/) once
147
- GitHub Pages is enabled for this repository (Settings → Pages → deploy from
148
- branch `main`, folder `/docs`). Until then, the same pages are readable
149
- directly under [`docs/guide/`](docs/guide/) in this repository.
187
+ [bulls-work.github.io/bullswarm](https://bulls-work.github.io/bullswarm/).
188
+
189
+ The dashboard is the main screen after setup: bare `bullswarm` opens Home,
190
+ `bullswarm --setup` or `bullswarm setup` opens setup, and
191
+ `bullswarm workflow tui` is the explicit form. The [Observing runs](https://bulls-work.github.io/bullswarm/guide/observing)
192
+ page maps its pages, keys, and mouse controls.
150
193
 
151
194
  | Page | What it covers |
152
195
  |---|---|
153
- | [Entry points](https://cowcow02.github.io/bullswarm/guide/entry-points/) | `run` vs `workflow goal`, and every top-level verb |
154
- | [Doctrine](https://cowcow02.github.io/bullswarm/guide/doctrine/) | The non-negotiable rules, and the result verdict shape |
155
- | [Getting started](https://cowcow02.github.io/bullswarm/guide/getting-started/) | Install, agent integration, quick-start commands |
156
- | [Strategy](https://cowcow02.github.io/bullswarm/guide/strategy/) | Model/provider configuration, rungs (model plus reasoning level per effort tier), benchmark evidence |
157
- | [Workflows](https://cowcow02.github.io/bullswarm/guide/workflows/) | Authoring a program, kinds, advisories, plan contract/validate/goal |
158
- | [Operations](https://cowcow02.github.io/bullswarm/guide/operations/) | Listing/inspecting runs, the result envelope, context diet |
159
- | [Dashboard](https://cowcow02.github.io/bullswarm/guide/dashboard/) | `workflow watch`, the interactive TUI, terminal glyph fallback |
160
- | [Repository operations](https://cowcow02.github.io/bullswarm/guide/repository-operations/) | The issue-watcher launchd agent |
161
- | [Routing](https://cowcow02.github.io/bullswarm/guide/routing/) | How a pool is picked: pace, headroom, urgency, load, quarantine |
162
- | [Providers](https://cowcow02.github.io/bullswarm/guide/providers/) | Adding your own agent CLI or reseller account as a provider plugin |
196
+ | [Introduction](https://bulls-work.github.io/bullswarm/guide/) | What Bullswarm is, the two entry points, and the four rules it never breaks |
197
+ | [Getting started](https://bulls-work.github.io/bullswarm/guide/getting-started) | Install, `setup`, `doctor`, agent integration, and your first verified run |
198
+ | [Concepts](https://bulls-work.github.io/bullswarm/guide/concepts) | Pools, lanes, surplus, the two windows, verdicts, quarantine, and the run directory |
199
+ | [Run one task](https://bulls-work.github.io/bullswarm/guide/run) | Every `bullswarm run` option, and what each verdict asks you to do |
200
+ | [Workflows](https://bulls-work.github.io/bullswarm/guide/workflows) | Authoring the program `workflow goal` executes: territories, dependencies, integration, acceptance |
201
+ | [Observing runs](https://bulls-work.github.io/bullswarm/guide/observing) | `workflow watch`, the Home/Run/Step/Usage/Help dashboard pages, keys, mouse, and terminal glyphs |
202
+ | [Routing](https://bulls-work.github.io/bullswarm/guide/routing) | How a pool is picked: pace, 5-hour headroom, urgency, load, quarantine |
203
+ | [CLI reference](https://bulls-work.github.io/bullswarm/reference/cli) | Every verb and nested subcommand, with its flags and defaults |
204
+ | [Workflow program](https://bulls-work.github.io/bullswarm/reference/program) | The `bullswarm.workflow.program.v2` document: action fields, kinds, validation rules |
205
+ | [Configuration](https://bulls-work.github.io/bullswarm/reference/configuration) | The Bullswarm home, `state.json`, strategy models and rungs, environment variables |
206
+ | [Providers](https://bulls-work.github.io/bullswarm/reference/providers) | Adding your own agent CLI or reseller account as a provider plugin |
207
+ | [Result envelope](https://bulls-work.github.io/bullswarm/reference/result) | Every field of `run --json` and of the workflow result document |
208
+ | [Claude Code](https://bulls-work.github.io/bullswarm/integrations/claude-code) | The packaged skill, the MCP server, and the read-only Claude Mod counterpart under `mods/bullswarm` |
209
+ | [Codex and Grok](https://bulls-work.github.io/bullswarm/integrations/agent-clis) | What `bullswarm integrate` writes for each agent CLI, and how to check it |
210
+ | [Issue watcher](https://bulls-work.github.io/bullswarm/integrations/issue-watcher) | The launchd agent that triages and fixes new GitHub issues |
211
+ | [Historical notes](https://bulls-work.github.io/bullswarm/notes/) | Working notes, audits, and experiment writeups, kept as records |
163
212
 
164
213
  ## License
165
214