beadhive 0.1.0__tar.gz

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 (215) hide show
  1. beadhive-0.1.0/.claude/settings.json +19 -0
  2. beadhive-0.1.0/.githooks/pre-commit +4 -0
  3. beadhive-0.1.0/.github/workflows/release.yml +46 -0
  4. beadhive-0.1.0/.gitignore +47 -0
  5. beadhive-0.1.0/.markdownlint-cli2.jsonc +19 -0
  6. beadhive-0.1.0/.mise.toml +11 -0
  7. beadhive-0.1.0/Brewfile +9 -0
  8. beadhive-0.1.0/CHANGELOG.md +35 -0
  9. beadhive-0.1.0/INSTALL.md +122 -0
  10. beadhive-0.1.0/PKG-INFO +84 -0
  11. beadhive-0.1.0/README.md +67 -0
  12. beadhive-0.1.0/docs/AGF.md +269 -0
  13. beadhive-0.1.0/docs/ASSURANCE.md +89 -0
  14. beadhive-0.1.0/docs/BEAD-BACKENDS.md +201 -0
  15. beadhive-0.1.0/docs/BEADS-SYNC.md +148 -0
  16. beadhive-0.1.0/docs/CLI.md +68 -0
  17. beadhive-0.1.0/docs/CONFIGURATION.md +321 -0
  18. beadhive-0.1.0/docs/CONTROL-PLANE.md +213 -0
  19. beadhive-0.1.0/docs/DESIGN.md +107 -0
  20. beadhive-0.1.0/docs/DIAGNOSTICS.md +51 -0
  21. beadhive-0.1.0/docs/DOLT.md +43 -0
  22. beadhive-0.1.0/docs/HUB.md +61 -0
  23. beadhive-0.1.0/docs/INTEGRATIONS.md +182 -0
  24. beadhive-0.1.0/docs/LABELS.md +67 -0
  25. beadhive-0.1.0/docs/MCP.md +200 -0
  26. beadhive-0.1.0/docs/METADATA-CACHE.md +294 -0
  27. beadhive-0.1.0/docs/OBSERVABILITY.md +389 -0
  28. beadhive-0.1.0/docs/ONBOARDING.md +634 -0
  29. beadhive-0.1.0/docs/OVERVIEW.md +70 -0
  30. beadhive-0.1.0/docs/PASSTHROUGH.md +83 -0
  31. beadhive-0.1.0/docs/PLANNING-PLANE.md +235 -0
  32. beadhive-0.1.0/docs/REPORT-CHANNEL.md +193 -0
  33. beadhive-0.1.0/docs/RIGS.md +359 -0
  34. beadhive-0.1.0/docs/WORK.md +361 -0
  35. beadhive-0.1.0/docs/WORKTREES.md +228 -0
  36. beadhive-0.1.0/docs/design/ade-client-interfaces.md +187 -0
  37. beadhive-0.1.0/docs/design/bead-backend-abstraction.md +169 -0
  38. beadhive-0.1.0/docs/design/br-agf-fit-and-state-compat-layers.md +369 -0
  39. beadhive-0.1.0/docs/design/gas-frameworks-comparison.md +357 -0
  40. beadhive-0.1.0/docs/design/limn-name-collision-check.md +106 -0
  41. beadhive-0.1.0/docs/design/limn-naming-strategy-adr.md +116 -0
  42. beadhive-0.1.0/docs/design/roles-rbac-matrix.md +200 -0
  43. beadhive-0.1.0/docs/design/roles-rbac-reconciliation-log.md +141 -0
  44. beadhive-0.1.0/docs/schemas/report-channel.example.json +17 -0
  45. beadhive-0.1.0/docs/schemas/report-channel.schema.json +76 -0
  46. beadhive-0.1.0/docs/spikes/fekf-10-resumable-agent.md +157 -0
  47. beadhive-0.1.0/justfile +88 -0
  48. beadhive-0.1.0/pyproject.toml +77 -0
  49. beadhive-0.1.0/scripts/profile_fleet_health.py +116 -0
  50. beadhive-0.1.0/src/beadhive/__init__.py +1 -0
  51. beadhive-0.1.0/src/beadhive/adopt.py +143 -0
  52. beadhive-0.1.0/src/beadhive/archive.py +165 -0
  53. beadhive-0.1.0/src/beadhive/assets/AGF-hint.md +10 -0
  54. beadhive-0.1.0/src/beadhive/assets/PRIME.md +131 -0
  55. beadhive-0.1.0/src/beadhive/assets/claude-settings.json +21 -0
  56. beadhive-0.1.0/src/beadhive/assets/observaloop/bh-dashboard.json +1100 -0
  57. beadhive-0.1.0/src/beadhive/assets/observaloop/cli-metrics-preset.yaml +49 -0
  58. beadhive-0.1.0/src/beadhive/bd.py +154 -0
  59. beadhive-0.1.0/src/beadhive/cli.py +1484 -0
  60. beadhive-0.1.0/src/beadhive/config.py +1304 -0
  61. beadhive-0.1.0/src/beadhive/doctor.py +675 -0
  62. beadhive-0.1.0/src/beadhive/dolt.py +130 -0
  63. beadhive-0.1.0/src/beadhive/escalate.py +153 -0
  64. beadhive-0.1.0/src/beadhive/git.py +45 -0
  65. beadhive-0.1.0/src/beadhive/gitworkspace.py +86 -0
  66. beadhive-0.1.0/src/beadhive/guard.py +292 -0
  67. beadhive-0.1.0/src/beadhive/hq.py +53 -0
  68. beadhive-0.1.0/src/beadhive/hub.py +202 -0
  69. beadhive-0.1.0/src/beadhive/identity.py +114 -0
  70. beadhive-0.1.0/src/beadhive/log.py +176 -0
  71. beadhive-0.1.0/src/beadhive/mcp.py +875 -0
  72. beadhive-0.1.0/src/beadhive/metadata.py +420 -0
  73. beadhive-0.1.0/src/beadhive/molecule.py +333 -0
  74. beadhive-0.1.0/src/beadhive/observaloop.py +465 -0
  75. beadhive-0.1.0/src/beadhive/observaloop_env.py +170 -0
  76. beadhive-0.1.0/src/beadhive/onboard.py +735 -0
  77. beadhive-0.1.0/src/beadhive/orca.py +655 -0
  78. beadhive-0.1.0/src/beadhive/otel.py +958 -0
  79. beadhive-0.1.0/src/beadhive/otel_lgtm.py +75 -0
  80. beadhive-0.1.0/src/beadhive/plan.py +966 -0
  81. beadhive-0.1.0/src/beadhive/plugins.py +64 -0
  82. beadhive-0.1.0/src/beadhive/registry.py +425 -0
  83. beadhive-0.1.0/src/beadhive/report.py +191 -0
  84. beadhive-0.1.0/src/beadhive/report_target.py +120 -0
  85. beadhive-0.1.0/src/beadhive/retire.py +368 -0
  86. beadhive-0.1.0/src/beadhive/rig.py +658 -0
  87. beadhive-0.1.0/src/beadhive/rig_migrate.py +167 -0
  88. beadhive-0.1.0/src/beadhive/rig_ready.py +268 -0
  89. beadhive-0.1.0/src/beadhive/role.py +151 -0
  90. beadhive-0.1.0/src/beadhive/route.py +90 -0
  91. beadhive-0.1.0/src/beadhive/run.py +78 -0
  92. beadhive-0.1.0/src/beadhive/safety.py +1325 -0
  93. beadhive-0.1.0/src/beadhive/schedule.py +294 -0
  94. beadhive-0.1.0/src/beadhive/setup.py +218 -0
  95. beadhive-0.1.0/src/beadhive/state.py +154 -0
  96. beadhive-0.1.0/src/beadhive/survey.py +270 -0
  97. beadhive-0.1.0/src/beadhive/templates/config.example.yaml +183 -0
  98. beadhive-0.1.0/src/beadhive/templates/docker-compose.otel.yml +30 -0
  99. beadhive-0.1.0/src/beadhive/templates/docker-compose.yml +24 -0
  100. beadhive-0.1.0/src/beadhive/templates/env.example +20 -0
  101. beadhive-0.1.0/src/beadhive/triage.py +293 -0
  102. beadhive-0.1.0/src/beadhive/validate.py +116 -0
  103. beadhive-0.1.0/src/beadhive/work.py +1801 -0
  104. beadhive-0.1.0/src/beadhive/work_group.py +258 -0
  105. beadhive-0.1.0/src/beadhive/work_logic.py +200 -0
  106. beadhive-0.1.0/src/beadhive/work_show.py +213 -0
  107. beadhive-0.1.0/src/beadhive/worktree.py +1516 -0
  108. beadhive-0.1.0/src/beadhive/worktree_merge.py +238 -0
  109. beadhive-0.1.0/src/beadhive/wt_status.py +275 -0
  110. beadhive-0.1.0/tests/conftest.py +85 -0
  111. beadhive-0.1.0/tests/fixture_config.yaml +33 -0
  112. beadhive-0.1.0/tests/fixture_workspace.toml +14 -0
  113. beadhive-0.1.0/tests/harness/__init__.py +6 -0
  114. beadhive-0.1.0/tests/harness/beads.py +94 -0
  115. beadhive-0.1.0/tests/harness/graph.py +42 -0
  116. beadhive-0.1.0/tests/harness/history.py +75 -0
  117. beadhive-0.1.0/tests/harness/modalities.py +208 -0
  118. beadhive-0.1.0/tests/harness/noisy.py +74 -0
  119. beadhive-0.1.0/tests/harness/render.py +134 -0
  120. beadhive-0.1.0/tests/harness/rig.py +96 -0
  121. beadhive-0.1.0/tests/harness/world.py +125 -0
  122. beadhive-0.1.0/tests/test_adopt.py +114 -0
  123. beadhive-0.1.0/tests/test_agf_modalities.py +42 -0
  124. beadhive-0.1.0/tests/test_agf_remote_sandbox.py +49 -0
  125. beadhive-0.1.0/tests/test_bd_json_seam.py +85 -0
  126. beadhive-0.1.0/tests/test_bd_repo_sync_additive.py +166 -0
  127. beadhive-0.1.0/tests/test_config.py +244 -0
  128. beadhive-0.1.0/tests/test_config_claude.py +168 -0
  129. beadhive-0.1.0/tests/test_config_dotted.py +221 -0
  130. beadhive-0.1.0/tests/test_config_observaloop.py +241 -0
  131. beadhive-0.1.0/tests/test_config_orca.py +155 -0
  132. beadhive-0.1.0/tests/test_config_work.py +119 -0
  133. beadhive-0.1.0/tests/test_config_worktrees.py +42 -0
  134. beadhive-0.1.0/tests/test_doctor.py +390 -0
  135. beadhive-0.1.0/tests/test_error_boundaries.py +337 -0
  136. beadhive-0.1.0/tests/test_escalate.py +310 -0
  137. beadhive-0.1.0/tests/test_guard.py +234 -0
  138. beadhive-0.1.0/tests/test_hq.py +319 -0
  139. beadhive-0.1.0/tests/test_hub.py +212 -0
  140. beadhive-0.1.0/tests/test_identity.py +92 -0
  141. beadhive-0.1.0/tests/test_log.py +207 -0
  142. beadhive-0.1.0/tests/test_mcp.py +393 -0
  143. beadhive-0.1.0/tests/test_mcp_doctor_resource.py +70 -0
  144. beadhive-0.1.0/tests/test_mcp_install.py +127 -0
  145. beadhive-0.1.0/tests/test_mcp_labels_validation_resource.py +159 -0
  146. beadhive-0.1.0/tests/test_mcp_notify.py +110 -0
  147. beadhive-0.1.0/tests/test_mcp_plans_resources.py +189 -0
  148. beadhive-0.1.0/tests/test_mcp_resource.py +441 -0
  149. beadhive-0.1.0/tests/test_mcp_resources.py +73 -0
  150. beadhive-0.1.0/tests/test_mcp_rigs_resources.py +163 -0
  151. beadhive-0.1.0/tests/test_mcp_tool_span.py +203 -0
  152. beadhive-0.1.0/tests/test_mcp_work_intake_dupes_resource.py +140 -0
  153. beadhive-0.1.0/tests/test_mcp_work_issue_resource.py +129 -0
  154. beadhive-0.1.0/tests/test_mcp_work_ready_resource.py +128 -0
  155. beadhive-0.1.0/tests/test_mcp_work_schedule_resource.py +251 -0
  156. beadhive-0.1.0/tests/test_mcp_work_show_resource.py +208 -0
  157. beadhive-0.1.0/tests/test_metadata.py +452 -0
  158. beadhive-0.1.0/tests/test_metrics_verify.py +250 -0
  159. beadhive-0.1.0/tests/test_molecule.py +270 -0
  160. beadhive-0.1.0/tests/test_observaloop.py +592 -0
  161. beadhive-0.1.0/tests/test_observaloop_cli.py +224 -0
  162. beadhive-0.1.0/tests/test_observaloop_env.py +275 -0
  163. beadhive-0.1.0/tests/test_onboard.py +259 -0
  164. beadhive-0.1.0/tests/test_onboard_dag.py +303 -0
  165. beadhive-0.1.0/tests/test_onboard_plugin.py +121 -0
  166. beadhive-0.1.0/tests/test_orca.py +1016 -0
  167. beadhive-0.1.0/tests/test_otel.py +845 -0
  168. beadhive-0.1.0/tests/test_otel_cli.py +62 -0
  169. beadhive-0.1.0/tests/test_otel_cli_instrument.py +225 -0
  170. beadhive-0.1.0/tests/test_otel_cli_span.py +237 -0
  171. beadhive-0.1.0/tests/test_otel_flow.py +121 -0
  172. beadhive-0.1.0/tests/test_otel_genai.py +146 -0
  173. beadhive-0.1.0/tests/test_otel_instrument.py +230 -0
  174. beadhive-0.1.0/tests/test_otel_lgtm.py +96 -0
  175. beadhive-0.1.0/tests/test_otel_passthrough.py +141 -0
  176. beadhive-0.1.0/tests/test_otel_verify.py +202 -0
  177. beadhive-0.1.0/tests/test_plan.py +1299 -0
  178. beadhive-0.1.0/tests/test_plugin_cli.py +126 -0
  179. beadhive-0.1.0/tests/test_plugins.py +88 -0
  180. beadhive-0.1.0/tests/test_refine.py +145 -0
  181. beadhive-0.1.0/tests/test_report.py +238 -0
  182. beadhive-0.1.0/tests/test_report_channel.py +69 -0
  183. beadhive-0.1.0/tests/test_report_target.py +112 -0
  184. beadhive-0.1.0/tests/test_retire.py +211 -0
  185. beadhive-0.1.0/tests/test_rig_add_rm.py +77 -0
  186. beadhive-0.1.0/tests/test_rig_agents.py +38 -0
  187. beadhive-0.1.0/tests/test_rig_agf_hint.py +44 -0
  188. beadhive-0.1.0/tests/test_rig_archive.py +403 -0
  189. beadhive-0.1.0/tests/test_rig_available.py +108 -0
  190. beadhive-0.1.0/tests/test_rig_claude.py +93 -0
  191. beadhive-0.1.0/tests/test_rig_migrate.py +180 -0
  192. beadhive-0.1.0/tests/test_rig_observaloop.py +366 -0
  193. beadhive-0.1.0/tests/test_rig_onboard.py +187 -0
  194. beadhive-0.1.0/tests/test_rig_plugin_installer.py +350 -0
  195. beadhive-0.1.0/tests/test_rig_ready.py +161 -0
  196. beadhive-0.1.0/tests/test_rig_ready_plugin.py +111 -0
  197. beadhive-0.1.0/tests/test_rig_reinit.py +159 -0
  198. beadhive-0.1.0/tests/test_rig_retire.py +414 -0
  199. beadhive-0.1.0/tests/test_rig_skills.py +69 -0
  200. beadhive-0.1.0/tests/test_rig_survey.py +510 -0
  201. beadhive-0.1.0/tests/test_role.py +320 -0
  202. beadhive-0.1.0/tests/test_safety.py +1441 -0
  203. beadhive-0.1.0/tests/test_schedule.py +363 -0
  204. beadhive-0.1.0/tests/test_service_extraction.py +114 -0
  205. beadhive-0.1.0/tests/test_setup.py +387 -0
  206. beadhive-0.1.0/tests/test_sugar_verbs.py +156 -0
  207. beadhive-0.1.0/tests/test_triage.py +307 -0
  208. beadhive-0.1.0/tests/test_work.py +2560 -0
  209. beadhive-0.1.0/tests/test_work_flow.py +184 -0
  210. beadhive-0.1.0/tests/test_work_reads.py +107 -0
  211. beadhive-0.1.0/tests/test_work_refine_int.py +159 -0
  212. beadhive-0.1.0/tests/test_worktree.py +1383 -0
  213. beadhive-0.1.0/tests/test_ws.py +773 -0
  214. beadhive-0.1.0/tests/test_wt_status.py +477 -0
  215. beadhive-0.1.0/uv.lock +1888 -0
