proofhouse 0.4.1__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.
- proofhouse-0.4.1/LICENSE +21 -0
- proofhouse-0.4.1/PKG-INFO +260 -0
- proofhouse-0.4.1/README.md +229 -0
- proofhouse-0.4.1/pyproject.toml +54 -0
- proofhouse-0.4.1/setup.cfg +4 -0
- proofhouse-0.4.1/src/proofhouse/__init__.py +9 -0
- proofhouse-0.4.1/src/proofhouse/cli.py +140 -0
- proofhouse-0.4.1/src/proofhouse/compiler/__init__.py +12 -0
- proofhouse-0.4.1/src/proofhouse/compiler/adapters/__init__.py +56 -0
- proofhouse-0.4.1/src/proofhouse/compiler/adapters/anthropic.py +305 -0
- proofhouse-0.4.1/src/proofhouse/compiler/adapters/anthropic_schema_subset.py +102 -0
- proofhouse-0.4.1/src/proofhouse/compiler/adapters/base.py +67 -0
- proofhouse-0.4.1/src/proofhouse/compiler/adapters/fake.py +107 -0
- proofhouse-0.4.1/src/proofhouse/compiler/adapters/gemini.py +344 -0
- proofhouse-0.4.1/src/proofhouse/compiler/adapters/gemini_schema_subset.py +143 -0
- proofhouse-0.4.1/src/proofhouse/compiler/adapters/openai.py +219 -0
- proofhouse-0.4.1/src/proofhouse/compiler/adapters/openai_schema_subset.py +85 -0
- proofhouse-0.4.1/src/proofhouse/compiler/api.py +384 -0
- proofhouse-0.4.1/src/proofhouse/compiler/benchmark.py +367 -0
- proofhouse-0.4.1/src/proofhouse/compiler/canonical.py +97 -0
- proofhouse-0.4.1/src/proofhouse/compiler/capability.py +55 -0
- proofhouse-0.4.1/src/proofhouse/compiler/cli_compiler.py +887 -0
- proofhouse-0.4.1/src/proofhouse/compiler/closed_loop.py +642 -0
- proofhouse-0.4.1/src/proofhouse/compiler/codegen/__init__.py +0 -0
- proofhouse-0.4.1/src/proofhouse/compiler/codegen/typescript.py +126 -0
- proofhouse-0.4.1/src/proofhouse/compiler/contracts.py +293 -0
- proofhouse-0.4.1/src/proofhouse/compiler/diagnostics.py +159 -0
- proofhouse-0.4.1/src/proofhouse/compiler/eval_aggregate.py +28 -0
- proofhouse-0.4.1/src/proofhouse/compiler/eval_dataset.py +80 -0
- proofhouse-0.4.1/src/proofhouse/compiler/eval_product.py +184 -0
- proofhouse-0.4.1/src/proofhouse/compiler/eval_rubric.py +61 -0
- proofhouse-0.4.1/src/proofhouse/compiler/evaluation.py +79 -0
- proofhouse-0.4.1/src/proofhouse/compiler/evidence.py +89 -0
- proofhouse-0.4.1/src/proofhouse/compiler/execution.py +441 -0
- proofhouse-0.4.1/src/proofhouse/compiler/hosted_openapi.py +158 -0
- proofhouse-0.4.1/src/proofhouse/compiler/hosted_slice.py +270 -0
- proofhouse-0.4.1/src/proofhouse/compiler/immutability.py +71 -0
- proofhouse-0.4.1/src/proofhouse/compiler/intake.py +213 -0
- proofhouse-0.4.1/src/proofhouse/compiler/ir.py +104 -0
- proofhouse-0.4.1/src/proofhouse/compiler/missionrig.py +148 -0
- proofhouse-0.4.1/src/proofhouse/compiler/model_suggest.py +89 -0
- proofhouse-0.4.1/src/proofhouse/compiler/orchestration/__init__.py +1 -0
- proofhouse-0.4.1/src/proofhouse/compiler/orchestration/assay.py +30 -0
- proofhouse-0.4.1/src/proofhouse/compiler/orchestration/claim_ledger.py +21 -0
- proofhouse-0.4.1/src/proofhouse/compiler/orchestration/learning.py +111 -0
- proofhouse-0.4.1/src/proofhouse/compiler/orchestration/overseer.py +9 -0
- proofhouse-0.4.1/src/proofhouse/compiler/orchestration/proof.py +50 -0
- proofhouse-0.4.1/src/proofhouse/compiler/orchestration/route.py +120 -0
- proofhouse-0.4.1/src/proofhouse/compiler/orchestration/shipwalk_consume.py +26 -0
- proofhouse-0.4.1/src/proofhouse/compiler/orchestration/stack_profiles.py +77 -0
- proofhouse-0.4.1/src/proofhouse/compiler/passes/__init__.py +20 -0
- proofhouse-0.4.1/src/proofhouse/compiler/passes/adapter_lowering.py +159 -0
- proofhouse-0.4.1/src/proofhouse/compiler/passes/base.py +46 -0
- proofhouse-0.4.1/src/proofhouse/compiler/passes/capability_resolution.py +103 -0
- proofhouse-0.4.1/src/proofhouse/compiler/passes/normalization.py +32 -0
- proofhouse-0.4.1/src/proofhouse/compiler/passes/optimization.py +17 -0
- proofhouse-0.4.1/src/proofhouse/compiler/passes/safety.py +69 -0
- proofhouse-0.4.1/src/proofhouse/compiler/passes/validation.py +68 -0
- proofhouse-0.4.1/src/proofhouse/compiler/paths.py +55 -0
- proofhouse-0.4.1/src/proofhouse/compiler/pipeline.py +76 -0
- proofhouse-0.4.1/src/proofhouse/compiler/plain_language.py +134 -0
- proofhouse-0.4.1/src/proofhouse/compiler/repair.py +47 -0
- proofhouse-0.4.1/src/proofhouse/compiler/requirements_contract.py +774 -0
- proofhouse-0.4.1/src/proofhouse/compiler/requirements_ir_bridge.py +222 -0
- proofhouse-0.4.1/src/proofhouse/compiler/requirements_plain_produce.py +193 -0
- proofhouse-0.4.1/src/proofhouse/compiler/requirements_produce.py +181 -0
- proofhouse-0.4.1/src/proofhouse/compiler/resource_bounds.py +8 -0
- proofhouse-0.4.1/src/proofhouse/compiler/runtime_context.py +235 -0
- proofhouse-0.4.1/src/proofhouse/compiler/schemas/benchmark-manifest.schema.json +108 -0
- proofhouse-0.4.1/src/proofhouse/compiler/schemas/diagnostic_code_registry.json +30 -0
- proofhouse-0.4.1/src/proofhouse/compiler/schemas/diagnostic_contract.schema.json +47 -0
- proofhouse-0.4.1/src/proofhouse/compiler/schemas/proofhouse_ir_v0_1.schema.json +217 -0
- proofhouse-0.4.1/src/proofhouse/compiler/schemas/requirements_diagnostic_registry.json +35 -0
- proofhouse-0.4.1/src/proofhouse/compiler/sink.py +55 -0
- proofhouse-0.4.1/src/proofhouse/loadouts.py +110 -0
- proofhouse-0.4.1/src/proofhouse/optimize/__init__.py +5 -0
- proofhouse-0.4.1/src/proofhouse/optimize/case.py +444 -0
- proofhouse-0.4.1/src/proofhouse/optimize/checks.py +416 -0
- proofhouse-0.4.1/src/proofhouse/optimize/cli.py +759 -0
- proofhouse-0.4.1/src/proofhouse/optimize/cli_workflow.py +342 -0
- proofhouse-0.4.1/src/proofhouse/optimize/data/model_registry.json +253 -0
- proofhouse-0.4.1/src/proofhouse/optimize/data/proofhouse-framework.json +402 -0
- proofhouse-0.4.1/src/proofhouse/optimize/data/proofhouse.skill +0 -0
- proofhouse-0.4.1/src/proofhouse/optimize/data/reference-advisory/advisory.txt +10 -0
- proofhouse-0.4.1/src/proofhouse/optimize/data/reference-advisory/answers.json +5 -0
- proofhouse-0.4.1/src/proofhouse/optimize/data/reference-advisory/objective.txt +1 -0
- proofhouse-0.4.1/src/proofhouse/optimize/data/reference-advisory/output-v1.txt +1 -0
- proofhouse-0.4.1/src/proofhouse/optimize/data/reference-advisory/output-v2.txt +1 -0
- proofhouse-0.4.1/src/proofhouse/optimize/data/reference-advisory/prompt-v1.txt +1 -0
- proofhouse-0.4.1/src/proofhouse/optimize/data/reference-advisory/prompt-v2.txt +1 -0
- proofhouse-0.4.1/src/proofhouse/optimize/install_skill.py +302 -0
- proofhouse-0.4.1/src/proofhouse/optimize/model_notes.py +296 -0
- proofhouse-0.4.1/src/proofhouse/optimize/packets.py +182 -0
- proofhouse-0.4.1/src/proofhouse/optimize/reference_workflow.py +218 -0
- proofhouse-0.4.1/src/proofhouse/optimize/registry.py +114 -0
- proofhouse-0.4.1/src/proofhouse/optimize/workflow.py +507 -0
- proofhouse-0.4.1/src/proofhouse/runner.py +66 -0
- proofhouse-0.4.1/src/proofhouse/scan.py +351 -0
- proofhouse-0.4.1/src/proofhouse/schemas.py +51 -0
- proofhouse-0.4.1/src/proofhouse/scoring.py +30 -0
- proofhouse-0.4.1/src/proofhouse/templates.py +168 -0
- proofhouse-0.4.1/src/proofhouse.egg-info/PKG-INFO +260 -0
- proofhouse-0.4.1/src/proofhouse.egg-info/SOURCES.txt +122 -0
- proofhouse-0.4.1/src/proofhouse.egg-info/dependency_links.txt +1 -0
- proofhouse-0.4.1/src/proofhouse.egg-info/entry_points.txt +3 -0
- proofhouse-0.4.1/src/proofhouse.egg-info/requires.txt +8 -0
- proofhouse-0.4.1/src/proofhouse.egg-info/top_level.txt +1 -0
- proofhouse-0.4.1/tests/test_artifact_validators.py +129 -0
- proofhouse-0.4.1/tests/test_docs_status_lines.py +30 -0
- proofhouse-0.4.1/tests/test_eval_dataset_integrity.py +18 -0
- proofhouse-0.4.1/tests/test_loadouts.py +31 -0
- proofhouse-0.4.1/tests/test_model_surfaces.py +101 -0
- proofhouse-0.4.1/tests/test_package_version.py +12 -0
- proofhouse-0.4.1/tests/test_prompt_architect_templates.py +72 -0
- proofhouse-0.4.1/tests/test_readme_honesty_lines.py +23 -0
- proofhouse-0.4.1/tests/test_readme_how_it_works.py +48 -0
- proofhouse-0.4.1/tests/test_readme_import_claim.py +40 -0
- proofhouse-0.4.1/tests/test_rebrand_closeout.py +60 -0
- proofhouse-0.4.1/tests/test_reference_workflow_doc.py +64 -0
- proofhouse-0.4.1/tests/test_rubric_scoring.py +19 -0
- proofhouse-0.4.1/tests/test_scan.py +216 -0
- proofhouse-0.4.1/tests/test_schema_validation.py +19 -0
- proofhouse-0.4.1/tests/test_skill_bundle.py +91 -0
- proofhouse-0.4.1/tests/test_skill_root_parity.py +48 -0
proofhouse-0.4.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: proofhouse
|
|
3
|
+
Version: 0.4.1
|
|
4
|
+
Summary: Prompt operations framework for prompt architecture, audits, rewrites, and evals.
|
|
5
|
+
Author: Proofhouse Maintainers
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/KM-it-ops/Proofhouse
|
|
8
|
+
Project-URL: Repository, https://github.com/KM-it-ops/Proofhouse
|
|
9
|
+
Project-URL: Issues, https://github.com/KM-it-ops/Proofhouse/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/KM-it-ops/Proofhouse/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: prompts,prompt-engineering,evals,agents
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: jsonschema>=4.18
|
|
25
|
+
Requires-Dist: rfc8785==0.1.4
|
|
26
|
+
Provides-Extra: live
|
|
27
|
+
Requires-Dist: httpx>=0.27; extra == "live"
|
|
28
|
+
Provides-Extra: test
|
|
29
|
+
Requires-Dist: pytest>=8; extra == "test"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# Proofhouse
|
|
33
|
+
|
|
34
|
+
[](https://github.com/KM-it-ops/Proofhouse/actions/workflows/ci.yml)
|
|
35
|
+
[](https://www.python.org/)
|
|
36
|
+
[](proofhouse-framework.json)
|
|
37
|
+
[](#how-it-works)
|
|
38
|
+
[](LICENSE)
|
|
39
|
+
|
|
40
|
+
**A local workspace for revising prompts with evidence you can trace: every PASS names the exact prompt, outputs, checks and judgements it came from.**
|
|
41
|
+
|
|
42
|
+
I built Proofhouse because I kept rewriting the same prompt for different models and never had a good answer for which version was better, or whether a revision had quietly dropped a requirement. You give it an objective and a target model; it asks its clarifying questions in one batch and turns your answers into constraints that every later revision must keep. You record each prompt revision and the outputs a model actually produced, declare the checks that matter, and Proofhouse tells you which revision passes, which constraint lacks evidence, and what changed between revisions.
|
|
43
|
+
|
|
44
|
+
It runs on your machine with no API key. Proofhouse writes the prompts it needs as packets; you run them in the agent or model you already use and paste the results back. It is a local tool, not a hosted service, and I make no benchmark or quality claims for it.
|
|
45
|
+
|
|
46
|
+
[](https://github.com/KM-it-ops/Proofhouse/raw/main/docs/assets/proofhouse-demo.mp4)
|
|
47
|
+
|
|
48
|
+
*42-second demo of the standalone app (click to play). The terminal in `apps/proofhouse.jsx` types the Facebook objective, sets Grok 4.7, checks the loop, and compiles the prompt. The grid, particles, and cursor keep moving the whole time. Remotion draws it. Hyperframes runs the same timeline in `videos/readme-hype`.*
|
|
49
|
+
|
|
50
|
+
Portfolio: [km-it-ops.github.io](https://km-it-ops.github.io/)
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Try it in two minutes
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
uv tool install proofhouse
|
|
58
|
+
proofhouse-compiler demo
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
That runs the [reference workflow](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/reference-workflow.md) end to end, offline, from files shipped in the package. It replays recorded outputs: a security-advisory summary whose first revision invents an exploitation claim and fails its checks, and whose second revision passes without losing a constraint. It does not call a model. On Windows, set `$env:PYTHONUTF8='1'` first for reliable console output.
|
|
62
|
+
|
|
63
|
+
With pip: `python -m pip install proofhouse`, then `proofhouse-compiler demo`.
|
|
64
|
+
|
|
65
|
+
From a clone, the same check is `uv run python scripts/reference_workflow.py` (or `python -m pip install -e ".[test]"` without [uv](https://docs.astral.sh/uv/)). The by-hand steps later on this page copy `examples/reference-advisory`, which is in the repository, not in the wheel.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## How it works
|
|
70
|
+
|
|
71
|
+
`proofhouse-compiler optimize` renders the framework's clarify / compile / self-heal prompts as packets you run in the agent or model of your choice, and checks what you paste back against the criteria you declare. It does not call a model and it does not rate quality.
|
|
72
|
+
|
|
73
|
+
These are the [reference workflow](docs/reference-workflow.md)'s steps, and they run as written. `pc` below is `proofhouse-compiler` (`uv run proofhouse-compiler` from a clone). Work in a scratch folder holding copies of the example inputs:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
mkdir -p build/try && cp examples/reference-advisory/* build/try && cd build/try
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**1. Start a case and answer one batch of questions.** Proofhouse writes a clarify packet, `advisory-case/01-clarify.md`. You run it in your own agent and save the answers as `advisory-case/answers.json` (for this example, copy `answers.json` there). Compile turns each answer into an accepted constraint (K1-K3) that every later revision receives.
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
pc optimize new --case advisory-case --objective-file objective.txt --model "Claude Sonnet 5" --preset efficient
|
|
83
|
+
pc optimize compile --case advisory-case
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**2. Say how each constraint will be checked.** Checks can look at the prompt text or at what a model returned (`--target output`), and some can be a human judgement (`--manual`).
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
pc optimize constraints add --case advisory-case --text "Cite the advisory section for each claim" # K4
|
|
90
|
+
pc optimize criteria add --case advisory-case --id AUD --must-contain "SOC analysts"
|
|
91
|
+
pc optimize criteria add --case advisory-case --id UNK --target output --must-contain UNKNOWN
|
|
92
|
+
pc optimize criteria add --case advisory-case --id NOGUESS --target output --must-not-contain "exploited in the wild"
|
|
93
|
+
pc optimize criteria add --case advisory-case --id LEN --target output --max-words 120
|
|
94
|
+
pc optimize criteria add --case advisory-case --id CITE --target output --regex "\(s\d\)"
|
|
95
|
+
pc optimize criteria add --case advisory-case --id ACC --target output --manual "Every claim matches the advisory"
|
|
96
|
+
pc optimize constraints link --case advisory-case --id K1 --criterion AUD
|
|
97
|
+
pc optimize constraints link --case advisory-case --id K2 --criterion UNK
|
|
98
|
+
pc optimize constraints link --case advisory-case --id K2 --criterion NOGUESS
|
|
99
|
+
pc optimize constraints link --case advisory-case --id K3 --criterion LEN
|
|
100
|
+
pc optimize constraints link --case advisory-case --id K4 --criterion CITE
|
|
101
|
+
pc optimize constraints link --case advisory-case --id K4 --criterion ACC
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**3. Record a revision and what it produced, judge the manual check, then check it.**
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
pc optimize record --case advisory-case --prompt-file prompt-v1.txt
|
|
108
|
+
pc optimize output add --case advisory-case --revision 1 --output-file output-v1.txt --input-id EC-2026-017 --input-file advisory.txt --model "Claude Sonnet 5" --source "pasted from host agent"
|
|
109
|
+
pc optimize verdict --case advisory-case --revision 1 --criterion ACC --run R1 --result fail --note "claims active exploitation; the advisory does not say that"
|
|
110
|
+
pc optimize check --case advisory-case # exit 3: v1 FAIL UNK NOGUESS CITE ACC fail
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**4. Revise without losing anything.** The revise packet carries your feedback, the original answers and every accepted constraint. Run it in your agent, save the new prompt, and record revision 2 the same way.
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pc optimize revise --case advisory-case --feedback "It claimed active exploitation, which the advisory never states."
|
|
117
|
+
pc optimize record --case advisory-case --prompt-file prompt-v2.txt
|
|
118
|
+
pc optimize output add --case advisory-case --revision 2 --output-file output-v2.txt --input-id EC-2026-017 --input-file advisory.txt --model "Claude Sonnet 5" --source "pasted from host agent"
|
|
119
|
+
pc optimize verdict --case advisory-case --revision 2 --criterion ACC --run R2 --result pass
|
|
120
|
+
pc optimize check --case advisory-case # exit 0: v2 PASS, K1-K4 satisfied
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**5. Compare, report and hand it on.** `compare` shows what newly passes or regresses between revisions, `report` writes the evidence as Markdown, and `export` / `import` move a case to another workspace, refusing any file that does not match the bundle's manifest (the manifest is not signed).
|
|
124
|
+
|
|
125
|
+
### What a PASS proves, and what it does not
|
|
126
|
+
|
|
127
|
+
| A PASS from `optimize check` means | It does not mean |
|
|
128
|
+
|---|---|
|
|
129
|
+
| Every check you declared passed on this exact revision (and, for output checks, on the outputs you recorded) | That the prompt is good in general, or better than one you did not test |
|
|
130
|
+
| Every accepted constraint is linked to a check that passed | That a model will reproduce the recorded outputs |
|
|
131
|
+
| Each human verdict applies to the exact text and check definition you judged | That model notes are correct: shipped profiles cite no sources yet and are labeled `unverified` |
|
|
132
|
+
| Nothing was edited after it was recorded (digests are re-checked) | That the files are tamper-proof against someone who controls your machine |
|
|
133
|
+
|
|
134
|
+
Details: [docs/architecture.md](docs/architecture.md), [decision 0002](docs/decisions/0002-what-pass-means.md), [evidence format](docs/evidence-format.md).
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Two ways in
|
|
139
|
+
|
|
140
|
+
| Entry | Use it when | Status | Network |
|
|
141
|
+
|---|---|---|---|
|
|
142
|
+
| **Command line**: `proofhouse-compiler optimize` | You want the evidence trail above: constraints, recorded outputs, checks, compare, report | supported | none |
|
|
143
|
+
| **Cursor or Claude Code skill**: `proofhouse-compiler install-skill` asks which agent (Cursor, Claude Code, or another one you name with its skills folder); `--host cursor` or `--host claude` skips the question. Then say "Proofhouse" in a new chat or session | You want the same clarify → compile → self-heal loop as a conversation | supported entry point | the host agent's tools |
|
|
144
|
+
|
|
145
|
+
Proofhouse is two products in one repo, at different levels of maturity. The **PromptOps skill and framework (v1.3)**, the conversational meta-optimizer with current frontier model profiles, is the most mature part of the project. The headless compiler's maturity is listed under [Experimental and prototype parts](#experimental-and-prototype-parts).
|
|
146
|
+
|
|
147
|
+
Both entries use the same framework ([`proofhouse-framework.json`](proofhouse-framework.json)) and the same model notes. The framework also covers Efficient / Balanced / Thorough token presets, loops for recurring agents (trigger, body, exit, escalation), prompt audits with missing-context labels, and agent design (permission maps, tool boundaries, stop conditions). The skill is installed to `~/.cursor/skills/proofhouse` (or `~/.claude/skills/proofhouse` with `--host claude`) and the installer checks it (the bundle ships inside the package; `tests/test_skill_bundle.py` keeps it identical to `skills/proofhouse/`); without the console script, `python -m zipfile -e skills/proofhouse/proofhouse.skill ~/.cursor/skills` (or `~/.claude/skills`) does the same. The skill can research an unfamiliar model with the host agent's tools; the command line never goes online, and uses your own notes (`models remember`) or a generic profile labeled `fallback`.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Supported models (framework v1.3)
|
|
152
|
+
|
|
153
|
+
Built-in `modelNotes` cover prompting quirks, API ids, and cost and caching levers for each model:
|
|
154
|
+
|
|
155
|
+
<!-- supported-models:begin -->
|
|
156
|
+
| Tier | Models |
|
|
157
|
+
|---|---|
|
|
158
|
+
| **Anthropic** | Claude Fable 5.1 · Mythos 5.1 · Opus 5 · Sonnet 5 · Haiku 4.5 |
|
|
159
|
+
| **OpenAI** | GPT-5.6 Sol · Terra · Luna |
|
|
160
|
+
| **Google** | Gemini 3.8 Flash |
|
|
161
|
+
| **xAI** | Grok 4.6 |
|
|
162
|
+
| **Meta** | Muse Spark 1.3 |
|
|
163
|
+
| **Moonshot** | Kimi K3 |
|
|
164
|
+
| **Legacy** | GPT-5.5 · Gemini (generic) · Fable 5 · Mythos 5 · Opus 4.8 |
|
|
165
|
+
| **Other** | Skill and artifact: the host agent or the artifact web-researches the model and caches the paragraph. CLI (`proofhouse-compiler`): offline; `models remember` stores your own notes, otherwise the generic profile is used and labeled `fallback`. |
|
|
166
|
+
|
|
167
|
+
Profiles last reviewed 2026-09-03; a profile older than 90 days is flagged stale. None of the 18 profiles cites sources yet, so every profile is labeled unverified. They are prompting guidance, not vendor specifications. `proofhouse-compiler models list` shows per-model ids, aliases, and dates.
|
|
168
|
+
|
|
169
|
+
Full profiles: [`proofhouse-framework.json`](proofhouse-framework.json) · human-readable [`proofhouse-framework.md`](proofhouse-framework.md)
|
|
170
|
+
<!-- supported-models:end -->
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Install and verify
|
|
175
|
+
|
|
176
|
+
One Python package, version 0.4.1, ships two console scripts:
|
|
177
|
+
|
|
178
|
+
| Command | What it is | Subcommands |
|
|
179
|
+
|---|---|---|
|
|
180
|
+
| `proofhouse-compiler` | The prompt workspace above, plus an offline compiler (requirements → IR → adapter artifact → evidence), the model-notes cache, the skill installer, and the packaged reference demo | `optimize` `models` `install-skill` `demo` `doctor` `validate` `inspect` `compile` `closed-loop` `adapters` |
|
|
181
|
+
| `proofhouse` | Eval harness: JSONL datasets, YAML rubrics, report skeletons | `validate` `report` `loadouts` `compile-loadout` `generate` |
|
|
182
|
+
|
|
183
|
+
Supported: the `optimize` case workflow, `models`, `install-skill`, `demo`, and `validate` / `compile` / `closed-loop`. The experimental commands are listed under [Experimental and prototype parts](#experimental-and-prototype-parts).
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
uv sync --extra test # package + pytest into .venv
|
|
187
|
+
uv run proofhouse-compiler doctor # doctor: success
|
|
188
|
+
uv run proofhouse-compiler closed-loop tests/compiler/fixtures/closed_loop_requirements_minimal.json --repair-budget 1
|
|
189
|
+
# closed-loop: PASS (structural)
|
|
190
|
+
uv run proofhouse validate --dataset evals/datasets/prompt_audit_cases.jsonl
|
|
191
|
+
# Dataset validation passed: ...
|
|
192
|
+
uv run pytest -q # all passed, 1 deselected (live tests are opt-in)
|
|
193
|
+
uv run proofhouse-compiler demo --quiet # reference workflow: OK
|
|
194
|
+
uv run python scripts/reference_workflow.py --quiet # same run via the script wrapper
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
CI runs the test suite on Linux, macOS and Windows with Python 3.11 to 3.14, runs the reference workflow against the built wheel, and runs `proofhouse-compiler demo` from that wheel outside the checkout. Everything above is offline: no network, no API key. Nothing here is a benchmark.
|
|
198
|
+
|
|
199
|
+
The compiler's `closed-loop` PASS is structural: the prompt compiles offline with the fake adapter and passes security gates, and its evidence lists what it did not measure. Its approved headless profiles are `structured_minimal_v0` and `structured_developer_v0`.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Experimental and prototype parts
|
|
204
|
+
|
|
205
|
+
These ship in the repository but are not the supported path. Treat them as previews.
|
|
206
|
+
|
|
207
|
+
| Part | Status | Network |
|
|
208
|
+
|---|---|---|
|
|
209
|
+
| `proofhouse-compiler execute-openai`: a fail-closed live OpenAI call that refuses to send unless every mandatory requirement is in the request; its cost ceiling is recorded, not enforced | experimental, opt-in | yes, only when opted in |
|
|
210
|
+
| `evaluate-product`, the requirements-contract commands, `route` / `assay` / `proof` | experimental | none |
|
|
211
|
+
| [`apps/proofhouse.jsx`](apps/proofhouse.jsx): a Claude artifact with a model picker, efficiency modes and a live compile loop; for an unknown model it web-researches, caches the result in artifact storage and labels it `researched` / `cached` / `fallback` | experimental | calls `api.anthropic.com` |
|
|
212
|
+
| The `hosted-*` and `missionrig-*` modules: experimental library slices, not a hosted service (their tenant label is not isolation) | experimental | none |
|
|
213
|
+
| `apps/dashboard/` | prototype | none |
|
|
214
|
+
|
|
215
|
+
The headless requirements compiler's maturity is still `PARTIAL`. Full map with versions and diagnostic codes: [docs/surfaces.md](docs/surfaces.md).
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Design rules
|
|
220
|
+
|
|
221
|
+
- Stay lightweight by default. Tighten only for safety, agentic execution, or missing context.
|
|
222
|
+
- Never invent repository or project facts.
|
|
223
|
+
- Use exact missing-context labels: `UNKNOWN`, `NOT SPECIFIED`, `NOT FOUND IN PROVIDED MATERIAL`.
|
|
224
|
+
- Keep cybersecurity and sensitive-data work defensive, authorized, and privacy-preserving.
|
|
225
|
+
- No private chain-of-thought dumps. Concise rationales only.
|
|
226
|
+
|
|
227
|
+
It was designed for coding agents, Custom GPTs, Cursor skills, and security-adjacent AI work, where inventing facts or skipping a safety boundary is not acceptable.
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Repository map
|
|
232
|
+
|
|
233
|
+
```text
|
|
234
|
+
proofhouse-framework.* Portable meta-optimizer spec (v1.3 model profiles)
|
|
235
|
+
skills/proofhouse/ Cursor / Claude Code skill bundle + artifact JSX
|
|
236
|
+
src/proofhouse/ Eval harness, headless compiler, optimize (cases, constraints, runs, checks, export)
|
|
237
|
+
examples/ Demo inputs, including reference-advisory/ for the reference workflow
|
|
238
|
+
scripts/ Generators (model surfaces, skill bundle, contracts) and reference_workflow.py
|
|
239
|
+
docs/ Scope, architecture, surfaces, evidence format, decisions, assurance statements
|
|
240
|
+
prompts/ Core prompt, modes, modules, templates, Custom GPT pack
|
|
241
|
+
evals/ JSONL datasets, YAML rubrics
|
|
242
|
+
apps/ Experimental artifact and dashboard prototypes
|
|
243
|
+
tests/ Test suite, contract schemas and fixtures
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Internal mission reports and review corpora are not published in this repository. Public decisions are summarized in [docs/decisions/](docs/decisions/), and each assurance statement in [docs/assurance/](docs/assurance/) lists the exact revision, commands, results and exclusions.
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Start here
|
|
251
|
+
|
|
252
|
+
- [Reference workflow](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/reference-workflow.md): one failed check to a verified fix, offline
|
|
253
|
+
- [Product scope](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/product-scope.md) · [Architecture](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/architecture.md) · [Surfaces and contracts](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/surfaces.md) · [Evidence format](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/evidence-format.md)
|
|
254
|
+
- [Decision records](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/decisions/) · [Assurance statements](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/assurance/) · [Troubleshooting](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/troubleshooting.md)
|
|
255
|
+
- [Quickstart](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/quickstart.md) · [Showcase](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/showcase.md) · [Custom GPT setup](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/custom-gpt-setup.md)
|
|
256
|
+
- [Changelog](https://github.com/KM-it-ops/Proofhouse/blob/main/CHANGELOG.md) · [Contributing](https://github.com/KM-it-ops/Proofhouse/blob/main/CONTRIBUTING.md) · [Security policy](https://github.com/KM-it-ops/Proofhouse/blob/main/SECURITY.md)
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
<sub>Custom GPT surface: <strong>PromptOps Architect powered by Proofhouse</strong> · MIT License</sub>
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Proofhouse
|
|
2
|
+
|
|
3
|
+
[](https://github.com/KM-it-ops/Proofhouse/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.python.org/)
|
|
5
|
+
[](proofhouse-framework.json)
|
|
6
|
+
[](#how-it-works)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
|
|
9
|
+
**A local workspace for revising prompts with evidence you can trace: every PASS names the exact prompt, outputs, checks and judgements it came from.**
|
|
10
|
+
|
|
11
|
+
I built Proofhouse because I kept rewriting the same prompt for different models and never had a good answer for which version was better, or whether a revision had quietly dropped a requirement. You give it an objective and a target model; it asks its clarifying questions in one batch and turns your answers into constraints that every later revision must keep. You record each prompt revision and the outputs a model actually produced, declare the checks that matter, and Proofhouse tells you which revision passes, which constraint lacks evidence, and what changed between revisions.
|
|
12
|
+
|
|
13
|
+
It runs on your machine with no API key. Proofhouse writes the prompts it needs as packets; you run them in the agent or model you already use and paste the results back. It is a local tool, not a hosted service, and I make no benchmark or quality claims for it.
|
|
14
|
+
|
|
15
|
+
[](https://github.com/KM-it-ops/Proofhouse/raw/main/docs/assets/proofhouse-demo.mp4)
|
|
16
|
+
|
|
17
|
+
*42-second demo of the standalone app (click to play). The terminal in `apps/proofhouse.jsx` types the Facebook objective, sets Grok 4.7, checks the loop, and compiles the prompt. The grid, particles, and cursor keep moving the whole time. Remotion draws it. Hyperframes runs the same timeline in `videos/readme-hype`.*
|
|
18
|
+
|
|
19
|
+
Portfolio: [km-it-ops.github.io](https://km-it-ops.github.io/)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Try it in two minutes
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
uv tool install proofhouse
|
|
27
|
+
proofhouse-compiler demo
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
That runs the [reference workflow](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/reference-workflow.md) end to end, offline, from files shipped in the package. It replays recorded outputs: a security-advisory summary whose first revision invents an exploitation claim and fails its checks, and whose second revision passes without losing a constraint. It does not call a model. On Windows, set `$env:PYTHONUTF8='1'` first for reliable console output.
|
|
31
|
+
|
|
32
|
+
With pip: `python -m pip install proofhouse`, then `proofhouse-compiler demo`.
|
|
33
|
+
|
|
34
|
+
From a clone, the same check is `uv run python scripts/reference_workflow.py` (or `python -m pip install -e ".[test]"` without [uv](https://docs.astral.sh/uv/)). The by-hand steps later on this page copy `examples/reference-advisory`, which is in the repository, not in the wheel.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## How it works
|
|
39
|
+
|
|
40
|
+
`proofhouse-compiler optimize` renders the framework's clarify / compile / self-heal prompts as packets you run in the agent or model of your choice, and checks what you paste back against the criteria you declare. It does not call a model and it does not rate quality.
|
|
41
|
+
|
|
42
|
+
These are the [reference workflow](docs/reference-workflow.md)'s steps, and they run as written. `pc` below is `proofhouse-compiler` (`uv run proofhouse-compiler` from a clone). Work in a scratch folder holding copies of the example inputs:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
mkdir -p build/try && cp examples/reference-advisory/* build/try && cd build/try
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**1. Start a case and answer one batch of questions.** Proofhouse writes a clarify packet, `advisory-case/01-clarify.md`. You run it in your own agent and save the answers as `advisory-case/answers.json` (for this example, copy `answers.json` there). Compile turns each answer into an accepted constraint (K1-K3) that every later revision receives.
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pc optimize new --case advisory-case --objective-file objective.txt --model "Claude Sonnet 5" --preset efficient
|
|
52
|
+
pc optimize compile --case advisory-case
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**2. Say how each constraint will be checked.** Checks can look at the prompt text or at what a model returned (`--target output`), and some can be a human judgement (`--manual`).
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pc optimize constraints add --case advisory-case --text "Cite the advisory section for each claim" # K4
|
|
59
|
+
pc optimize criteria add --case advisory-case --id AUD --must-contain "SOC analysts"
|
|
60
|
+
pc optimize criteria add --case advisory-case --id UNK --target output --must-contain UNKNOWN
|
|
61
|
+
pc optimize criteria add --case advisory-case --id NOGUESS --target output --must-not-contain "exploited in the wild"
|
|
62
|
+
pc optimize criteria add --case advisory-case --id LEN --target output --max-words 120
|
|
63
|
+
pc optimize criteria add --case advisory-case --id CITE --target output --regex "\(s\d\)"
|
|
64
|
+
pc optimize criteria add --case advisory-case --id ACC --target output --manual "Every claim matches the advisory"
|
|
65
|
+
pc optimize constraints link --case advisory-case --id K1 --criterion AUD
|
|
66
|
+
pc optimize constraints link --case advisory-case --id K2 --criterion UNK
|
|
67
|
+
pc optimize constraints link --case advisory-case --id K2 --criterion NOGUESS
|
|
68
|
+
pc optimize constraints link --case advisory-case --id K3 --criterion LEN
|
|
69
|
+
pc optimize constraints link --case advisory-case --id K4 --criterion CITE
|
|
70
|
+
pc optimize constraints link --case advisory-case --id K4 --criterion ACC
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**3. Record a revision and what it produced, judge the manual check, then check it.**
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
pc optimize record --case advisory-case --prompt-file prompt-v1.txt
|
|
77
|
+
pc optimize output add --case advisory-case --revision 1 --output-file output-v1.txt --input-id EC-2026-017 --input-file advisory.txt --model "Claude Sonnet 5" --source "pasted from host agent"
|
|
78
|
+
pc optimize verdict --case advisory-case --revision 1 --criterion ACC --run R1 --result fail --note "claims active exploitation; the advisory does not say that"
|
|
79
|
+
pc optimize check --case advisory-case # exit 3: v1 FAIL UNK NOGUESS CITE ACC fail
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**4. Revise without losing anything.** The revise packet carries your feedback, the original answers and every accepted constraint. Run it in your agent, save the new prompt, and record revision 2 the same way.
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
pc optimize revise --case advisory-case --feedback "It claimed active exploitation, which the advisory never states."
|
|
86
|
+
pc optimize record --case advisory-case --prompt-file prompt-v2.txt
|
|
87
|
+
pc optimize output add --case advisory-case --revision 2 --output-file output-v2.txt --input-id EC-2026-017 --input-file advisory.txt --model "Claude Sonnet 5" --source "pasted from host agent"
|
|
88
|
+
pc optimize verdict --case advisory-case --revision 2 --criterion ACC --run R2 --result pass
|
|
89
|
+
pc optimize check --case advisory-case # exit 0: v2 PASS, K1-K4 satisfied
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**5. Compare, report and hand it on.** `compare` shows what newly passes or regresses between revisions, `report` writes the evidence as Markdown, and `export` / `import` move a case to another workspace, refusing any file that does not match the bundle's manifest (the manifest is not signed).
|
|
93
|
+
|
|
94
|
+
### What a PASS proves, and what it does not
|
|
95
|
+
|
|
96
|
+
| A PASS from `optimize check` means | It does not mean |
|
|
97
|
+
|---|---|
|
|
98
|
+
| Every check you declared passed on this exact revision (and, for output checks, on the outputs you recorded) | That the prompt is good in general, or better than one you did not test |
|
|
99
|
+
| Every accepted constraint is linked to a check that passed | That a model will reproduce the recorded outputs |
|
|
100
|
+
| Each human verdict applies to the exact text and check definition you judged | That model notes are correct: shipped profiles cite no sources yet and are labeled `unverified` |
|
|
101
|
+
| Nothing was edited after it was recorded (digests are re-checked) | That the files are tamper-proof against someone who controls your machine |
|
|
102
|
+
|
|
103
|
+
Details: [docs/architecture.md](docs/architecture.md), [decision 0002](docs/decisions/0002-what-pass-means.md), [evidence format](docs/evidence-format.md).
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Two ways in
|
|
108
|
+
|
|
109
|
+
| Entry | Use it when | Status | Network |
|
|
110
|
+
|---|---|---|---|
|
|
111
|
+
| **Command line**: `proofhouse-compiler optimize` | You want the evidence trail above: constraints, recorded outputs, checks, compare, report | supported | none |
|
|
112
|
+
| **Cursor or Claude Code skill**: `proofhouse-compiler install-skill` asks which agent (Cursor, Claude Code, or another one you name with its skills folder); `--host cursor` or `--host claude` skips the question. Then say "Proofhouse" in a new chat or session | You want the same clarify → compile → self-heal loop as a conversation | supported entry point | the host agent's tools |
|
|
113
|
+
|
|
114
|
+
Proofhouse is two products in one repo, at different levels of maturity. The **PromptOps skill and framework (v1.3)**, the conversational meta-optimizer with current frontier model profiles, is the most mature part of the project. The headless compiler's maturity is listed under [Experimental and prototype parts](#experimental-and-prototype-parts).
|
|
115
|
+
|
|
116
|
+
Both entries use the same framework ([`proofhouse-framework.json`](proofhouse-framework.json)) and the same model notes. The framework also covers Efficient / Balanced / Thorough token presets, loops for recurring agents (trigger, body, exit, escalation), prompt audits with missing-context labels, and agent design (permission maps, tool boundaries, stop conditions). The skill is installed to `~/.cursor/skills/proofhouse` (or `~/.claude/skills/proofhouse` with `--host claude`) and the installer checks it (the bundle ships inside the package; `tests/test_skill_bundle.py` keeps it identical to `skills/proofhouse/`); without the console script, `python -m zipfile -e skills/proofhouse/proofhouse.skill ~/.cursor/skills` (or `~/.claude/skills`) does the same. The skill can research an unfamiliar model with the host agent's tools; the command line never goes online, and uses your own notes (`models remember`) or a generic profile labeled `fallback`.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Supported models (framework v1.3)
|
|
121
|
+
|
|
122
|
+
Built-in `modelNotes` cover prompting quirks, API ids, and cost and caching levers for each model:
|
|
123
|
+
|
|
124
|
+
<!-- supported-models:begin -->
|
|
125
|
+
| Tier | Models |
|
|
126
|
+
|---|---|
|
|
127
|
+
| **Anthropic** | Claude Fable 5.1 · Mythos 5.1 · Opus 5 · Sonnet 5 · Haiku 4.5 |
|
|
128
|
+
| **OpenAI** | GPT-5.6 Sol · Terra · Luna |
|
|
129
|
+
| **Google** | Gemini 3.8 Flash |
|
|
130
|
+
| **xAI** | Grok 4.6 |
|
|
131
|
+
| **Meta** | Muse Spark 1.3 |
|
|
132
|
+
| **Moonshot** | Kimi K3 |
|
|
133
|
+
| **Legacy** | GPT-5.5 · Gemini (generic) · Fable 5 · Mythos 5 · Opus 4.8 |
|
|
134
|
+
| **Other** | Skill and artifact: the host agent or the artifact web-researches the model and caches the paragraph. CLI (`proofhouse-compiler`): offline; `models remember` stores your own notes, otherwise the generic profile is used and labeled `fallback`. |
|
|
135
|
+
|
|
136
|
+
Profiles last reviewed 2026-09-03; a profile older than 90 days is flagged stale. None of the 18 profiles cites sources yet, so every profile is labeled unverified. They are prompting guidance, not vendor specifications. `proofhouse-compiler models list` shows per-model ids, aliases, and dates.
|
|
137
|
+
|
|
138
|
+
Full profiles: [`proofhouse-framework.json`](proofhouse-framework.json) · human-readable [`proofhouse-framework.md`](proofhouse-framework.md)
|
|
139
|
+
<!-- supported-models:end -->
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Install and verify
|
|
144
|
+
|
|
145
|
+
One Python package, version 0.4.1, ships two console scripts:
|
|
146
|
+
|
|
147
|
+
| Command | What it is | Subcommands |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| `proofhouse-compiler` | The prompt workspace above, plus an offline compiler (requirements → IR → adapter artifact → evidence), the model-notes cache, the skill installer, and the packaged reference demo | `optimize` `models` `install-skill` `demo` `doctor` `validate` `inspect` `compile` `closed-loop` `adapters` |
|
|
150
|
+
| `proofhouse` | Eval harness: JSONL datasets, YAML rubrics, report skeletons | `validate` `report` `loadouts` `compile-loadout` `generate` |
|
|
151
|
+
|
|
152
|
+
Supported: the `optimize` case workflow, `models`, `install-skill`, `demo`, and `validate` / `compile` / `closed-loop`. The experimental commands are listed under [Experimental and prototype parts](#experimental-and-prototype-parts).
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
uv sync --extra test # package + pytest into .venv
|
|
156
|
+
uv run proofhouse-compiler doctor # doctor: success
|
|
157
|
+
uv run proofhouse-compiler closed-loop tests/compiler/fixtures/closed_loop_requirements_minimal.json --repair-budget 1
|
|
158
|
+
# closed-loop: PASS (structural)
|
|
159
|
+
uv run proofhouse validate --dataset evals/datasets/prompt_audit_cases.jsonl
|
|
160
|
+
# Dataset validation passed: ...
|
|
161
|
+
uv run pytest -q # all passed, 1 deselected (live tests are opt-in)
|
|
162
|
+
uv run proofhouse-compiler demo --quiet # reference workflow: OK
|
|
163
|
+
uv run python scripts/reference_workflow.py --quiet # same run via the script wrapper
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
CI runs the test suite on Linux, macOS and Windows with Python 3.11 to 3.14, runs the reference workflow against the built wheel, and runs `proofhouse-compiler demo` from that wheel outside the checkout. Everything above is offline: no network, no API key. Nothing here is a benchmark.
|
|
167
|
+
|
|
168
|
+
The compiler's `closed-loop` PASS is structural: the prompt compiles offline with the fake adapter and passes security gates, and its evidence lists what it did not measure. Its approved headless profiles are `structured_minimal_v0` and `structured_developer_v0`.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Experimental and prototype parts
|
|
173
|
+
|
|
174
|
+
These ship in the repository but are not the supported path. Treat them as previews.
|
|
175
|
+
|
|
176
|
+
| Part | Status | Network |
|
|
177
|
+
|---|---|---|
|
|
178
|
+
| `proofhouse-compiler execute-openai`: a fail-closed live OpenAI call that refuses to send unless every mandatory requirement is in the request; its cost ceiling is recorded, not enforced | experimental, opt-in | yes, only when opted in |
|
|
179
|
+
| `evaluate-product`, the requirements-contract commands, `route` / `assay` / `proof` | experimental | none |
|
|
180
|
+
| [`apps/proofhouse.jsx`](apps/proofhouse.jsx): a Claude artifact with a model picker, efficiency modes and a live compile loop; for an unknown model it web-researches, caches the result in artifact storage and labels it `researched` / `cached` / `fallback` | experimental | calls `api.anthropic.com` |
|
|
181
|
+
| The `hosted-*` and `missionrig-*` modules: experimental library slices, not a hosted service (their tenant label is not isolation) | experimental | none |
|
|
182
|
+
| `apps/dashboard/` | prototype | none |
|
|
183
|
+
|
|
184
|
+
The headless requirements compiler's maturity is still `PARTIAL`. Full map with versions and diagnostic codes: [docs/surfaces.md](docs/surfaces.md).
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Design rules
|
|
189
|
+
|
|
190
|
+
- Stay lightweight by default. Tighten only for safety, agentic execution, or missing context.
|
|
191
|
+
- Never invent repository or project facts.
|
|
192
|
+
- Use exact missing-context labels: `UNKNOWN`, `NOT SPECIFIED`, `NOT FOUND IN PROVIDED MATERIAL`.
|
|
193
|
+
- Keep cybersecurity and sensitive-data work defensive, authorized, and privacy-preserving.
|
|
194
|
+
- No private chain-of-thought dumps. Concise rationales only.
|
|
195
|
+
|
|
196
|
+
It was designed for coding agents, Custom GPTs, Cursor skills, and security-adjacent AI work, where inventing facts or skipping a safety boundary is not acceptable.
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Repository map
|
|
201
|
+
|
|
202
|
+
```text
|
|
203
|
+
proofhouse-framework.* Portable meta-optimizer spec (v1.3 model profiles)
|
|
204
|
+
skills/proofhouse/ Cursor / Claude Code skill bundle + artifact JSX
|
|
205
|
+
src/proofhouse/ Eval harness, headless compiler, optimize (cases, constraints, runs, checks, export)
|
|
206
|
+
examples/ Demo inputs, including reference-advisory/ for the reference workflow
|
|
207
|
+
scripts/ Generators (model surfaces, skill bundle, contracts) and reference_workflow.py
|
|
208
|
+
docs/ Scope, architecture, surfaces, evidence format, decisions, assurance statements
|
|
209
|
+
prompts/ Core prompt, modes, modules, templates, Custom GPT pack
|
|
210
|
+
evals/ JSONL datasets, YAML rubrics
|
|
211
|
+
apps/ Experimental artifact and dashboard prototypes
|
|
212
|
+
tests/ Test suite, contract schemas and fixtures
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Internal mission reports and review corpora are not published in this repository. Public decisions are summarized in [docs/decisions/](docs/decisions/), and each assurance statement in [docs/assurance/](docs/assurance/) lists the exact revision, commands, results and exclusions.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Start here
|
|
220
|
+
|
|
221
|
+
- [Reference workflow](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/reference-workflow.md): one failed check to a verified fix, offline
|
|
222
|
+
- [Product scope](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/product-scope.md) · [Architecture](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/architecture.md) · [Surfaces and contracts](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/surfaces.md) · [Evidence format](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/evidence-format.md)
|
|
223
|
+
- [Decision records](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/decisions/) · [Assurance statements](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/assurance/) · [Troubleshooting](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/troubleshooting.md)
|
|
224
|
+
- [Quickstart](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/quickstart.md) · [Showcase](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/showcase.md) · [Custom GPT setup](https://github.com/KM-it-ops/Proofhouse/blob/main/docs/custom-gpt-setup.md)
|
|
225
|
+
- [Changelog](https://github.com/KM-it-ops/Proofhouse/blob/main/CHANGELOG.md) · [Contributing](https://github.com/KM-it-ops/Proofhouse/blob/main/CONTRIBUTING.md) · [Security policy](https://github.com/KM-it-ops/Proofhouse/blob/main/SECURITY.md)
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
<sub>Custom GPT surface: <strong>PromptOps Architect powered by Proofhouse</strong> · MIT License</sub>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "proofhouse"
|
|
7
|
+
version = "0.4.1"
|
|
8
|
+
description = "Prompt operations framework for prompt architecture, audits, rewrites, and evals."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
authors = [{ name = "Proofhouse Maintainers" }]
|
|
12
|
+
license = "MIT"
|
|
13
|
+
license-files = ["LICENSE"]
|
|
14
|
+
keywords = ["prompts", "prompt-engineering", "evals", "agents"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 4 - Beta",
|
|
17
|
+
"Environment :: Console",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"Operating System :: OS Independent",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.11",
|
|
22
|
+
"Programming Language :: Python :: 3.12",
|
|
23
|
+
"Programming Language :: Python :: 3.13",
|
|
24
|
+
"Programming Language :: Python :: 3.14",
|
|
25
|
+
]
|
|
26
|
+
dependencies = ["jsonschema>=4.18", "rfc8785==0.1.4"]
|
|
27
|
+
|
|
28
|
+
[project.optional-dependencies]
|
|
29
|
+
live = ["httpx>=0.27"]
|
|
30
|
+
# Test runner only. Not a runtime dependency; runtime deps stay jsonschema + rfc8785.
|
|
31
|
+
test = ["pytest>=8"]
|
|
32
|
+
|
|
33
|
+
[project.urls]
|
|
34
|
+
Homepage = "https://github.com/KM-it-ops/Proofhouse"
|
|
35
|
+
Repository = "https://github.com/KM-it-ops/Proofhouse"
|
|
36
|
+
Issues = "https://github.com/KM-it-ops/Proofhouse/issues"
|
|
37
|
+
Changelog = "https://github.com/KM-it-ops/Proofhouse/blob/main/CHANGELOG.md"
|
|
38
|
+
|
|
39
|
+
[project.scripts]
|
|
40
|
+
proofhouse = "proofhouse.cli:main"
|
|
41
|
+
proofhouse-compiler = "proofhouse.compiler.cli_compiler:main"
|
|
42
|
+
|
|
43
|
+
[tool.pytest.ini_options]
|
|
44
|
+
pythonpath = ["src"]
|
|
45
|
+
testpaths = ["tests"]
|
|
46
|
+
markers = ["live: real or optional live-path tests; not collected by default"]
|
|
47
|
+
addopts = "-m \"not live\""
|
|
48
|
+
|
|
49
|
+
[tool.setuptools.packages.find]
|
|
50
|
+
where = ["src"]
|
|
51
|
+
|
|
52
|
+
[tool.setuptools.package-data]
|
|
53
|
+
"proofhouse.compiler" = ["schemas/*.json"]
|
|
54
|
+
"proofhouse.optimize" = ["data/*", "data/reference-advisory/*"]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"""Proofhouse prompt-operations framework."""
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
# One source of truth: the installed distribution's version (pyproject.toml).
|
|
7
|
+
__version__ = version("proofhouse")
|
|
8
|
+
except PackageNotFoundError: # running from a source tree that was never installed
|
|
9
|
+
__version__ = "0+unknown"
|