brief-spec 0.5.0__py3-none-any.whl

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 (77) hide show
  1. brief_spec/__init__.py +15 -0
  2. brief_spec/__main__.py +5 -0
  3. brief_spec-0.5.0.dist-info/METADATA +577 -0
  4. brief_spec-0.5.0.dist-info/RECORD +77 -0
  5. brief_spec-0.5.0.dist-info/WHEEL +4 -0
  6. brief_spec-0.5.0.dist-info/entry_points.txt +3 -0
  7. brief_spec-0.5.0.dist-info/licenses/LICENSE +21 -0
  8. briefspec/__init__.py +7 -0
  9. briefspec/__main__.py +5 -0
  10. briefspec/adapters/__init__.py +3 -0
  11. briefspec/adapters/base.py +184 -0
  12. briefspec/adapters/claude.py +10 -0
  13. briefspec/adapters/codex.py +10 -0
  14. briefspec/adapters/copilot.py +10 -0
  15. briefspec/adapters/registry.py +25 -0
  16. briefspec/artifacts.py +134 -0
  17. briefspec/bundle.py +340 -0
  18. briefspec/capabilities.py +12 -0
  19. briefspec/cli.py +669 -0
  20. briefspec/config.py +125 -0
  21. briefspec/continuity.py +94 -0
  22. briefspec/delivery.py +1100 -0
  23. briefspec/diagnostics.py +503 -0
  24. briefspec/errors.py +17 -0
  25. briefspec/events.py +425 -0
  26. briefspec/frames.py +100 -0
  27. briefspec/harnesses.py +317 -0
  28. briefspec/hooks.py +579 -0
  29. briefspec/installers.py +1167 -0
  30. briefspec/markdown.py +377 -0
  31. briefspec/models.py +299 -0
  32. briefspec/renderers.py +126 -0
  33. briefspec/resources/hooks/copilot.json +45 -0
  34. briefspec/resources/hooks/hooks.json +60 -0
  35. briefspec/resources/integrations/copilot/cloud/README.md +22 -0
  36. briefspec/resources/integrations/copilot/settings.json.example +14 -0
  37. briefspec/resources/manifests/claude-plugin.json +18 -0
  38. briefspec/resources/manifests/codex-plugin.json +36 -0
  39. briefspec/resources/manifests/plugin.json +13 -0
  40. briefspec/resources/schemas/brief-spec-bundle-manifest.schema.json +49 -0
  41. briefspec/resources/schemas/brief-spec-delivery-receipt.schema.json +49 -0
  42. briefspec/resources/schemas/brief-spec-delivery.schema.json +177 -0
  43. briefspec/resources/schemas/brief-spec-event.schema.json +67 -0
  44. briefspec/resources/schemas/brief-spec-evidence.schema.json +19 -0
  45. briefspec/resources/schemas/brief-spec-frame-receipt.schema.json +26 -0
  46. briefspec/resources/schemas/brief-spec-frame-request.schema.json +15 -0
  47. briefspec/resources/schemas/brief-spec-outcome-brief.schema.json +34 -0
  48. briefspec/resources/schemas/brief-spec-session-checkpoint.schema.json +60 -0
  49. briefspec/resources/schemas/briefspec-delivery.schema.json +105 -0
  50. briefspec/resources/schemas/bundle-manifest.schema.json +49 -0
  51. briefspec/resources/schemas/delivery-receipt.schema.json +47 -0
  52. briefspec/resources/schemas/evidence.schema.json +36 -0
  53. briefspec/resources/schemas/outcome-brief.schema.json +65 -0
  54. briefspec/resources/schemas/session-checkpoint.schema.json +144 -0
  55. briefspec/resources/skills/brief-spec/SKILL.md +83 -0
  56. briefspec/resources/skills/brief-spec/agents/openai.yaml +5 -0
  57. briefspec/resources/skills/brief-spec/references/debugging.md +6 -0
  58. briefspec/resources/skills/brief-spec/references/exploration.md +6 -0
  59. briefspec/resources/skills/brief-spec/references/general.md +6 -0
  60. briefspec/resources/skills/brief-spec/references/implementation.md +6 -0
  61. briefspec/resources/skills/brief-spec/references/operations.md +6 -0
  62. briefspec/resources/skills/brief-spec/references/planning.md +6 -0
  63. briefspec/resources/skills/brief-spec/references/research.md +6 -0
  64. briefspec/resources/skills/brief-spec/references/review.md +6 -0
  65. briefspec/resources/skills/outcome-brief/SKILL.md +81 -0
  66. briefspec/resources/skills/outcome-brief/agents/openai.yaml +5 -0
  67. briefspec/resources/skills/outcome-brief/references/contract.md +39 -0
  68. briefspec/resources/skills/outcome-brief/references/examples.md +51 -0
  69. briefspec/resources/skills/session-checkpoint/SKILL.md +43 -0
  70. briefspec/resources/skills/session-checkpoint/agents/openai.yaml +5 -0
  71. briefspec/resources/skills/session-checkpoint/references/examples.md +51 -0
  72. briefspec/resources/skills/session-checkpoint/references/modes.md +71 -0
  73. briefspec/resources.py +21 -0
  74. briefspec/state.py +202 -0
  75. briefspec/triggers.py +92 -0
  76. briefspec/verification.py +711 -0
  77. briefspec/work_types.py +737 -0