@@ -0,0 +1,19 @@
1
+ {
2
+ "permissions": {
3
+ "deny": [
4
+ "Bash(bd remember:*)"
5
+ ]
6
+ },
7
+ "hooks": {
8
+ "SessionStart": [
9
+ {
10
+ "hooks": [
11
+ {
12
+ "type": "command",
13
+ "command": "bd prime --hook-json"
14
+ }
15
+ ]
16
+ }
17
+ ]
18
+ }
19
+ }
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env sh
2
+ # ws pre-commit: ruff + markdownlint + pytest (via `just check`).
3
+ # Enable with `just hooks` (sets core.hooksPath). Bypass once with `git commit --no-verify`.
4
+ exec mise exec -- just check
@@ -0,0 +1,46 @@
1
+ name: release
2
+
3
+ # Publishes the built distribution to PyPI via Trusted Publishing (OIDC) — no
4
+ # stored API token. Fires on a v* tag push; workflow_dispatch allows a manual
5
+ # re-run. The Trusted Publisher on pypi.org must name this repo + this
6
+ # workflow file (release.yml) + project `beadhive` (see
7
+ # beadhive/infra manifests/trusted-publishers.yaml).
8
+ on:
9
+ push:
10
+ tags:
11
+ - "v*"
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ publish:
19
+ runs-on: ubuntu-latest
20
+ environment: pypi-prod # approval gate; configured under repo Settings → Environments
21
+ permissions:
22
+ contents: read # job-level perms REPLACE workflow-level — must re-list to checkout a private repo
23
+ id-token: write # required for OIDC token exchange with PyPI
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+
27
+ - name: Install uv
28
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
29
+ with:
30
+ enable-cache: true
31
+
32
+ - name: Build sdist + wheel
33
+ run: uv build
34
+
35
+ - name: Verify distribution metadata
36
+ run: uvx twine check dist/*
37
+
38
+ - name: Smoke-import the built wheel
39
+ run: uv run --isolated --no-project --with dist/*.whl python -c "import beadhive"
40
+
41
+ # Trusted Publishing via OIDC — `always` fails loudly if the OIDC token is
42
+ # absent (rather than silently looking for an API token). uv everywhere.
43
+ # NB: uv publish does not emit PEP 740 attestations (the pypa action would);
44
+ # revisit if attestations become a requirement.
45
+ - name: Publish to PyPI
46
+ run: uv publish --trusted-publishing always
@@ -0,0 +1,47 @@
1
+ # Secrets
2
+ .env
3
+
4
+ # Local Dolt data — issue data NEVER goes to GitHub
5
+ .dolt-data/
6
+
7
+ # Beads working copy / exports — no issue data on GitHub
8
+ .beads/
9
+ *.jsonl
10
+ backup/
11
+
12
+ # OS / tooling cruft
13
+ .DS_Store
14
+
15
+ # Python / bh build + tooling
16
+ .venv/
17
+ __pycache__/
18
+ *.egg-info/
19
+ dist/
20
+ build/
21
+ .ruff_cache/
22
+ .pytest_cache/
23
+
24
+ # Beads / Dolt files (added by bd init)
25
+ .dolt/
26
+ *.db
27
+ .beads-credential-key
28
+ .beads/proxieddb/
29
+
30
+ # bd agent-integration artifacts (regenerable via `bd setup`; local-only)
31
+ .agents/
32
+ .codex/
33
+
34
+ # .claude: only shared settings.json is tracked. Agents and skills are vended via the bh
35
+ # plugin (beadhive/claude-plugin) — no agent files or skills symlinks are committed here.
36
+ # Local overrides (.claude/agents/<seat>.md) remain untracked and outrank the plugin.
37
+ .claude/**/*.local.json
38
+ .claude/agents/
39
+ .claude/skills
40
+ AGENTS.md
41
+ CLAUDE.md
42
+
43
+ # bv (beads viewer) local config and caches
44
+ .bv/
45
+
46
+ # Planning-plane scratch: molecule specs (bh plan file) + design notes that feed epics
47
+ .planning/
@@ -0,0 +1,19 @@
1
+ // markdownlint-cli2 config for `just lint-md`.
2
+ {
3
+ // What to lint (so `markdownlint-cli2` with no args = our docs, not .venv etc.)
4
+ "globs": ["README.md", "docs/**/*.md", "src/beadhive/**/*.md"],
5
+ // AGF-hint.md is a fragment appended into other docs (no standalone H1) — not a doc.
6
+ "ignores": ["src/beadhive/assets/AGF-hint.md"],
7
+ "config": {
8
+ "default": true,
9
+ // Our prose wraps ~92 cols by convention; 80 is needlessly strict. Cap at 100,
10
+ // and don't enforce length inside code blocks or tables (they legitimately run long).
11
+ "MD013": { "line_length": 100, "code_blocks": false, "tables": false },
12
+ // Each integration in INTEGRATIONS.md repeats the same subsection headings
13
+ // (Enabling / What it reads / What it unlocks / Scope & gating) by design; only
14
+ // require heading uniqueness among siblings under one parent, not document-wide.
15
+ "MD024": { "siblings_only": true },
16
+ // Compact tables (`|---|---|`) are our house style; MD060's pipe-spacing rule fights it.
17
+ "MD060": false
18
+ }
19
+ }
@@ -0,0 +1,11 @@
1
+ # Tool versions for developing beadhive. Install with: mise install
2
+ # (colima, dolt, beads come from the Brewfile — see README for why.)
3
+ [tools]
4
+ python = "3.12"
5
+ uv = "latest"
6
+ just = "1.54.0"
7
+ gh = "2.95.0"
8
+ docker-cli = "29.6.1"
9
+ docker-compose = "5.2.0"
10
+ node = "lts" # for the npm-backed markdown linter
11
+ "npm:markdownlint-cli2" = "latest" # docs linting (just lint-md)
@@ -0,0 +1,9 @@
1
+ # Bootstrap + tools mise can't cleanly provide. Run: brew bundle
2
+ #
3
+ # Everything else (just, gh, jq, yq, docker-cli, docker-compose) is pinned in
4
+ # .mise.toml and installed by `mise install`.
5
+
6
+ brew "mise" # tool-version manager — provides everything in .mise.toml
7
+ brew "colima" # Docker daemon/VM for macOS (system deps; not a plain binary)
8
+ brew "dolt" # Dolt CLI — backups, diagnostics, SQL shell (not in mise registry)
9
+ brew "beads" # the `bd` issue tracker (homebrew-core; not in mise registry)
@@ -0,0 +1,35 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file. The format loosely follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this project has not yet committed to
5
+ a formal versioning cadence beyond [SemVer](https://semver.org/).
6
+
7
+ ## Unreleased
8
+
9
+ Headline so far: the **ws → Beadhive (`bh`) rebrand** — same tool, same AGF process, new name
10
+ and package identity to remove the collision with the many other CLIs named `ws`.
11
+
12
+ ### Rebrand: ws → Beadhive / `bh`
13
+
14
+ - Python package renamed `ws` → `beadhive`; console scripts renamed `ws`/`ws-mcp` →
15
+ `bh`/`bh-mcp`.
16
+ - Injected/managed asset marker and file layout migrated to the `beadhive`/`bh` naming
17
+ (`bh rig migrate` added to move an existing onboarded rig over in place).
18
+ - MCP resource URI scheme renamed `ws://` → `beadhive://`.
19
+ - Docs, skills, and agent definitions across the AGF plugin swept for the rename; the
20
+ abstract process is now framed as **Beadflow** (an implementation of **AGF** on beads),
21
+ with **Beadhive** as the umbrella product/workspace name.
22
+ - Config/runtime state continues to live under `~/.ws/` (unchanged) — only the package,
23
+ command names, and resource scheme changed; on-disk data and Dolt-backed issue history
24
+ are unaffected.
25
+ - See `docs/design/limn-naming-strategy-adr.md` for the naming decision record and
26
+ `docs/AGF.md` for the AGF/Beadflow process this tool drives.
27
+
28
+ ### Notes
29
+
30
+ - An earlier draft of this changelog bumped the package to `1.0.0` and framed it as a first
31
+ public release. That was premature: the project is still under local development and has
32
+ not yet committed to a `1.0.0` SemVer stability promise, so the version has been reverted
33
+ to `0.1.0` pending an actual release decision. The rebrand work above already happened and
34
+ the notes are kept here as a record; only the release framing was walked back. See
35
+ .
@@ -0,0 +1,122 @@
1
+ ---
2
+ # yaml-language-server: $schema=https://agentguides.io/schemas/0.1/install.schema.json
3
+ install:
4
+ id: beadhive
5
+ summary: Beadhive — the `bh` CLI, the integration-plane driver for Agentic Git Flow (AGF) and cross-repo beads issue tracking.
6
+ methods:
7
+ # Alternatives — pick ONE that fits the user's OS / package manager.
8
+ # Recommended primary: install the `beadhive` package from PyPI so `bh` lands on PATH.
9
+ - kind: package
10
+ manager: uv
11
+ os: [macos, linux]
12
+ command: uv tool install 'beadhive[otel]'
13
+ - kind: package
14
+ manager: homebrew
15
+ os: [macos, linux]
16
+ command: brew install beadhive/tap/beadhive
17
+ - kind: package
18
+ manager: pipx
19
+ command: pipx install 'beadhive[otel]'
20
+ - kind: package
21
+ manager: pip
22
+ command: pip install 'beadhive[otel]'
23
+ verify: bh --version
24
+ # Already installed? Report installed-vs-available and offer the upgrade (with consent).
25
+ upgrade: ask
26
+ configure:
27
+ # Sequential — run in order, asking permission at each step.
28
+ # 1. Scaffold ~/.beadhive (config.yaml + templates). Required, one-time per machine.
29
+ - kind: script
30
+ command: bh config init
31
+ # 2. Claude Code only — register the bh MCP server at user scope
32
+ # (shells out to: claude mcp add bh --scope user -- bh mcp serve).
33
+ - kind: script
34
+ command: bh mcp install
35
+ # 3. Optional, Claude Code only — the bh claude-plugin (AGF seat defs, role skills).
36
+ - kind: plugin
37
+ harness: claude-code
38
+ ref: bh@beadhive
39
+ ---
40
+
41
+ # Install Beadhive
42
+
43
+ > This is the repo's real `INSTALL.md`, following the
44
+ > [INSTALL.md convention](https://github.com/agentguides/agentguides). Paste its
45
+ > link into any agent to install Beadhive. A convention-aware agent reads the
46
+ > `install:` frontmatter above; every other agent — and you — can follow the
47
+ > prose below and reach the same result with the same permission prompts.
48
+
49
+ Beadhive is the `bh` CLI (Python package `beadhive`). Installing it is two
50
+ things — a **package install** (puts `bh` on your PATH) and a one-time
51
+ **configure** step (`bh config init`), plus optional Claude Code wiring.
52
+ Whoever is installing (agent or human) should **ask before running each
53
+ command**.
54
+
55
+ ## 1. Install `bh` (pick ONE)
56
+
57
+ These are alternatives. Choose the one that matches your setup; you only need one.
58
+
59
+ - **`uv` (recommended, macOS/Linux):**
60
+
61
+ ```sh
62
+ uv tool install 'beadhive[otel]' # puts `bh` on PATH (~/.local/bin)
63
+ ```
64
+
65
+ - **Homebrew:**
66
+
67
+ ```sh
68
+ brew install beadhive/tap/beadhive
69
+ ```
70
+
71
+ - **`pipx` / `pip`:**
72
+
73
+ ```sh
74
+ pipx install 'beadhive[otel]' # or: pip install 'beadhive[otel]'
75
+ ```
76
+
77
+ The `[otel]` extra enables OpenTelemetry signals out of the box; drop it if you
78
+ don't want them. The MCP server ships in the core install.
79
+
80
+ ## 2. Verify
81
+
82
+ ```sh
83
+ bh --version
84
+ ```
85
+
86
+ This should print a version. If it does not, `bh` is not on your PATH —
87
+ `uv tool` and `pipx` install to `~/.local/bin`; add it to your shell profile:
88
+
89
+ ```sh
90
+ export PATH="$HOME/.local/bin:$PATH"
91
+ ```
92
+
93
+ ## 3. Configure
94
+
95
+ Run these in order.
96
+
97
+ 1. **Scaffold the config home** (required, one-time per machine). Writes
98
+ `config.yaml` and templates into `~/.beadhive/`:
99
+
100
+ ```sh
101
+ bh config init
102
+ ```
103
+
104
+ 2. **Claude Code only — wire the MCP server** at user scope, so planning, work,
105
+ rig, and config tools are available in every session:
106
+
107
+ ```sh
108
+ bh mcp install # runs: claude mcp add bh --scope user -- bh mcp serve
109
+ ```
110
+
111
+ 3. **Optional, Claude Code only — the `bh` claude-plugin.** Vends the AGF seat
112
+ agent defs and role skills (dispatcher / developer / merger / …):
113
+
114
+ ```sh
115
+ claude plugin marketplace add beadhive/claude-plugin
116
+ claude plugin install bh@beadhive
117
+ ```
118
+
119
+ That's it. `bh` is installed, verified, and configured. Next steps:
120
+ [`docs/ONBOARDING.md`](docs/ONBOARDING.md) walks from here to a fully
121
+ configured AGF workspace with registered rigs; [`README.md`](README.md) has the
122
+ overview and docs map.
@@ -0,0 +1,84 @@
1
+ Metadata-Version: 2.4
2
+ Name: beadhive
3
+ Version: 0.1.0
4
+ Summary: Beadhive CLI
5
+ Requires-Python: >=3.11
6
+ Requires-Dist: fastmcp<4,>=3.4
7
+ Requires-Dist: pydantic-settings>=2.11
8
+ Requires-Dist: ruamel-yaml>=0.18
9
+ Requires-Dist: structlog>=24
10
+ Requires-Dist: typer>=0.12
11
+ Provides-Extra: mcp
12
+ Provides-Extra: otel
13
+ Requires-Dist: opentelemetry-exporter-otlp>=1.27; extra == 'otel'
14
+ Requires-Dist: opentelemetry-sdk>=1.27; extra == 'otel'
15
+ Requires-Dist: structlog>=24; extra == 'otel'
16
+ Description-Content-Type: text/markdown
17
+
18
+ # Beadhive (`bh`)
19
+
20
+ `bh` is a single CLI for managing **beads** issue tracking across many repositories. Each
21
+ repo is its own beads database (a **rig**) with a short, stable prefix; `bh` onboards them,
22
+ keeps their labels consistent, runs `bd`/`git` across one or all of them, and aggregates
23
+ every rig into one cross-repo view — even rigs whose code isn't checked out.
24
+
25
+ It's a thin orchestrator over `bd`, `git`, `git-workspace`, `dolt`, and `docker`: `bh`
26
+ encodes the conventions, the registry, validation, and routing. Config and runtime state live
27
+ under `~/.beadhive/`; **no issue data lives there** — each rig's issues live in its own Dolt
28
+ DB under `refs/dolt/data` on that repo's own git remote.
29
+
30
+ `bh` is the **Beadhive** umbrella's workspace CLI — the integration-plane driver for **AGF**
31
+ (Agentic Git Flow), the abstract, tracker-independent process. **Beadflow** is that process
32
+ implemented on beads: this repo's concrete implementation, unchanged behavior under a naming
33
+ layer. See [docs/AGF.md](docs/AGF.md) for the process and
34
+ [docs/design/limn-naming-strategy-adr.md](docs/design/limn-naming-strategy-adr.md) for the
35
+ naming decision record.
36
+
37
+ This repo is the CLI's source (Python package `beadhive` on PyPI, command `bh`).
38
+
39
+ ## Install
40
+
41
+ **Agents:** point your agent at [`INSTALL.md`](INSTALL.md) — the preferred install path. It
42
+ carries a structured `install:` frontmatter block (the agent reads it, discloses the plan,
43
+ and asks before each command) plus a prose fallback any agent or human can follow.
44
+
45
+ **Manual** (pick one):
46
+
47
+ ```sh
48
+ uv tool install 'beadhive[otel]' # PyPI (recommended)
49
+ brew install beadhive/tap/beadhive # Homebrew
50
+ ```
51
+
52
+ Then scaffold the config home:
53
+
54
+ ```sh
55
+ bh config init # writes config.yaml + templates into ~/.beadhive/
56
+ ```
57
+
58
+ **Optional (Claude Code):** the `bh` claude-plugin vends the AGF seat agent defs and role
59
+ skills; `bh mcp install` wires the MCP server at user scope:
60
+
61
+ ```sh
62
+ claude plugin marketplace add beadhive/claude-plugin
63
+ claude plugin install bh@beadhive
64
+ bh mcp install
65
+ ```
66
+
67
+ ## Docs
68
+
69
+ New to bh? Start at [`**docs/ONBOARDING.md**`](docs/ONBOARDING.md) — the end-to-end guide
70
+ from fresh Mac to a configured AGF workspace with registered rigs.
71
+
72
+ Everything else — the design and reasoning, configuration, the full command surface, and each
73
+ component — starts at [`**docs/OVERVIEW.md**`](docs/OVERVIEW.md).
74
+
75
+ ## Develop
76
+
77
+ ```sh
78
+ just bootstrap # brew bundle + mise install + uv sync (once per machine)
79
+ just install # uv tool install --force '.[otel]' → ~/.local/bin/bh
80
+ just lint # ruff check
81
+ just fmt # ruff format
82
+ just test # pytest
83
+ just build # uv build
84
+ ```
@@ -0,0 +1,67 @@
1
+ # Beadhive (`bh`)
2
+
3
+ `bh` is a single CLI for managing **beads** issue tracking across many repositories. Each
4
+ repo is its own beads database (a **rig**) with a short, stable prefix; `bh` onboards them,
5
+ keeps their labels consistent, runs `bd`/`git` across one or all of them, and aggregates
6
+ every rig into one cross-repo view — even rigs whose code isn't checked out.
7
+
8
+ It's a thin orchestrator over `bd`, `git`, `git-workspace`, `dolt`, and `docker`: `bh`
9
+ encodes the conventions, the registry, validation, and routing. Config and runtime state live
10
+ under `~/.beadhive/`; **no issue data lives there** — each rig's issues live in its own Dolt
11
+ DB under `refs/dolt/data` on that repo's own git remote.
12
+
13
+ `bh` is the **Beadhive** umbrella's workspace CLI — the integration-plane driver for **AGF**
14
+ (Agentic Git Flow), the abstract, tracker-independent process. **Beadflow** is that process
15
+ implemented on beads: this repo's concrete implementation, unchanged behavior under a naming
16
+ layer. See [docs/AGF.md](docs/AGF.md) for the process and
17
+ [docs/design/limn-naming-strategy-adr.md](docs/design/limn-naming-strategy-adr.md) for the
18
+ naming decision record.
19
+
20
+ This repo is the CLI's source (Python package `beadhive` on PyPI, command `bh`).
21
+
22
+ ## Install
23
+
24
+ **Agents:** point your agent at [`INSTALL.md`](INSTALL.md) — the preferred install path. It
25
+ carries a structured `install:` frontmatter block (the agent reads it, discloses the plan,
26
+ and asks before each command) plus a prose fallback any agent or human can follow.
27
+
28
+ **Manual** (pick one):
29
+
30
+ ```sh
31
+ uv tool install 'beadhive[otel]' # PyPI (recommended)
32
+ brew install beadhive/tap/beadhive # Homebrew
33
+ ```
34
+
35
+ Then scaffold the config home:
36
+
37
+ ```sh
38
+ bh config init # writes config.yaml + templates into ~/.beadhive/
39
+ ```
40
+
41
+ **Optional (Claude Code):** the `bh` claude-plugin vends the AGF seat agent defs and role
42
+ skills; `bh mcp install` wires the MCP server at user scope:
43
+
44
+ ```sh
45
+ claude plugin marketplace add beadhive/claude-plugin
46
+ claude plugin install bh@beadhive
47
+ bh mcp install
48
+ ```
49
+
50
+ ## Docs
51
+
52
+ New to bh? Start at [`**docs/ONBOARDING.md**`](docs/ONBOARDING.md) — the end-to-end guide
53
+ from fresh Mac to a configured AGF workspace with registered rigs.
54
+
55
+ Everything else — the design and reasoning, configuration, the full command surface, and each
56
+ component — starts at [`**docs/OVERVIEW.md**`](docs/OVERVIEW.md).
57
+
58
+ ## Develop
59
+
60
+ ```sh
61
+ just bootstrap # brew bundle + mise install + uv sync (once per machine)
62
+ just install # uv tool install --force '.[otel]' → ~/.local/bin/bh
63
+ just lint # ruff check
64
+ just fmt # ruff format
65
+ just test # pytest
66
+ just build # uv build
67
+ ```