hardproof 0.2.0__tar.gz → 0.3.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.
- hardproof-0.3.0/PKG-INFO +253 -0
- hardproof-0.3.0/README.md +222 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/__init__.py +1 -1
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/commands/cli.py +22 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/commands/shared.py +156 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/config.py +114 -1
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/constants.py +2 -2
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/domain/models.py +1 -1
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/domain/snapshots.py +12 -1
- hardproof-0.3.0/hardproof/domain/workcells.py +218 -0
- hardproof-0.3.0/hardproof/migrations/003_workcells.sql +132 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/evidence.py +4 -4
- hardproof-0.3.0/hardproof/services/hermes_children.py +77 -0
- hardproof-0.3.0/hardproof/services/workcell_artifacts.py +185 -0
- hardproof-0.3.0/hardproof/services/workcells.py +193 -0
- hardproof-0.3.0/hardproof/storage/repository.py +1050 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/tools/handlers.py +36 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/tools/schemas.py +6 -2
- hardproof-0.3.0/hardproof.egg-info/PKG-INFO +253 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof.egg-info/SOURCES.txt +5 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/pyproject.toml +1 -1
- hardproof-0.2.0/PKG-INFO +0 -190
- hardproof-0.2.0/README.md +0 -159
- hardproof-0.2.0/hardproof/storage/repository.py +0 -548
- hardproof-0.2.0/hardproof.egg-info/PKG-INFO +0 -190
- {hardproof-0.2.0 → hardproof-0.3.0}/LICENSE +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/NOTICE +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/commands/__init__.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/commands/slash.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/compat.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/domain/__init__.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/domain/enums.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/domain/transitions.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/errors.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/hooks/__init__.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/hooks/context.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/hooks/sessions.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/hooks/tool_policy.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/hooks/verification.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/migrations/001_initial.sql +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/migrations/002_gatehouse.sql +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/migrations/__init__.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/paths.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/plugin.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/policy/__init__.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/policy/packs.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/policy/profiles.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/policy/stage_graph.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/policy/stage_rules.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/policy/terminal.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/policy/tool_rules.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/policy/trace.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/policy/verification_rules.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/policy/waivers.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/py.typed +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/__init__.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/approvals.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/artifacts.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/authority.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/decisions.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/reports.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/risks.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/runs.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/sessions.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/tasks.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/services/waivers.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/skills/deliver/SKILL.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/skills/design/SKILL.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/skills/discover/SKILL.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/skills/implement/SKILL.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/skills/learn/SKILL.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/skills/orchestrate/SKILL.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/skills/plan/SKILL.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/skills/review/SKILL.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/skills/verify/SKILL.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/storage/__init__.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/storage/database.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/storage/migrations.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/templates/__init__.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/templates/completion.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/templates/design.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/templates/discovery.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/templates/plan.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/templates/review.md +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof/tools/__init__.py +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof.egg-info/dependency_links.txt +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof.egg-info/entry_points.txt +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof.egg-info/requires.txt +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/hardproof.egg-info/top_level.txt +0 -0
- {hardproof-0.2.0 → hardproof-0.3.0}/setup.cfg +0 -0
hardproof-0.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hardproof
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: A persistent, risk-aware engineering protocol for Hermes Agent
|
|
5
|
+
Author: Hardproof contributors
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Classifier: Development Status :: 3 - Alpha
|
|
8
|
+
Classifier: Operating System :: OS Independent
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Classifier: Typing :: Typed
|
|
13
|
+
Requires-Python: >=3.11
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
License-File: LICENSE
|
|
16
|
+
License-File: NOTICE
|
|
17
|
+
Requires-Dist: PyYAML<7,>=6
|
|
18
|
+
Provides-Extra: dev
|
|
19
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
20
|
+
Requires-Dist: cyclonedx-bom>=7; extra == "dev"
|
|
21
|
+
Requires-Dist: hypothesis>=6; extra == "dev"
|
|
22
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
23
|
+
Requires-Dist: pip-audit>=2.7; extra == "dev"
|
|
24
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
25
|
+
Requires-Dist: pytest-cov>=5; extra == "dev"
|
|
26
|
+
Requires-Dist: pytest-xdist>=3; extra == "dev"
|
|
27
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
28
|
+
Requires-Dist: twine>=5; extra == "dev"
|
|
29
|
+
Requires-Dist: types-PyYAML>=6; extra == "dev"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# HARDPROOF
|
|
33
|
+
|
|
34
|
+
> Software has to earn done.
|
|
35
|
+
|
|
36
|
+
[](https://github.com/asimons81/hardproof/actions/workflows/ci.yml)
|
|
37
|
+
[](LICENSE)
|
|
38
|
+
[](https://pypi.org/project/hardproof/)
|
|
39
|
+
|
|
40
|
+
> **Alpha software.** v0.2.0 Gatehouse is the current signed public alpha on PyPI. v0.3.0 Workcells development has not begun. Commands, schemas, and contracts may change before v1.0.0.
|
|
41
|
+
|
|
42
|
+
Hardproof gives coding agents a persistent, risk-aware engineering process that turns ambiguous software requests into reviewed, verified results while preserving the evidence behind every completion claim.
|
|
43
|
+
|
|
44
|
+
> A persistent, risk-aware engineering protocol for Hermes Agent.
|
|
45
|
+
|
|
46
|
+
## Current Release
|
|
47
|
+
|
|
48
|
+
| Release | Version | Status |
|
|
49
|
+
|---------|---------|--------|
|
|
50
|
+
| Public alpha | v0.2.0 Gatehouse | Released on GitHub and PyPI |
|
|
51
|
+
| Previous | v0.1.1 Core Heat | Released on GitHub and PyPI |
|
|
52
|
+
| Previous | v0.1.0 Core Heat | Released on GitHub |
|
|
53
|
+
| Future | v0.3.0 Workcells | Not started |
|
|
54
|
+
|
|
55
|
+
## Install
|
|
56
|
+
|
|
57
|
+
From PyPI:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
pip install hardproof
|
|
61
|
+
hermes plugins enable hardproof
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
From GitHub:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
hermes plugins install asimons81/hardproof --enable
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Enable
|
|
71
|
+
|
|
72
|
+
Enable the plugin in Hermes:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
hermes plugins enable hardproof
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Verify discovery:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
hermes hardproof doctor
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Quick Start
|
|
85
|
+
|
|
86
|
+
Both the CLI and slash-command surfaces work identically:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Terminal
|
|
90
|
+
hermes hardproof start standard "Build API-key rotation with rollback support"
|
|
91
|
+
hermes hardproof status
|
|
92
|
+
hermes hardproof doctor
|
|
93
|
+
|
|
94
|
+
# In Hermes chat
|
|
95
|
+
/hardproof start standard "Build API-key rotation with rollback support"
|
|
96
|
+
/hardproof status
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Hardproof stores state under `.hardproof/`, adds that directory to the repository-local Git exclude file, and injects compact stage context into bound Hermes sessions.
|
|
100
|
+
|
|
101
|
+
## How Hardproof Changes an Agent Workflow
|
|
102
|
+
|
|
103
|
+
1. **INT AKE** — clarify the request before any code is written
|
|
104
|
+
2. **DISCOVERY** — inspect the repository, constraints, and unknowns
|
|
105
|
+
3. **DESIGN** — shape a reversible solution (requires human approval)
|
|
106
|
+
4. **PLAN** — turn the design into dependency-aware tasks (requires human approval)
|
|
107
|
+
5. **IMPLEMENT** — execute approved tasks with focused tests
|
|
108
|
+
6. **REVIEW** — challenge the implementation and risks
|
|
109
|
+
7. **VERIFY** — run checks and evaluate fresh workspace-bound evidence
|
|
110
|
+
8. **DELIVER** — prepare an evidence-backed completion handoff
|
|
111
|
+
9. **LEARN** — capture lessons or explicitly skip
|
|
112
|
+
|
|
113
|
+
Every stage has defined gates. No run completes without fresh successful evidence.
|
|
114
|
+
|
|
115
|
+
## Profiles
|
|
116
|
+
|
|
117
|
+
| Profile | Use Case | Key Requirements |
|
|
118
|
+
|---------|----------|-----------------|
|
|
119
|
+
| **Quick** | Typo fixes, doc updates, one-line changes | Recorded skips, at least one fresh verification check |
|
|
120
|
+
| **Standard** | Feature work, refactors, multi-file changes | Discovery, design and plan, human design and plan approval, tracked implementation, review, fresh verification, delivery, learning decision |
|
|
121
|
+
| **Critical** | Auth changes, data migrations, production config | Destructive-action approvals, at least two checks, rollback and risk material, fail-closed mutation policy, human completion approval |
|
|
122
|
+
|
|
123
|
+
No profile permits completion without fresh successful evidence.
|
|
124
|
+
|
|
125
|
+
## Gatehouse v0.2.0 Features
|
|
126
|
+
|
|
127
|
+
Gatehouse adds strict project allow/deny/approval rules, ordered policy explanations, human-only
|
|
128
|
+
scoped waivers, advisory risk suggestions, bounded monotonic stage graphs, configuration and
|
|
129
|
+
migration diagnostics, and versioned Python/Node/Rust/Go policy packs. See
|
|
130
|
+
[configuration and migrations](docs/configuration-and-migrations.md) and
|
|
131
|
+
[policy packs](docs/policy-packs.md).
|
|
132
|
+
|
|
133
|
+
## Common Commands
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
hermes hardproof start quick|standard|critical "request"
|
|
137
|
+
hermes hardproof status
|
|
138
|
+
hermes hardproof doctor
|
|
139
|
+
hermes hardproof approve design|plan|completion [reason]
|
|
140
|
+
hermes hardproof waive <reason>
|
|
141
|
+
hermes hardproof pause [reason]
|
|
142
|
+
hermes hardproof resume [run-id]
|
|
143
|
+
hermes hardproof abort <reason>
|
|
144
|
+
hermes hardproof evidence
|
|
145
|
+
hermes hardproof export [path]
|
|
146
|
+
hermes hardproof config init|validate|explain
|
|
147
|
+
hermes hardproof db status|migrate [--dry-run]
|
|
148
|
+
hermes hardproof migrate-state
|
|
149
|
+
hermes hardproof runs
|
|
150
|
+
hermes hardproof show <run-id>
|
|
151
|
+
hermes hardproof policy <args>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
All commands also work as `/hardproof <subcommand>` in Hermes chat.
|
|
155
|
+
|
|
156
|
+
## Point Hermes Agent at This Repository
|
|
157
|
+
|
|
158
|
+
Hermes Agent automatically reads `AGENTS.md` when started in the repository. To work on Hardproof itself:
|
|
159
|
+
|
|
160
|
+
1. Clone or open the repo
|
|
161
|
+
2. Start Hermes from the repository root
|
|
162
|
+
3. Confirm `AGENTS.md` is loaded (Hermes prints a context-file banner on startup)
|
|
163
|
+
4. Follow the instructions in [docs/hermes-agent-guide.md](docs/hermes-agent-guide.md)
|
|
164
|
+
|
|
165
|
+
## Architecture
|
|
166
|
+
|
|
167
|
+
Hardproof is a standalone Python package discovered through the `hermes_agent.plugins` entry-point group. It uses only the public Hermes registration, hook, command, skill, and dispatch APIs.
|
|
168
|
+
|
|
169
|
+
1. **Plugin layer** — registers slash commands, CLI commands, six tools, lifecycle hooks, and nine stage skills
|
|
170
|
+
2. **Domain layer** — run profiles, stages, transitions, approval gates, and immutable event models
|
|
171
|
+
3. **Policy layer** — stage-aware mutation rules, tool policies, and human-required approval escalation
|
|
172
|
+
4. **Storage layer** — project-local SQLite database with forward-only migrations plus human-readable artifacts under `.hardproof/runs/<run-id>/`
|
|
173
|
+
5. **Verification layer** — workspace-bound evidence with Git HEAD capture, binary diff freshness checks, and redacted output recording
|
|
174
|
+
|
|
175
|
+
See [architecture](docs/architecture.md), [profiles](docs/profiles.md), and [compatibility](docs/compatibility.md).
|
|
176
|
+
|
|
177
|
+
## Verification Evidence
|
|
178
|
+
|
|
179
|
+
Hardproof requires fresh, workspace-bound evidence before any run can complete. Verification checks capture:
|
|
180
|
+
|
|
181
|
+
- Git HEAD commit hash at the time of verification
|
|
182
|
+
- Binary diff against the working tree to detect uncommitted changes
|
|
183
|
+
- Redacted, size-bounded output from each configured check
|
|
184
|
+
- Strict exit-code evaluation (only explicit zero passes)
|
|
185
|
+
|
|
186
|
+
Stale evidence — recorded against a different workspace state — is flagged and cannot satisfy completion gates.
|
|
187
|
+
|
|
188
|
+
## Security Boundary
|
|
189
|
+
|
|
190
|
+
Hardproof coordinates engineering process; it is not a security sandbox. Policy hooks do not replace OS permissions, protected branches, sandboxing, isolation, or human code review.
|
|
191
|
+
|
|
192
|
+
Hardproof includes these protections:
|
|
193
|
+
- Force pushes and destructive Git operations are blocked
|
|
194
|
+
- Recognized destructive actions are blocked or require human approval
|
|
195
|
+
- Source mutation is stage-aware (locked in later stages)
|
|
196
|
+
- Human-only approval gates prevent model self-approval
|
|
197
|
+
- Policy decisions are recorded with cryptographic hashes of arguments and configuration
|
|
198
|
+
|
|
199
|
+
See [SECURITY.md](SECURITY.md) and the [security model](docs/security-model.md).
|
|
200
|
+
|
|
201
|
+
## Privacy
|
|
202
|
+
|
|
203
|
+
Hardproof has **no telemetry, no analytics, no accounts, no hosted dependencies, no remote asset fetching, and no automatic update checks.** Normal local operation makes no intentional network request. Verification output is redacted and size-bounded. Policy events store argument keys and hashes rather than raw values. Nothing phones home.
|
|
204
|
+
|
|
205
|
+
## Known Limitations
|
|
206
|
+
|
|
207
|
+
- Policy hooks coordinate process but are not a security sandbox or complete shell parser
|
|
208
|
+
- Managed runs require a Git worktree for workspace-bound freshness evidence
|
|
209
|
+
- Local compatibility evidence covers Hermes Agent 0.18.2 on native Windows; macOS and Linux are CI-enforced
|
|
210
|
+
- Downgrade from a migrated v0.2.0 database is not supported
|
|
211
|
+
|
|
212
|
+
## Documentation Index
|
|
213
|
+
|
|
214
|
+
| Document | Audience |
|
|
215
|
+
|----------|----------|
|
|
216
|
+
| [docs/README.md](docs/README.md) | Full documentation index |
|
|
217
|
+
| [docs/hermes-agent-guide.md](docs/hermes-agent-guide.md) | Hermes Agent operators |
|
|
218
|
+
| [docs/architecture.md](docs/architecture.md) | Architecture overview |
|
|
219
|
+
| [docs/profiles.md](docs/profiles.md) | Run profiles |
|
|
220
|
+
| [docs/protocol.md](docs/protocol.md) | Protocol specification |
|
|
221
|
+
| [docs/security-model.md](docs/security-model.md) | Security model |
|
|
222
|
+
| [docs/configuration-and-migrations.md](docs/configuration-and-migrations.md) | Config and migrations |
|
|
223
|
+
| [docs/policy-packs.md](docs/policy-packs.md) | Language policy packs |
|
|
224
|
+
| [docs/command-reference.md](docs/command-reference.md) | All commands and tools |
|
|
225
|
+
| [docs/repository-map.md](docs/repository-map.md) | Repository layout |
|
|
226
|
+
|
|
227
|
+
## Contributing
|
|
228
|
+
|
|
229
|
+
Start with [CONTRIBUTING.md](CONTRIBUTING.md), [GOVERNANCE.md](GOVERNANCE.md), and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Coding agents should read [AGENTS.md](AGENTS.md) first. Design changes use ADRs; breaking protocol changes require a public RFC issue. Contributions use the Developer Certificate of Origin rather than a CLA.
|
|
230
|
+
|
|
231
|
+
## Roadmap
|
|
232
|
+
|
|
233
|
+
| Version | Codename | Focus |
|
|
234
|
+
|---------|----------|-------|
|
|
235
|
+
| v0.1.1 | Core Heat | Standalone plugin, durable stages, SQLite state, approvals, skills, fresh evidence, reports |
|
|
236
|
+
| v0.2.0 | Gatehouse | Explainable configurable policy, scoped waivers, risk suggestions, language packs |
|
|
237
|
+
| v0.3.0 | Workcells | Dependency-aware task waves, resumable subagent implementers |
|
|
238
|
+
| v0.4.0 | Challenge Chamber | Independent specialized reviewers, severity, fix/re-review loops |
|
|
239
|
+
| v0.5.0 | Isolation | Branches, worktrees, baseline proof, rollback, backend adapters |
|
|
240
|
+
|
|
241
|
+
Full roadmap: [ROADMAP.md](ROADMAP.md).
|
|
242
|
+
|
|
243
|
+
## License
|
|
244
|
+
|
|
245
|
+
Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
246
|
+
|
|
247
|
+
## Affiliation
|
|
248
|
+
|
|
249
|
+
Hardproof is independent open-source software. It is not affiliated with, endorsed by, or sponsored by Hermes Agent, Nous Research, Atlassian, or any other organization.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
**Topics:** `hermes-agent` `coding-agents` `agentic-coding` `software-engineering` `verification` `developer-tools` `open-source` `python`
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# HARDPROOF
|
|
2
|
+
|
|
3
|
+
> Software has to earn done.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/asimons81/hardproof/actions/workflows/ci.yml)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://pypi.org/project/hardproof/)
|
|
8
|
+
|
|
9
|
+
> **Alpha software.** v0.2.0 Gatehouse is the current signed public alpha on PyPI. v0.3.0 Workcells development has not begun. Commands, schemas, and contracts may change before v1.0.0.
|
|
10
|
+
|
|
11
|
+
Hardproof gives coding agents a persistent, risk-aware engineering process that turns ambiguous software requests into reviewed, verified results while preserving the evidence behind every completion claim.
|
|
12
|
+
|
|
13
|
+
> A persistent, risk-aware engineering protocol for Hermes Agent.
|
|
14
|
+
|
|
15
|
+
## Current Release
|
|
16
|
+
|
|
17
|
+
| Release | Version | Status |
|
|
18
|
+
|---------|---------|--------|
|
|
19
|
+
| Public alpha | v0.2.0 Gatehouse | Released on GitHub and PyPI |
|
|
20
|
+
| Previous | v0.1.1 Core Heat | Released on GitHub and PyPI |
|
|
21
|
+
| Previous | v0.1.0 Core Heat | Released on GitHub |
|
|
22
|
+
| Future | v0.3.0 Workcells | Not started |
|
|
23
|
+
|
|
24
|
+
## Install
|
|
25
|
+
|
|
26
|
+
From PyPI:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pip install hardproof
|
|
30
|
+
hermes plugins enable hardproof
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
From GitHub:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
hermes plugins install asimons81/hardproof --enable
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Enable
|
|
40
|
+
|
|
41
|
+
Enable the plugin in Hermes:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
hermes plugins enable hardproof
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Verify discovery:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
hermes hardproof doctor
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Quick Start
|
|
54
|
+
|
|
55
|
+
Both the CLI and slash-command surfaces work identically:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Terminal
|
|
59
|
+
hermes hardproof start standard "Build API-key rotation with rollback support"
|
|
60
|
+
hermes hardproof status
|
|
61
|
+
hermes hardproof doctor
|
|
62
|
+
|
|
63
|
+
# In Hermes chat
|
|
64
|
+
/hardproof start standard "Build API-key rotation with rollback support"
|
|
65
|
+
/hardproof status
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Hardproof stores state under `.hardproof/`, adds that directory to the repository-local Git exclude file, and injects compact stage context into bound Hermes sessions.
|
|
69
|
+
|
|
70
|
+
## How Hardproof Changes an Agent Workflow
|
|
71
|
+
|
|
72
|
+
1. **INT AKE** — clarify the request before any code is written
|
|
73
|
+
2. **DISCOVERY** — inspect the repository, constraints, and unknowns
|
|
74
|
+
3. **DESIGN** — shape a reversible solution (requires human approval)
|
|
75
|
+
4. **PLAN** — turn the design into dependency-aware tasks (requires human approval)
|
|
76
|
+
5. **IMPLEMENT** — execute approved tasks with focused tests
|
|
77
|
+
6. **REVIEW** — challenge the implementation and risks
|
|
78
|
+
7. **VERIFY** — run checks and evaluate fresh workspace-bound evidence
|
|
79
|
+
8. **DELIVER** — prepare an evidence-backed completion handoff
|
|
80
|
+
9. **LEARN** — capture lessons or explicitly skip
|
|
81
|
+
|
|
82
|
+
Every stage has defined gates. No run completes without fresh successful evidence.
|
|
83
|
+
|
|
84
|
+
## Profiles
|
|
85
|
+
|
|
86
|
+
| Profile | Use Case | Key Requirements |
|
|
87
|
+
|---------|----------|-----------------|
|
|
88
|
+
| **Quick** | Typo fixes, doc updates, one-line changes | Recorded skips, at least one fresh verification check |
|
|
89
|
+
| **Standard** | Feature work, refactors, multi-file changes | Discovery, design and plan, human design and plan approval, tracked implementation, review, fresh verification, delivery, learning decision |
|
|
90
|
+
| **Critical** | Auth changes, data migrations, production config | Destructive-action approvals, at least two checks, rollback and risk material, fail-closed mutation policy, human completion approval |
|
|
91
|
+
|
|
92
|
+
No profile permits completion without fresh successful evidence.
|
|
93
|
+
|
|
94
|
+
## Gatehouse v0.2.0 Features
|
|
95
|
+
|
|
96
|
+
Gatehouse adds strict project allow/deny/approval rules, ordered policy explanations, human-only
|
|
97
|
+
scoped waivers, advisory risk suggestions, bounded monotonic stage graphs, configuration and
|
|
98
|
+
migration diagnostics, and versioned Python/Node/Rust/Go policy packs. See
|
|
99
|
+
[configuration and migrations](docs/configuration-and-migrations.md) and
|
|
100
|
+
[policy packs](docs/policy-packs.md).
|
|
101
|
+
|
|
102
|
+
## Common Commands
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
hermes hardproof start quick|standard|critical "request"
|
|
106
|
+
hermes hardproof status
|
|
107
|
+
hermes hardproof doctor
|
|
108
|
+
hermes hardproof approve design|plan|completion [reason]
|
|
109
|
+
hermes hardproof waive <reason>
|
|
110
|
+
hermes hardproof pause [reason]
|
|
111
|
+
hermes hardproof resume [run-id]
|
|
112
|
+
hermes hardproof abort <reason>
|
|
113
|
+
hermes hardproof evidence
|
|
114
|
+
hermes hardproof export [path]
|
|
115
|
+
hermes hardproof config init|validate|explain
|
|
116
|
+
hermes hardproof db status|migrate [--dry-run]
|
|
117
|
+
hermes hardproof migrate-state
|
|
118
|
+
hermes hardproof runs
|
|
119
|
+
hermes hardproof show <run-id>
|
|
120
|
+
hermes hardproof policy <args>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
All commands also work as `/hardproof <subcommand>` in Hermes chat.
|
|
124
|
+
|
|
125
|
+
## Point Hermes Agent at This Repository
|
|
126
|
+
|
|
127
|
+
Hermes Agent automatically reads `AGENTS.md` when started in the repository. To work on Hardproof itself:
|
|
128
|
+
|
|
129
|
+
1. Clone or open the repo
|
|
130
|
+
2. Start Hermes from the repository root
|
|
131
|
+
3. Confirm `AGENTS.md` is loaded (Hermes prints a context-file banner on startup)
|
|
132
|
+
4. Follow the instructions in [docs/hermes-agent-guide.md](docs/hermes-agent-guide.md)
|
|
133
|
+
|
|
134
|
+
## Architecture
|
|
135
|
+
|
|
136
|
+
Hardproof is a standalone Python package discovered through the `hermes_agent.plugins` entry-point group. It uses only the public Hermes registration, hook, command, skill, and dispatch APIs.
|
|
137
|
+
|
|
138
|
+
1. **Plugin layer** — registers slash commands, CLI commands, six tools, lifecycle hooks, and nine stage skills
|
|
139
|
+
2. **Domain layer** — run profiles, stages, transitions, approval gates, and immutable event models
|
|
140
|
+
3. **Policy layer** — stage-aware mutation rules, tool policies, and human-required approval escalation
|
|
141
|
+
4. **Storage layer** — project-local SQLite database with forward-only migrations plus human-readable artifacts under `.hardproof/runs/<run-id>/`
|
|
142
|
+
5. **Verification layer** — workspace-bound evidence with Git HEAD capture, binary diff freshness checks, and redacted output recording
|
|
143
|
+
|
|
144
|
+
See [architecture](docs/architecture.md), [profiles](docs/profiles.md), and [compatibility](docs/compatibility.md).
|
|
145
|
+
|
|
146
|
+
## Verification Evidence
|
|
147
|
+
|
|
148
|
+
Hardproof requires fresh, workspace-bound evidence before any run can complete. Verification checks capture:
|
|
149
|
+
|
|
150
|
+
- Git HEAD commit hash at the time of verification
|
|
151
|
+
- Binary diff against the working tree to detect uncommitted changes
|
|
152
|
+
- Redacted, size-bounded output from each configured check
|
|
153
|
+
- Strict exit-code evaluation (only explicit zero passes)
|
|
154
|
+
|
|
155
|
+
Stale evidence — recorded against a different workspace state — is flagged and cannot satisfy completion gates.
|
|
156
|
+
|
|
157
|
+
## Security Boundary
|
|
158
|
+
|
|
159
|
+
Hardproof coordinates engineering process; it is not a security sandbox. Policy hooks do not replace OS permissions, protected branches, sandboxing, isolation, or human code review.
|
|
160
|
+
|
|
161
|
+
Hardproof includes these protections:
|
|
162
|
+
- Force pushes and destructive Git operations are blocked
|
|
163
|
+
- Recognized destructive actions are blocked or require human approval
|
|
164
|
+
- Source mutation is stage-aware (locked in later stages)
|
|
165
|
+
- Human-only approval gates prevent model self-approval
|
|
166
|
+
- Policy decisions are recorded with cryptographic hashes of arguments and configuration
|
|
167
|
+
|
|
168
|
+
See [SECURITY.md](SECURITY.md) and the [security model](docs/security-model.md).
|
|
169
|
+
|
|
170
|
+
## Privacy
|
|
171
|
+
|
|
172
|
+
Hardproof has **no telemetry, no analytics, no accounts, no hosted dependencies, no remote asset fetching, and no automatic update checks.** Normal local operation makes no intentional network request. Verification output is redacted and size-bounded. Policy events store argument keys and hashes rather than raw values. Nothing phones home.
|
|
173
|
+
|
|
174
|
+
## Known Limitations
|
|
175
|
+
|
|
176
|
+
- Policy hooks coordinate process but are not a security sandbox or complete shell parser
|
|
177
|
+
- Managed runs require a Git worktree for workspace-bound freshness evidence
|
|
178
|
+
- Local compatibility evidence covers Hermes Agent 0.18.2 on native Windows; macOS and Linux are CI-enforced
|
|
179
|
+
- Downgrade from a migrated v0.2.0 database is not supported
|
|
180
|
+
|
|
181
|
+
## Documentation Index
|
|
182
|
+
|
|
183
|
+
| Document | Audience |
|
|
184
|
+
|----------|----------|
|
|
185
|
+
| [docs/README.md](docs/README.md) | Full documentation index |
|
|
186
|
+
| [docs/hermes-agent-guide.md](docs/hermes-agent-guide.md) | Hermes Agent operators |
|
|
187
|
+
| [docs/architecture.md](docs/architecture.md) | Architecture overview |
|
|
188
|
+
| [docs/profiles.md](docs/profiles.md) | Run profiles |
|
|
189
|
+
| [docs/protocol.md](docs/protocol.md) | Protocol specification |
|
|
190
|
+
| [docs/security-model.md](docs/security-model.md) | Security model |
|
|
191
|
+
| [docs/configuration-and-migrations.md](docs/configuration-and-migrations.md) | Config and migrations |
|
|
192
|
+
| [docs/policy-packs.md](docs/policy-packs.md) | Language policy packs |
|
|
193
|
+
| [docs/command-reference.md](docs/command-reference.md) | All commands and tools |
|
|
194
|
+
| [docs/repository-map.md](docs/repository-map.md) | Repository layout |
|
|
195
|
+
|
|
196
|
+
## Contributing
|
|
197
|
+
|
|
198
|
+
Start with [CONTRIBUTING.md](CONTRIBUTING.md), [GOVERNANCE.md](GOVERNANCE.md), and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Coding agents should read [AGENTS.md](AGENTS.md) first. Design changes use ADRs; breaking protocol changes require a public RFC issue. Contributions use the Developer Certificate of Origin rather than a CLA.
|
|
199
|
+
|
|
200
|
+
## Roadmap
|
|
201
|
+
|
|
202
|
+
| Version | Codename | Focus |
|
|
203
|
+
|---------|----------|-------|
|
|
204
|
+
| v0.1.1 | Core Heat | Standalone plugin, durable stages, SQLite state, approvals, skills, fresh evidence, reports |
|
|
205
|
+
| v0.2.0 | Gatehouse | Explainable configurable policy, scoped waivers, risk suggestions, language packs |
|
|
206
|
+
| v0.3.0 | Workcells | Dependency-aware task waves, resumable subagent implementers |
|
|
207
|
+
| v0.4.0 | Challenge Chamber | Independent specialized reviewers, severity, fix/re-review loops |
|
|
208
|
+
| v0.5.0 | Isolation | Branches, worktrees, baseline proof, rollback, backend adapters |
|
|
209
|
+
|
|
210
|
+
Full roadmap: [ROADMAP.md](ROADMAP.md).
|
|
211
|
+
|
|
212
|
+
## License
|
|
213
|
+
|
|
214
|
+
Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
215
|
+
|
|
216
|
+
## Affiliation
|
|
217
|
+
|
|
218
|
+
Hardproof is independent open-source software. It is not affiliated with, endorsed by, or sponsored by Hermes Agent, Nous Research, Atlassian, or any other organization.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
**Topics:** `hermes-agent` `coding-agents` `agentic-coding` `software-engineering` `verification` `developer-tools` `open-source` `python`
|
|
@@ -31,6 +31,22 @@ def _configure(parser: argparse.ArgumentParser) -> None:
|
|
|
31
31
|
export.add_argument("path", nargs="?")
|
|
32
32
|
sub.add_parser("doctor")
|
|
33
33
|
sub.add_parser("runs")
|
|
34
|
+
sub.add_parser("tasks")
|
|
35
|
+
task = sub.add_parser("task").add_subparsers(dest="task_command", required=True)
|
|
36
|
+
task.add_parser("graph")
|
|
37
|
+
task_show = task.add_parser("show")
|
|
38
|
+
task_show.add_argument("task_id")
|
|
39
|
+
task_attempts = task.add_parser("attempts")
|
|
40
|
+
task_attempts.add_argument("task_id")
|
|
41
|
+
workcells = sub.add_parser("workcells").add_subparsers(dest="workcells_command", required=True)
|
|
42
|
+
workcells.add_parser("status")
|
|
43
|
+
plan = workcells.add_parser("plan")
|
|
44
|
+
plan.add_argument("--tasks-json", required=True)
|
|
45
|
+
workcells.add_parser("run-next")
|
|
46
|
+
result = workcells.add_parser("result")
|
|
47
|
+
result.add_argument("attempt_id")
|
|
48
|
+
reconcile = workcells.add_parser("reconcile")
|
|
49
|
+
reconcile.add_argument("attempt_id")
|
|
34
50
|
show = sub.add_parser("show")
|
|
35
51
|
show.add_argument("run_id")
|
|
36
52
|
config = sub.add_parser("config").add_subparsers(dest="config_command", required=True)
|
|
@@ -68,6 +84,12 @@ def _to_argv(args: argparse.Namespace) -> list[str]:
|
|
|
68
84
|
return [command, *([args.path] if args.path else [])]
|
|
69
85
|
if command == "show":
|
|
70
86
|
return [command, args.run_id]
|
|
87
|
+
if command == "task":
|
|
88
|
+
return [command, args.task_command, *([args.task_id] if hasattr(args, "task_id") else [])]
|
|
89
|
+
if command == "workcells":
|
|
90
|
+
if args.workcells_command == "plan":
|
|
91
|
+
return [command, "plan", "--tasks-json", args.tasks_json]
|
|
92
|
+
return [command, args.workcells_command, *([args.attempt_id] if hasattr(args, "attempt_id") else [])]
|
|
71
93
|
if command == "config":
|
|
72
94
|
return [command, args.config_command]
|
|
73
95
|
if command == "db":
|