brief_spec/__init__.py ADDED
@@ -0,0 +1,15 @@
1
+ """Canonical Brief-Spec package.
2
+
3
+ The implementation remains import-compatible with the historical ``briefspec``
4
+ package throughout the 0.x line. Sharing the legacy package search path makes
5
+ ``brief_spec.<module>`` imports resolve to the same dependency-free sources
6
+ without maintaining two divergent implementations.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from briefspec import __path__ as _legacy_path
12
+ from briefspec import __version__
13
+
14
+ __all__ = ["__version__"]
15
+ __path__ = _legacy_path
brief_spec/__main__.py ADDED
@@ -0,0 +1,5 @@
1
+ from __future__ import annotations
2
+
3
+ from brief_spec.cli import main
4
+
5
+ raise SystemExit(main())
@@ -0,0 +1,577 @@
1
+ Metadata-Version: 2.5
2
+ Name: brief-spec
3
+ Version: 0.5.0
4
+ Summary: Type-aware, evidence-backed delivery contracts for AI coding harnesses.
5
+ Project-URL: Homepage, https://github.com/luanmorenommaciel/brief-spec
6
+ Project-URL: Repository, https://github.com/luanmorenommaciel/brief-spec
7
+ Project-URL: Issues, https://github.com/luanmorenommaciel/brief-spec/issues
8
+ Author: Luan Moreno Maciel
9
+ License: MIT License
10
+
11
+ Copyright (c) 2026 Luan Moreno Maciel
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ of this software and associated documentation files (the "Software"), to deal
15
+ in the Software without restriction, including without limitation the rights
16
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ copies of the Software, and to permit persons to whom the Software is
18
+ furnished to do so, subject to the following conditions:
19
+
20
+ The above copyright notice and this permission notice shall be included in all
21
+ copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ SOFTWARE.
30
+ License-File: LICENSE
31
+ Keywords: agents,brief-spec,claude,codex,copilot,developer-tools,productivity
32
+ Classifier: Development Status :: 4 - Beta
33
+ Classifier: Environment :: Console
34
+ Classifier: License :: OSI Approved :: MIT License
35
+ Classifier: Programming Language :: Python :: 3
36
+ Classifier: Programming Language :: Python :: 3.11
37
+ Classifier: Programming Language :: Python :: 3.12
38
+ Classifier: Programming Language :: Python :: 3.13
39
+ Classifier: Programming Language :: Python :: 3.14
40
+ Classifier: Topic :: Software Development
41
+ Requires-Python: >=3.11
42
+ Description-Content-Type: text/markdown
43
+
44
+ # Brief-Spec
45
+
46
+ <p align="center">
47
+ <img src="assets/lockup-hero.png" alt="BRIEF-SPEC — Different agents in. One predictable human handoff out." width="100%">
48
+ </p>
49
+
50
+ <p align="center"><strong>Different agents in. One predictable human handoff out.</strong></p>
51
+
52
+ Brief-Spec is a type-aware, evidence-backed delivery contract for AI coding harnesses. Same fields, same order, preserved evidence. It does not make every answer shorter; it makes every important answer legible. Brief-Spec standardizes the explanation and handoff, not the agent's reasoning. It never calls a model.
53
+
54
+ <p align="center">
55
+ <a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11%2B-A56BFF?labelColor=111720" alt="Python 3.11+"></a>
56
+ <a href="https://github.com/luanmorenommaciel/brief-spec/releases/tag/v0.2.0"><img src="https://img.shields.io/badge/public_release-v0.2.0-070A0F?labelColor=111720" alt="Public release v0.2.0"></a>
57
+ <a href="docs/verification.md"><img src="https://img.shields.io/badge/source_candidate-0.5.0-29313A?labelColor=111720" alt="Source candidate 0.5.0"></a>
58
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-29313A?labelColor=111720" alt="MIT License"></a>
59
+ </p>
60
+
61
+ **Public release v0.2.0** · Source candidate 0.5.0 · Not on PyPI
62
+
63
+ - Public release: `v0.2.0` on GitHub.
64
+ - Source candidate: `v0.5.0` in this checkout. Locally verified is not hosted or published.
65
+
66
+ [The problem](#the-problem) · [How it works](#how-it-works) · [Outcome Brief](#outcome-brief) · [Docs](#documentation) · [Skills](#why-the-skills-exist) · [Harness](#harness-support) · [CLI](#cli) · [Install](#install)
67
+
68
+ ---
69
+
70
+ ## The problem
71
+
72
+ Good agent output can still be exhausting to consume.
73
+
74
+ Once several agents are running, generation is no longer the only bottleneck. Re-entry becomes the bottleneck. One response begins with a narrative. Another hides the decision below a test log. A third mixes completed work, caveats, and suggested work into the same paragraph.
75
+
76
+ Before acting, you must first discover how to read the answer.
77
+
78
+ ![The same engineering session without Brief-Spec as a dense, irregular chat and with Brief-Spec as a calm, consistently structured handoff.](assets/briefspec-before-after.png)
79
+
80
+ Brief-Spec makes that last mile predictable. It keeps the agent's full work available while giving the human handoff a stable shape.
81
+
82
+ ![Scattered session evidence flows into a Brief-Spec Outcome Brief and emerges as three directly answered human questions, while proof and unresolved boundaries remain visible.](assets/briefspec-output-comparison.png)
83
+
84
+ ---
85
+
86
+ ## How it works
87
+
88
+ <p align="center">
89
+ <img src="assets/flow.png" alt="How Brief-Spec works — host task through adapter, local type classification, and type-specific explanation; at a boundary a Checkpoint (Orient, Teach, or Spoken) or an Outcome Brief becomes a canonical delivery object and verified downloads, with inspectable proof from a repository, command, test, URL, or artifact." width="100%">
90
+ </p>
91
+
92
+ <details>
93
+ <summary>View diagram source</summary>
94
+
95
+ ```mermaid
96
+ %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#111720', 'primaryTextColor': '#F5F2EA', 'primaryBorderColor': '#A56BFF', 'lineColor': '#29313A', 'secondaryColor': '#070A0F', 'tertiaryColor': '#29313A', 'background': '#070A0F', 'mainBkg': '#111720', 'nodeBorder': '#A56BFF', 'clusterBkg': '#111720', 'titleColor': '#F5F2EA', 'edgeLabelBackground': '#111720'}}}%%
97
+ flowchart LR
98
+ A["Host task"] --> B["Harness adapter"]
99
+ B --> C["Local type classification"]
100
+ C --> D["Type-specific explanation"]
101
+ D --> E{"Eligible and at a boundary?"}
102
+ E -->|"Checkpoint"| F["Orient, Teach, or Spoken Brief"]
103
+ E -->|"Agent stopping"| G["Outcome Brief"]
104
+ F --> H["Canonical delivery object"]
105
+ G --> H
106
+ H --> I["Verified downloads"]
107
+ J["Repository, command, test, URL, or artifact"] -. "inspectable proof" .-> I
108
+
109
+ style A fill:#111720,stroke:#29313A,color:#F5F2EA
110
+ style B fill:#111720,stroke:#29313A,color:#F5F2EA
111
+ style C fill:#111720,stroke:#29313A,color:#F5F2EA
112
+ style D fill:#111720,stroke:#29313A,color:#F5F2EA
113
+ style E fill:#29313A,stroke:#A56BFF,color:#F5F2EA
114
+ style F fill:#111720,stroke:#29313A,color:#F5F2EA
115
+ style G fill:#A56BFF,stroke:#A56BFF,color:#F5F2EA
116
+ style H fill:#111720,stroke:#A56BFF,color:#F5F2EA
117
+ style I fill:#111720,stroke:#29313A,color:#F5F2EA
118
+ style J fill:#111720,stroke:#29313A,color:#F5F2EA
119
+ ```
120
+
121
+ </details>
122
+
123
+ The host integrations normalize lifecycle events when the host provides them: session start, user prompt, tool use, pre-compaction, agent stop, and session end.
124
+
125
+ Brief-Spec records bounded operational state, applies eligibility and cooldown rules, and injects guidance at the next available boundary. Full guidance arrives once per context window; later prompts get a one-line reminder with the exact typed marker. Background task notifications, system reminders, and hook feedback are ignored as host text. A valid Outcome Brief closes the task, so the next request is classified afresh. Hooks fail open: an internal Brief-Spec error is reported to standard error and the host receives an empty decision rather than a blocked session.
126
+
127
+ ---
128
+
129
+ ## Outcome Brief
130
+
131
+ A stable end-of-task contract. Seven fields, fixed order, five honest statuses.
132
+
133
+ <p align="center">
134
+ <img src="assets/contract.png" alt="Outcome Brief seven-field contract in order — Status, Outcome, Human action, Proof, Gaps, Next, Open — with Outcome in Ion Violet. Statuses: DONE, REVIEW, DECIDE, BLOCKED, FAILED." width="100%">
135
+ </p>
136
+
137
+ <details>
138
+ <summary>View diagram source</summary>
139
+
140
+ ```mermaid
141
+ %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#111720', 'primaryTextColor': '#F5F2EA', 'primaryBorderColor': '#A56BFF', 'lineColor': '#29313A', 'secondaryColor': '#070A0F', 'tertiaryColor': '#29313A', 'background': '#070A0F', 'mainBkg': '#111720', 'nodeBorder': '#A56BFF', 'clusterBkg': '#111720', 'titleColor': '#F5F2EA', 'edgeLabelBackground': '#111720'}}}%%
142
+ flowchart LR
143
+ S["Status"] --> O["Outcome"]
144
+ O --> H["Human action"]
145
+ H --> P["Proof"]
146
+ P --> G["Gaps"]
147
+ G --> N["Next"]
148
+ N --> X["Open"]
149
+
150
+ style S fill:#111720,stroke:#29313A,color:#F5F2EA
151
+ style O fill:#A56BFF,stroke:#A56BFF,color:#F5F2EA
152
+ style H fill:#111720,stroke:#29313A,color:#F5F2EA
153
+ style P fill:#111720,stroke:#29313A,color:#F5F2EA
154
+ style G fill:#111720,stroke:#29313A,color:#F5F2EA
155
+ style N fill:#111720,stroke:#29313A,color:#F5F2EA
156
+ style X fill:#111720,stroke:#29313A,color:#F5F2EA
157
+ ```
158
+
159
+ </details>
160
+
161
+ ### The contract
162
+
163
+ ```text
164
+ Status → Outcome → Human action → Proof → Gaps → Next → Open
165
+ ```
166
+
167
+ | Status | Meaning | Constraints |
168
+ | --- | --- | --- |
169
+ | `DONE` | Requested outcome achieved and directly verified | No required action, no unresolved gaps |
170
+ | `REVIEW` | Implementation ready for human inspection | Requires human action |
171
+ | `DECIDE` | A meaningful choice is required | Requires human action and an open decision |
172
+ | `BLOCKED` | External dependency prevents continuation | Requires a gap and a next action |
173
+ | `FAILED` | The attempt did not achieve the requested outcome | Requires a gap and a next action |
174
+
175
+ ### Example
176
+
177
+ ```markdown
178
+ <!-- briefspec:outcome:v1 -->
179
+ ## Outcome Brief
180
+
181
+ Status: REVIEW
182
+ Outcome: The Copilot plugin, project bridge, and hook adapter are implemented.
183
+ Human action: Review the generated repository files before enabling the cloud hook.
184
+
185
+ Proof:
186
+ - [direct/info] `.github/plugin/marketplace.json` — declares the Copilot plugin source
187
+ - [direct/pass] `brief-spec doctor copilot --scope project --probe` → synthetic hook passed
188
+
189
+ Gaps:
190
+ - An authenticated Copilot cloud run has not been observed in this environment.
191
+
192
+ Next:
193
+ - Run the cloud acceptance scenario and retain its run URL.
194
+
195
+ Open:
196
+ - Whether cloud checkpoints should persist beyond the job.
197
+ <!-- /briefspec -->
198
+ ```
199
+
200
+ Proof items are prefixed `[direct|derived|reported]/[pass|fail|info]`. See [`schemas/`](schemas/) for the machine-readable contracts.
201
+
202
+ A `DONE` result with nothing left for the human may use the compact form, which keeps only Status, Outcome, and Proof. Brief-Spec reads the missing fields as `None`, so the canonical object is the same as the full form. Every other status needs all seven fields.
203
+
204
+ ```markdown
205
+ <!-- briefspec:outcome:v1 -->
206
+ ## Outcome Brief
207
+
208
+ Status: DONE
209
+ Outcome: The parser now accepts empty input.
210
+ Proof: [direct/pass] `uv run pytest tests/test_parser.py` → 12 passed
211
+ <!-- /briefspec -->
212
+ ```
213
+
214
+ ---
215
+
216
+ ## Documentation
217
+
218
+ | Topic | Link |
219
+ | --- | --- |
220
+ | Changelog | [CHANGELOG.md](CHANGELOG.md) |
221
+ | Skills reference | [docs/skills.md](docs/skills.md) |
222
+ | Installation | [docs/installation.md](docs/installation.md) |
223
+ | Configuration | [docs/configuration.md](docs/configuration.md) |
224
+ | Architecture | [docs/architecture.md](docs/architecture.md) |
225
+ | Behavior examples | [docs/examples.md](docs/examples.md) |
226
+ | Human Continuity | [docs/human-continuity.md](docs/human-continuity.md) |
227
+ | Repository layout | [docs/repository-layout.md](docs/repository-layout.md) |
228
+ | Verified delivery | [docs/delivery.md](docs/delivery.md) |
229
+ | Compatibility | [docs/compatibility.md](docs/compatibility.md) |
230
+ | Verification record | [docs/verification.md](docs/verification.md) |
231
+ | Design theory | [docs/theory.md](docs/theory.md) |
232
+ | Brand assets | [assets/ASSETS.md](assets/ASSETS.md) |
233
+ | Contributing | [CONTRIBUTING.md](CONTRIBUTING.md) |
234
+ | Security | [SECURITY.md](SECURITY.md) |
235
+
236
+ ---
237
+
238
+ ## Why the skills exist
239
+
240
+ The CLI validates. The skills are how a chat agent finds the contract.
241
+
242
+ <table>
243
+ <thead>
244
+ <tr>
245
+ <th>Skill</th>
246
+ <th>Why it exists</th>
247
+ <th>When / not</th>
248
+ <th>Gate</th>
249
+ <th>Optional?</th>
250
+ </tr>
251
+ </thead>
252
+ <tbody>
253
+ <tr>
254
+ <td><code>brief-spec</code></td>
255
+ <td>Classify substantive work and shape the full explanation for the selected profile</td>
256
+ <td>
257
+ <strong>When</strong> a task begins or clearly pivots; when the user asks Brief-Spec to explain work; or when a lifecycle hook supplies a type decision.<br>
258
+ <strong>Not</strong> sending task text to another model or network; inventing Grok classification metadata.
259
+ </td>
260
+ <td><code>brief-spec classify</code></td>
261
+ <td>No</td>
262
+ </tr>
263
+ <tr>
264
+ <td><code>outcome-brief</code></td>
265
+ <td>Close substantive work with a consistently ordered, evidence-backed handoff</td>
266
+ <td>
267
+ <strong>When</strong> a task reaches a terminal outcome; when the user asks what shipped, what changed, what needs attention, or what happens next; or when a host hook requests a valid outcome.<br>
268
+ <strong>Not</strong> turning formatting into proof; claiming DONE with required action or unresolved gaps.
269
+ </td>
270
+ <td><code>brief-spec validate outcome</code></td>
271
+ <td>No</td>
272
+ </tr>
273
+ <tr>
274
+ <td><code>session-checkpoint</code></td>
275
+ <td>Re-orient a long, dense, or interruption-prone session without replacing the underlying evidence</td>
276
+ <td>
277
+ <strong>When</strong> the user asks for a recap, orientation, teaching explanation, or spoken summary; many turns or tool calls; before compaction; or a hook says a checkpoint is eligible.<br>
278
+ <strong>Not</strong> treating spoken mode as audio generation; claiming the checkpoint is canonical project memory; silently ingesting into Nexo or Obsidian.
279
+ </td>
280
+ <td><code>brief-spec validate checkpoint</code></td>
281
+ <td>No</td>
282
+ </tr>
283
+ </tbody>
284
+ </table>
285
+
286
+ ### Eight work types
287
+
288
+ Each type has an ordered explanation profile loaded by the `brief-spec` router.
289
+
290
+ | Type | Explanation order |
291
+ | --- | --- |
292
+ | `general` | Answer, rationale, next action |
293
+ | `exploration` | Question, system map, entry points, flow, unknowns, next probe |
294
+ | `review` | Scope, verdict, findings, risk, validation, recommendation |
295
+ | `implementation` | Intent, changes, resulting behavior, verification, tradeoffs |
296
+ | `debugging` | Symptom, root cause, fix, regression protection, residual risk |
297
+ | `planning` | Goal, decisions, approach, sequence, gates |
298
+ | `research` | Question, synthesis, evidence quality, limitations, recommendation |
299
+ | `operations` | Event, impact, current state, actions, recovery, follow-up |
300
+
301
+ ### Four reading experiences
302
+
303
+ | Experience | Purpose |
304
+ | --- | --- |
305
+ | **Outcome** | Terminal handoff: what is true, what requires the human, what proves the claim |
306
+ | **Orient** | 30–45 second operational scan: where we are, what changed, next move |
307
+ | **Teach** | Plain-language mental model: what we did, why it works, example, watch-outs |
308
+ | **Spoken** | 80–240 word sequential script designed to be heard |
309
+
310
+ ---
311
+
312
+ ## Harness support
313
+
314
+ `brief-spec setup` installs skills and lifecycle hooks for each harness. Project destinations vary by host.
315
+
316
+ | Harness | Status | Command | Project destination |
317
+ | --- | --- | --- | --- |
318
+ | Codex | Required | `brief-spec setup codex` | `.codex/`, `.agents/skills/` |
319
+ | Claude Code | Required | `brief-spec setup claude` | `.claude/` |
320
+ | OMP | Required | `brief-spec setup omp` | `.omp/` |
321
+ | Grok Build | Required | `brief-spec setup grok` | `.grok/` |
322
+ | Kimi Code | Required | `brief-spec setup kimi` | `.kimi-code/skills/` (skills only) |
323
+ | Copilot | Experimental | `brief-spec setup copilot --scope project` | `.agents/skills/`, `.github/` |
324
+ | Cursor Agent | Experimental | `brief-spec setup cursor` | `.cursor/` |
325
+ | Goose | Experimental | `brief-spec setup goose` | `.agents/skills/`, `.goose/` |
326
+
327
+ The five required harnesses pass the live host matrix recorded in the [verification record](docs/verification.md). Copilot, Cursor Agent, and Goose are experimental: they install and pass a synthetic hook probe, but no live host gate covers them. Kimi lifecycle hooks exist only in the user-wide plugin, so a Kimi project install adds skills only.
328
+
329
+ Codex runs a hook only after you approve it in `/hooks`, and `codex exec` skips unapproved hooks without an error. `brief-spec doctor codex` reports which Brief-Spec hooks are approved.
330
+
331
+ Project-scoped Copilot installation also creates the network-free bridge used by Copilot cloud coding agents:
332
+
333
+ ```text
334
+ .agents/skills/{brief-spec,outcome-brief,session-checkpoint}/
335
+ .github/brief-spec/brief-spec.pyz
336
+ .github/hooks/brief-spec.json
337
+ .github/instructions/brief-spec.instructions.md
338
+ ```
339
+
340
+ The installer merges lifecycle hooks instead of replacing the host file, refuses to overwrite foreign skill files, restores prior files if installation fails, and records what it owns.
341
+
342
+ A `.claude-plugin/` directory is present in this repository for local plugin development.
343
+
344
+ ---
345
+
346
+ ## CLI
347
+
348
+ ### First journey
349
+
350
+ The public `v0.2.0` release predates the commands below. It installs only the `briefspec`
351
+ command with `install`, `uninstall`, `doctor`, `validate`, `config`, and `state`. The journey
352
+ below uses the `0.5.0` source candidate; see [Install](#install).
353
+
354
+ ```bash
355
+ # Install the source candidate from a checkout
356
+ uv tool install --force .
357
+
358
+ # Verify the installation
359
+ brief-spec --version
360
+
361
+ # See the eight work types
362
+ brief-spec types list
363
+
364
+ # Classify bounded task text (no network)
365
+ echo "Review the authentication module" | brief-spec classify - --json
366
+
367
+ # Validate an Outcome Brief
368
+ brief-spec validate outcome path/to/handoff.md
369
+
370
+ # Validate a Checkpoint
371
+ brief-spec validate checkpoint path/to/checkpoint.md --mode spoken
372
+
373
+ # Install harness integrations
374
+ brief-spec setup codex
375
+ brief-spec setup all --scope user --require codex,claude,omp,grok,kimi
376
+
377
+ # Check installation health
378
+ brief-spec doctor all --scope user --probe --all-scopes
379
+ ```
380
+
381
+ ### Export and verify
382
+
383
+ ```bash
384
+ # Export to multiple formats
385
+ brief-spec export handoff.md \
386
+ --formats markdown,json,html \
387
+ --output-dir delivery/
388
+
389
+ # Bundle with manifest
390
+ brief-spec bundle handoff.md --output handoff.zip
391
+
392
+ # Verify the bundle
393
+ brief-spec verify handoff.zip --level rendered --offline --no-plugins
394
+
395
+ # Deliver with receipt
396
+ brief-spec deliver handoff.zip --to /path/to/deliveries/
397
+ brief-spec verify /path/to/deliveries/handoff.zip.receipt.json --level delivered
398
+ ```
399
+
400
+ Verification levels are cumulative: `structural` → `resolved` → `rendered` → `delivered`. See [docs/delivery.md](docs/delivery.md) for the complete export and verification reference.
401
+
402
+ ### Configuration
403
+
404
+ Create user or project configuration:
405
+
406
+ ```bash
407
+ brief-spec config init
408
+ brief-spec config show
409
+ brief-spec config init --scope project --project /path/to/repository
410
+ ```
411
+
412
+ Project values override user values. See [docs/configuration.md](docs/configuration.md) for policy options.
413
+
414
+ ---
415
+
416
+ ## Install
417
+
418
+ Brief-Spec requires **Python 3.11+**. The canonical distribution is not yet on PyPI.
419
+
420
+ ### Public release (v0.2.0)
421
+
422
+ ```bash
423
+ uv tool install git+https://github.com/luanmorenommaciel/brief-spec.git@v0.2.0
424
+ briefspec install all --scope user
425
+ briefspec doctor all --probe
426
+ ```
427
+
428
+ This older release uses the `briefspec` command and does not include work types, classification,
429
+ exports, or the Grok, OMP, and Kimi integrations.
430
+
431
+ ### Dogfood from checkout (0.5.0)
432
+
433
+ ```bash
434
+ uv tool install --force --reinstall \
435
+ --with ./packages/brief-spec-renderer-pdf \
436
+ --with ./packages/brief-spec-renderer-audio \
437
+ .
438
+ brief-spec setup all --scope user --require codex,claude,omp,grok,kimi
439
+ brief-spec doctor all --scope user --probe --all-scopes
440
+ ```
441
+
442
+ Project-scoped installation keeps the integration inside one repository:
443
+
444
+ ```bash
445
+ brief-spec setup all --scope project --project /path/to/repository
446
+ brief-spec doctor all --scope project --project /path/to/repository --probe
447
+ ```
448
+
449
+ The tagged URL installs a versioned release instead of whatever happens to be on `main`.
450
+
451
+ ---
452
+
453
+ ## Who this is for
454
+
455
+ Brief-Spec is for engineers and teams running multiple AI coding agents who want a predictable handoff without rebuilding their workflow.
456
+
457
+ ### Who this is not for
458
+
459
+ - If you want a second brain or knowledge graph, Brief-Spec is not that. Use Nexo, Obsidian, or your preferred knowledge system.
460
+ - If you want an agent orchestrator, Brief-Spec is not that. It is the human handoff, not the task executor.
461
+ - If you want to replace Git, CI, or your issue tracker, Brief-Spec is not that. Original evidence remains authoritative.
462
+
463
+ Brief-Spec is a presentation layer. The original repository, command output, document, or host transcript remains the source of truth.
464
+
465
+ ---
466
+
467
+ ## Safety invariants
468
+
469
+ Brief-Spec compresses presentation, not provenance.
470
+
471
+ - A brief is never more authoritative than its source.
472
+ - A passing syntax check does not prove a live integration.
473
+ - A local commit does not prove publication.
474
+ - Planned work is not completed work.
475
+ - Direct, derived, and reported evidence must remain distinguishable.
476
+ - Unknown or unverified state is a gap, not a reason to infer success.
477
+ - Hooks fail open on internal errors.
478
+ - Installation refuses destructive overwrite of foreign files.
479
+ - Nothing is silently ingested into Nexo, Obsidian, or another knowledge system.
480
+
481
+ The JSON schemas in [`schemas/`](schemas/) define the portable data contracts.
482
+
483
+ ## Honest limits
484
+
485
+ - A consistent format cannot make an unsupported claim true.
486
+ - A checkpoint cannot recover evidence the host never exposed.
487
+ - Lifecycle automation depends on the events supported by each host version.
488
+ - Spoken Brief is text until a separate text-to-speech system renders it.
489
+ - Automatic checkpoint thresholds are heuristics and remain configurable.
490
+ - Brief-Spec reduces reading friction; high-risk changes still deserve direct inspection.
491
+
492
+ ---
493
+
494
+ ## Experimental: Human Continuity
495
+
496
+ The source tree contains an optional, independently versioned Chronicle extension. It does not change the frozen Outcome Brief or Session Checkpoint `1.0` contracts and is not part of the public v0.2.0 or source candidate 0.5.0 publication claims.
497
+
498
+ Chronicle is never activated globally. It records what Brief-Spec observed; it does not replace Seamwise intent, Task-Spec acceptance, Converge authorization, Git evidence, or reviewed durable knowledge.
499
+
500
+ Read the complete [Human Continuity architecture](docs/human-continuity.md).
501
+
502
+ ---
503
+
504
+ ## Release truth
505
+
506
+ | Version | State | Notes |
507
+ | --- | --- | --- |
508
+ | v0.2.0 | Published GitHub release | Latest public release |
509
+ | 0.5.0 | Source candidate | Locally verified; awaits live/hosted/publication gates |
510
+ | 0.3.0, 0.4.0 | Unpublished | Folded into 0.5.0 |
511
+
512
+ "Locally verified" does not mean hosted or published. See the full [changelog](CHANGELOG.md) and [verification record](docs/verification.md).
513
+
514
+ ---
515
+
516
+ ## Repository map
517
+
518
+ ```text
519
+ skills/
520
+ brief-spec/ Type router and eight compact profiles
521
+ outcome-brief/ Stable terminal handoff
522
+ session-checkpoint/ Orient, Teach, and Spoken Brief
523
+ src/brief_spec/ Canonical Python import
524
+ src/briefspec/
525
+ adapters/ Host payload normalization
526
+ delivery.py Canonical envelope and core renderers
527
+ verification.py Structural through delivered verification
528
+ hooks.py Safe-boundary and one-repair control
529
+ installers.py Transactional user/project integration
530
+ packages/
531
+ brief-spec-renderer-pdf/ Optional HTML-to-PDF renderer
532
+ brief-spec-renderer-audio/ Optional script-to-MP3 renderer
533
+ brief-spec-chronicle/ Optional project continuity extension
534
+ brief-spec-renderer-video/ Experimental Chronicle video renderer
535
+ schemas/ Portable machine-readable contracts
536
+ docs/ Theory, architecture, examples, installation
537
+ ```
538
+
539
+ See [docs/repository-layout.md](docs/repository-layout.md) for the complete ownership map.
540
+
541
+ ---
542
+
543
+ ## Contributing
544
+
545
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and quality gates.
546
+
547
+ ```bash
548
+ git clone https://github.com/luanmorenommaciel/brief-spec.git
549
+ cd brief-spec
550
+ uv sync --group dev
551
+ uv run ruff check .
552
+ uv run ruff format --check .
553
+ uv run pytest --cov=briefspec --cov-report=term-missing
554
+ ```
555
+
556
+ ---
557
+
558
+ ## Uninstall
559
+
560
+ ```bash
561
+ # Preview removal
562
+ brief-spec uninstall all --dry-run
563
+
564
+ # Remove user installation
565
+ brief-spec uninstall all
566
+
567
+ # Remove one project installation
568
+ brief-spec uninstall copilot --scope project --project /path/to/repository
569
+ ```
570
+
571
+ Brief-Spec removes receipt-owned files only when their content still matches the installed hash.
572
+
573
+ ---
574
+
575
+ ## License
576
+
577
+ [MIT](LICENSE)
@@ -0,0 +1,77 @@
1
+ brief_spec/__init__.py,sha256=umyJNJ2Tj1bcfmR8fLA1SOpKiHPUtJr9vgdfPAG32Iw,492
2
+ brief_spec/__main__.py,sha256=ptNGeIyh5qomwYZTEFrLvGMVB-3SSKiXJOOrp9euP1M,94
3
+ briefspec/__init__.py,sha256=C4RwkYi5bhZy76q6MFNYgta5FNTHNUHr-S12Qhl5SQM,164
4
+ briefspec/__main__.py,sha256=TlIJ4645xMiNHCXfb6-lBw0AET-VhhIjvIxwmKyqoC4,93
5
+ briefspec/artifacts.py,sha256=dm1u_O9Ez7SNLFd-ADnBOqxxdBdafFnhhzpJJg1h_a4,4094
6
+ briefspec/bundle.py,sha256=9kKY3IA4a5CRvNIG6lYlURT7wCYJ1IFWDKp-cZALgxE,13302
7
+ briefspec/capabilities.py,sha256=NhKzCZH1Xarq9HTEyQkF0TLVhJXmF2ghAydFeO7wivs,350
8
+ briefspec/cli.py,sha256=qvMCpWF73KI7Nb93mBfx6B_XGBaaz6HAv148ZI_vCfs,28253
9
+ briefspec/config.py,sha256=nCXvOgL3p8h9VXgY5fxL2dWQ20QMDvDAIJIEe4dj55o,3475
10
+ briefspec/continuity.py,sha256=IbO98r-puZJ0V0F9Sw5oB7AdjSIeaCp6JCVqTLu0IHA,3764
11
+ briefspec/delivery.py,sha256=ar9a_YK5n2UEIiyXQ__PS8zv3Gj3pO4g9XQbqJVhaB4,43751
12
+ briefspec/diagnostics.py,sha256=nsicPc4WN7HXzqnT-0VRCcgg02mC_gOjoF0Kq_qG18U,18332
13
+ briefspec/errors.py,sha256=VpDIcg8H-Ljrd96hLzlZpIMWxwCI4iUKN8LDPAPmr3g,454
14
+ briefspec/events.py,sha256=EkTb1Nt9Wtz_0ooPzYa16lM82bmnGHxGtWo19rWeEjw,16271
15
+ briefspec/frames.py,sha256=hcmJ_nBXDGj3K8OeGH1XTaieB-J5qGYPCMf5xTMpGsE,3759
16
+ briefspec/harnesses.py,sha256=Zsbq6WNGOVArPiVNKR6TTMSufnJgUG78A5ZOKaRJ1Xc,8276
17
+ briefspec/hooks.py,sha256=1U60yDqrgfr3HNNkq0Od35k2ja-Qy0q-SF_B1b3HNpE,26303
18
+ briefspec/installers.py,sha256=bC4trWI3LqlNYgiTHrl0Zk6gwqXEjjtpm0aeiyj8kC4,42330
19
+ briefspec/markdown.py,sha256=_DKXYX3uRGSUHUhUPWvDUliP4QpZufrQmBxiRSBq2ZA,14051
20
+ briefspec/models.py,sha256=j_GIiSjrvqumm4NZ6RUQ3nY2agkb9M1c_oo495ak-dE,8456
21
+ briefspec/renderers.py,sha256=XApct5KKyIGSfgI4ZNwxC9j-J3hWzvsRiUmhRQOM6cQ,4509
22
+ briefspec/resources.py,sha256=bV9IaH3rlF_LR8oyUCv8JyfUc7J4hySHFZGU1emjuKs,727
23
+ briefspec/state.py,sha256=_iX74uwHdIuZqQUGHsPCmhlgqrd3mBH6wPYBO-GxN_8,7514
24
+ briefspec/triggers.py,sha256=fdl2vjbVluvVbgdXPoYlMPVkveZyIVop9HknxRm5GLA,3486
25
+ briefspec/verification.py,sha256=wbIQMTGPSAQu9J_cs6jNTBLfcdZ782oeb_T-nHKQLCM,30969
26
+ briefspec/work_types.py,sha256=SdqvrXgASDoLOvZ3hshzUKZbwiRpFpbNVEhPvnWqXzc,26364
27
+ briefspec/adapters/__init__.py,sha256=sTuUNH72lZhLfCnSQarG4Stpcfu8G-1ZiIl6smLqBlU,87
28
+ briefspec/adapters/base.py,sha256=P9Nad-2CeIJq7aGMod7GVOm9LxoGWqqlte81-p8Twx8,6925
29
+ briefspec/adapters/claude.py,sha256=vxZlh0qrqTHb_O-MGsILDM_rVuzcv6ndEcimDepZ82k,318
30
+ briefspec/adapters/codex.py,sha256=rf2EJEoHOrJPmsB7tesfSuTcVydE21ZQHfpO9AlLUTw,317
31
+ briefspec/adapters/copilot.py,sha256=KJ9tptOuL2DzxpGFCQWyKKUdp9zgbJbLHNJNVnULBXU,319
32
+ briefspec/adapters/registry.py,sha256=ojAAsv5SIRcRFPKa3A4VzWixzA1zBmZyazCJSM_GRhc,687
33
+ briefspec/resources/hooks/copilot.json,sha256=4R1dPY2pAIdOtCS2o1VICxMbe4tF-Y5MlIHVZs6nMVY,1639
34
+ briefspec/resources/hooks/hooks.json,sha256=dWkR-rimm_sNlYkbSz-OyAjTd2mW4yYYo1U8h1Y68DA,1405
35
+ briefspec/resources/schemas/brief-spec-bundle-manifest.schema.json,sha256=GXo431RIKBwsN-IEc8putaLr2J2fxylOcLlWhekB4Lo,1607
36
+ briefspec/resources/schemas/brief-spec-delivery-receipt.schema.json,sha256=-T8SPVGBocJQ73SLo0dNjut-nDwTWRoSXTaFa9oOzL8,1557
37
+ briefspec/resources/schemas/brief-spec-delivery.schema.json,sha256=PiFmJk9no4tO4ZqzI7SnNDrmws6EMeAEtQaI7J230Lo,6171
38
+ briefspec/resources/schemas/brief-spec-event.schema.json,sha256=3qfKOgeQqoTEaWJvCFbIHAubeFa4C7UTin6bjr3iwtc,2817
39
+ briefspec/resources/schemas/brief-spec-evidence.schema.json,sha256=Zrq3f18y4xb2mpKJO5CMjhHPeqggDRMeYFraEUqNw6E,860
40
+ briefspec/resources/schemas/brief-spec-frame-receipt.schema.json,sha256=gtZSJR6VkCVNpIMytaixbNh1KtyLkLfiu4eTKd4PO5Y,1097
41
+ briefspec/resources/schemas/brief-spec-frame-request.schema.json,sha256=vsooiQmq7_IJW6I0_7dy2UVRkG8m1Op9hLmIs3MjDvU,712
42
+ briefspec/resources/schemas/brief-spec-outcome-brief.schema.json,sha256=s-ATDoIw1PYACfEqGpfWfhyiZakterHXqa3a7_PuqAs,1106
43
+ briefspec/resources/schemas/brief-spec-session-checkpoint.schema.json,sha256=cS286LEb4JzH3wh-HV8ZbnGLbUvKjsNZWZAd6AgX7dI,2238
44
+ briefspec/resources/schemas/briefspec-delivery.schema.json,sha256=wr2X0AefQLajqnTwbZKFrUXpFsaYXvG-6-1jGBNztG8,3805
45
+ briefspec/resources/schemas/bundle-manifest.schema.json,sha256=1QX1BxQRIGeMciZuuGmL3iArvg4ZsPa3unqInq9EBzc,1545
46
+ briefspec/resources/schemas/delivery-receipt.schema.json,sha256=aAzIcvHOaoYAdeHHQOhDhJrif8E-YpuV2xKKdraFOOA,1485
47
+ briefspec/resources/schemas/evidence.schema.json,sha256=E5hEpRTTyBNTR5_ja3AmcxNG0lU4hOajdv7aGh96U8U,895
48
+ briefspec/resources/schemas/outcome-brief.schema.json,sha256=2ssKT4azOp96z37KmFXW14XRm6hqQR7gjsGMoeUsPi0,1218
49
+ briefspec/resources/schemas/session-checkpoint.schema.json,sha256=np6pGG50foBOLhaA6dIJjgKB4KYMO1K77mALxTZpQeo,2754
50
+ briefspec/resources/skills/brief-spec/SKILL.md,sha256=6N4yMUVSYSjniwvm1p0sv1d5S4DDqxI0HBBeChJuJGY,4706
51
+ briefspec/resources/skills/brief-spec/agents/openai.yaml,sha256=lLzBb3y1yIBnpYptn3-F5CEJMEI4WNZT4RCk0mQvasI,261
52
+ briefspec/resources/skills/brief-spec/references/debugging.md,sha256=bXvniYwxo-_VrKH-VWFAxyLXdXWmY-HDU_DOHITgd-Q,307
53
+ briefspec/resources/skills/brief-spec/references/exploration.md,sha256=WR--dnJsflusafXkwLelDIKAVceGhzTYcK-1SIDwPLg,315
54
+ briefspec/resources/skills/brief-spec/references/general.md,sha256=jKIq0NMmWY52Zkl8ZjO47ktkcuLuKoVnJH6nwTl2TAM,269
55
+ briefspec/resources/skills/brief-spec/references/implementation.md,sha256=rs7dJsoCbCZACh69ZM-pfJDp_r57NF-tSJJuyBL5Y_0,297
56
+ briefspec/resources/skills/brief-spec/references/operations.md,sha256=20RYYTlRopR26YK3JY3HwpnCoxrnIijmteYktze8cXo,299
57
+ briefspec/resources/skills/brief-spec/references/planning.md,sha256=Gt9ezZ5j5nC3aNR-mJ3FTlGv9XnFnZNOXIRItoMAU9o,269
58
+ briefspec/resources/skills/brief-spec/references/research.md,sha256=FFVyDLWZn8aXWX-xGOEQIZlXCiJPaAvqrmmIJRv3uGo,304
59
+ briefspec/resources/skills/brief-spec/references/review.md,sha256=GCteDseZVgVJ9buCRZ4wHLDp8Ouv5yN6FYytvLmILkQ,294
60
+ briefspec/resources/skills/outcome-brief/SKILL.md,sha256=3x4cawDxlAbmRRkPX74ecLWlpE069Tpjnuy2rIAfm5Y,2847
61
+ briefspec/resources/skills/outcome-brief/agents/openai.yaml,sha256=O1_TA43vSl6hs2gU8Qy6OL6rSeGIhbsKR9S_mQtFi7s,240
62
+ briefspec/resources/skills/outcome-brief/references/contract.md,sha256=n90CBCMxgAP11U2BZb8FPE7LKOxSajee-iZIz4zMRdA,1753
63
+ briefspec/resources/skills/outcome-brief/references/examples.md,sha256=riVJEL2F32PZQyG9ePSWDfGDPISvf40zGLFzOfnkO3Y,996
64
+ briefspec/resources/skills/session-checkpoint/SKILL.md,sha256=3P1oXUVIVAFDxb-dsO1aEYE2n1Ak4KhuWcqpSJHCehA,2180
65
+ briefspec/resources/skills/session-checkpoint/agents/openai.yaml,sha256=8d8KiTvy4dxn44v4HFSpK58M3t5Vhr55HE56fBOTF2s,254
66
+ briefspec/resources/skills/session-checkpoint/references/examples.md,sha256=dFvAuiA8MkyJeEvyk0p_9aqpOgrDKObxsCHR76n-UPI,1706
67
+ briefspec/resources/skills/session-checkpoint/references/modes.md,sha256=Uu96viWnHnWHa8tzMqeTo3kLd5-CbQ70ww4xUzYzOUc,1355
68
+ briefspec/resources/integrations/copilot/settings.json.example,sha256=qB05fan9cyxThF7zWyZWxW1icfHxZz_DogmsWTDkuE0,251
69
+ briefspec/resources/integrations/copilot/cloud/README.md,sha256=WBbHx3p6HECYi9pMkXYsQAj-fRIRCBy8InRydyd66SA,1164
70
+ briefspec/resources/manifests/claude-plugin.json,sha256=-Q1ekDYCcwUH-NJxbidPrZEvInmLZuoYIq_uh_rBrGA,466
71
+ briefspec/resources/manifests/codex-plugin.json,sha256=1eRFsEyLMNSbRUxuShUvA8E5k1WRV6SCxgXxCR45oxE,1227
72
+ briefspec/resources/manifests/plugin.json,sha256=dyXJSP495qpfeNO1at9mFIorUhSxzm9772_e1kGRzy4,496
73
+ brief_spec-0.5.0.dist-info/METADATA,sha256=676nl3uUP-muVjsMTQQ2pge84RUTAoFz7gXyJECY5Xc,24160
74
+ brief_spec-0.5.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
75
+ brief_spec-0.5.0.dist-info/entry_points.txt,sha256=GPpzuU4sBfR6KsRb4mqSX4Yg0u4jaYZfeFuQbZkW1ms,82
76
+ brief_spec-0.5.0.dist-info/licenses/LICENSE,sha256=kLH5LE2Q_hBWOTkAnJ6JbhKbz1ZW2SPQj-lOpTqXPjw,1075
77
+ brief_spec-0.5.0.dist-info/RECORD,,