ravenclaw-security 0.16.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.
- ravenclaw_security-0.16.1/LICENSE +21 -0
- ravenclaw_security-0.16.1/MANIFEST.in +8 -0
- ravenclaw_security-0.16.1/PKG-INFO +238 -0
- ravenclaw_security-0.16.1/README.md +201 -0
- ravenclaw_security-0.16.1/pyproject.toml +56 -0
- ravenclaw_security-0.16.1/ravenclaw/__init__.py +5 -0
- ravenclaw_security-0.16.1/ravenclaw/openclaw_readiness.py +303 -0
- ravenclaw_security-0.16.1/ravenclaw/security_profile.py +163 -0
- ravenclaw_security-0.16.1/ravenclaw_security.egg-info/PKG-INFO +238 -0
- ravenclaw_security-0.16.1/ravenclaw_security.egg-info/SOURCES.txt +12 -0
- ravenclaw_security-0.16.1/ravenclaw_security.egg-info/dependency_links.txt +1 -0
- ravenclaw_security-0.16.1/ravenclaw_security.egg-info/requires.txt +13 -0
- ravenclaw_security-0.16.1/ravenclaw_security.egg-info/top_level.txt +1 -0
- ravenclaw_security-0.16.1/setup.cfg +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ravenclaw contributors
|
|
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,238 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ravenclaw-security
|
|
3
|
+
Version: 0.16.1
|
|
4
|
+
Summary: Governance-first security research runtime with policy-gated execution and public-safe proof artifacts
|
|
5
|
+
Author: Krzysztof Probola
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/rozmiarD/ravenclaw
|
|
8
|
+
Project-URL: Repository, https://github.com/rozmiarD/ravenclaw
|
|
9
|
+
Project-URL: Issues, https://github.com/rozmiarD/ravenclaw/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/rozmiarD/ravenclaw/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: Documentation, https://github.com/rozmiarD/ravenclaw#readme
|
|
12
|
+
Keywords: security,governance,runtime,contracts,dry-run,evidence
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Information Technology
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Security
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: PyYAML<7,>=6
|
|
26
|
+
Requires-Dist: sclite-core<0.6,>=0.5.1
|
|
27
|
+
Requires-Dist: govengine<0.8,>=0.7.0
|
|
28
|
+
Provides-Extra: logdash
|
|
29
|
+
Requires-Dist: Flask<4,>=3; extra == "logdash"
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: pytest<9,>=8; extra == "dev"
|
|
32
|
+
Requires-Dist: Flask<4,>=3; extra == "dev"
|
|
33
|
+
Requires-Dist: PyYAML<7,>=6; extra == "dev"
|
|
34
|
+
Requires-Dist: build<2,>=1; extra == "dev"
|
|
35
|
+
Requires-Dist: twine<7,>=5; extra == "dev"
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
|
|
38
|
+
# RAVENCLAW
|
|
39
|
+
|
|
40
|
+
[](https://github.com/rozmiarD/ravenclaw/actions/workflows/pytest.yml)
|
|
41
|
+
[](pyproject.toml)
|
|
42
|
+
[](pyproject.toml)
|
|
43
|
+
[](https://github.com/rozmiarD/GovEngine)
|
|
44
|
+
[](https://github.com/rozmiarD/SCLite)
|
|
45
|
+
[](LICENSE)
|
|
46
|
+
|
|
47
|
+
**RAVENCLAW is a governance-first security research runtime for bounded, auditable security operations.**
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
It is built around a simple idea:
|
|
51
|
+
advanced autonomy is only useful when it remains bounded, observable, and accountable.
|
|
52
|
+
|
|
53
|
+
## What Ravenclaw does
|
|
54
|
+
|
|
55
|
+
Ravenclaw is a multi-layer runtime for running security workflows under explicit governance.
|
|
56
|
+
It combines:
|
|
57
|
+
- deterministic planning and runtime contracts
|
|
58
|
+
- policy and approval gates before execution
|
|
59
|
+
- constrained execution through a dedicated execution engine
|
|
60
|
+
- artifact analysis and evidence-oriented qualification
|
|
61
|
+
- operator-facing visibility through Logdash
|
|
62
|
+
|
|
63
|
+
The goal is not maximum automation.
|
|
64
|
+
The goal is reliable autonomy under governance.
|
|
65
|
+
|
|
66
|
+
The public repository should be read as a **public core** of that system:
|
|
67
|
+
a publishable runtime/control-plane artifact with explicit governance and validation surfaces, not a claim that every private operator integration is bundled here.
|
|
68
|
+
|
|
69
|
+
## What makes it different
|
|
70
|
+
|
|
71
|
+
Ravenclaw is not an unconstrained offensive automation system.
|
|
72
|
+
Its core design claim is narrower:
|
|
73
|
+
- planning, authorization, execution, and interpretation are separated
|
|
74
|
+
- policy is enforced in runtime paths, not only described in prompts or docs
|
|
75
|
+
- operator approval remains explicit for sensitive actions
|
|
76
|
+
- evidence quality and replayability matter as much as action generation
|
|
77
|
+
|
|
78
|
+
In short, Ravenclaw optimizes for useful actions that stay within policy, scope, and review boundaries.
|
|
79
|
+
|
|
80
|
+
Ravenclaw now consumes **GovEngine** for reusable governed-runtime kernel mechanics and **SCLite** for contract lifecycle artifacts.
|
|
81
|
+
|
|
82
|
+
The current reusable direction is a small **Security Contract Layer** backed by Ravenclaw Runtime artifacts: scope binding, policy decisions, prepared/approved execution specs, execution receipts, evidence summaries, and runtime truth. The reusable contract core is now the standalone `sclite` package/repo, while Ravenclaw is being shaped as the reference security-research runtime/profile over GovEngine + SCLite. OpenClaw, MCP, and A2A are potential later carriers for these contracts, not new protocols Ravenclaw is trying to own.
|
|
83
|
+
|
|
84
|
+
The first PyPI package line is `ravenclaw-security==0.16.1`. It exposes the public
|
|
85
|
+
Ravenclaw security-profile and OpenClaw readiness contract helpers. The full
|
|
86
|
+
runtime, demo, Logdash, and validation surfaces remain source/reference
|
|
87
|
+
repository workflows in this release.
|
|
88
|
+
|
|
89
|
+
## Safe quickstart
|
|
90
|
+
|
|
91
|
+
The current official public-safe path is local and dry-run oriented.
|
|
92
|
+
|
|
93
|
+
Shortest reviewer path:
|
|
94
|
+
1. `INSTALL.md`
|
|
95
|
+
2. `DEMO.md`
|
|
96
|
+
3. `REVIEWER_VALIDATION_GUIDE.md`
|
|
97
|
+
4. `QUALITY_SIGNALS.md`
|
|
98
|
+
5. `PUBLIC_STATUS.md`
|
|
99
|
+
|
|
100
|
+
Broader navigation lives in `DOCS_MAP.md`; architecture depth starts with `ARCHITECTURE_OVERVIEW.md`.
|
|
101
|
+
|
|
102
|
+
This path is intentionally narrow and honest.
|
|
103
|
+
It shows the governed flow with a small one-command demo entrypoint (`bin/demo`), a shared bootstrap path (`scripts/bootstrap_public_demo.sh`), and an explicit `RAVENCLAW_MODE=demo` delivery profile, without pretending the repo already has a polished one-command public deployment story.
|
|
104
|
+
|
|
105
|
+
## Architecture at a glance
|
|
106
|
+
|
|
107
|
+
High-level governed flow:
|
|
108
|
+
|
|
109
|
+
`scope/input -> planner -> policy gate / auditor -> approved execution spec -> execution engine -> analysis -> operator visibility`
|
|
110
|
+
|
|
111
|
+
Main runtime layers:
|
|
112
|
+
- **Planner**: turns scope and operator input into structured campaign/runtime intent
|
|
113
|
+
- **Policy gate / Auditor**: enforces scope, tool, auth, and aggression rules before execution
|
|
114
|
+
- **Execution engine**: the only layer allowed to build and run final commands
|
|
115
|
+
- **Analysis / qualification**: turns raw artifacts into bounded findings and summaries
|
|
116
|
+
- **Logdash**: operator-facing control plane for visibility, control, and state truth
|
|
117
|
+
|
|
118
|
+
See `ARCHITECTURE_OVERVIEW.md` for the short version and `ARCHITECTURE.md` for the deeper map.
|
|
119
|
+
|
|
120
|
+
## Public maturity and status
|
|
121
|
+
|
|
122
|
+
Ravenclaw is not a flat-maturity repository.
|
|
123
|
+
Some parts are stable enough to be treated as strong public reference surfaces, while others remain experimental or local/internal.
|
|
124
|
+
|
|
125
|
+
Use `PUBLIC_STATUS.md` as the canonical public maturity guide.
|
|
126
|
+
For public proof and trust surfaces, use `VALIDATION.md`, `QUALITY_SIGNALS.md`, and `references/public-safe-proof-walkthrough.md`.
|
|
127
|
+
For the public-core/private-overlay split, read `references/public-core-private-overlay-boundary.md`.
|
|
128
|
+
For trusted-core authority boundaries, failure modes, and non-guarantees, read `THREAT_MODEL.md`.
|
|
129
|
+
For the emerging contract layer, read `SECURITY_CONTRACT_LAYER.md` and `references/approved-execution-spec-v0.1.md`.
|
|
130
|
+
For Logdash operator-facing control/recovery semantics, see `references/logdash-operator-truth-contracts.md`.
|
|
131
|
+
|
|
132
|
+
## Install and run posture
|
|
133
|
+
|
|
134
|
+
Fastest public-safe start:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
./scripts/bootstrap_public_demo.sh demo
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Reusable public demo bundle:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
./scripts/bootstrap_public_demo.sh bundle
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Reviewer-facing package-chain scenario:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
./scripts/bootstrap_public_demo.sh scenario
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
That scenario generates a local dry-run summary tying Ravenclaw demo artifacts to the GovEngine `security_profile` boundary and SCLite lifecycle-chain verification. In demo mode, Ravenclaw also records a deterministic GovEngine signing/trust-port example on the execution ticket, binding the ticket evidence to the execution-contract digest without claiming PKI, CA, KMS, key-store, or production identity ownership.
|
|
153
|
+
|
|
154
|
+
For containerized public-demo bring-up, see `.devcontainer/` and `compose.demo.yaml`.
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
Today, the repo is strongest as:
|
|
158
|
+
- a governance-first runtime architecture
|
|
159
|
+
- a research platform with real control and policy surfaces
|
|
160
|
+
- a codebase that can be inspected seriously
|
|
161
|
+
|
|
162
|
+
It now has an official public-safe local dry-run path, but it is not yet in its final lowest-friction form.
|
|
163
|
+
That remaining gap is real and still an active priority.
|
|
164
|
+
|
|
165
|
+
## Who this is for
|
|
166
|
+
|
|
167
|
+
Ravenclaw is best suited to technically serious readers who care about:
|
|
168
|
+
- governance-first security automation
|
|
169
|
+
- policy-gated execution
|
|
170
|
+
- operator-visible control and recovery
|
|
171
|
+
- contract-oriented runtime design
|
|
172
|
+
- evidence and replayability
|
|
173
|
+
|
|
174
|
+
If you want a clearer fit/non-fit guide, read `AUDIENCE.md`.
|
|
175
|
+
|
|
176
|
+
## Limits and non-goals
|
|
177
|
+
|
|
178
|
+
Ravenclaw is **not**:
|
|
179
|
+
- an unconstrained offensive automation platform
|
|
180
|
+
- an opaque autonomous attacker
|
|
181
|
+
- a replacement for operator judgment
|
|
182
|
+
- a guarantee of security outcomes
|
|
183
|
+
- a polished consumer product or hosted service
|
|
184
|
+
- a beginner-first security starter kit
|
|
185
|
+
|
|
186
|
+
It is intended for authorized security research and controlled environments.
|
|
187
|
+
Its value depends on bounded behavior, explicit governance, and operator visibility.
|
|
188
|
+
|
|
189
|
+
## Why this project exists
|
|
190
|
+
|
|
191
|
+
Many autonomous security systems have a hard tradeoff:
|
|
192
|
+
- rigid systems can be safe but not useful enough;
|
|
193
|
+
- unconstrained systems can act quickly but are hard to trust.
|
|
194
|
+
|
|
195
|
+
Ravenclaw separates proposal, approval, execution, and review so adaptive parts can help without owning final authority.
|
|
196
|
+
|
|
197
|
+
For the short public thesis, read `WHY_RAVENCLAW.md`.
|
|
198
|
+
|
|
199
|
+
## Repository guide
|
|
200
|
+
|
|
201
|
+
Main areas:
|
|
202
|
+
- `engine/` - planning, runtime orchestration, policy, execution, qualification, evaluation
|
|
203
|
+
- `logdash/` - operator-facing dashboard and control plane
|
|
204
|
+
- `tests/` and `engine/tests/` - regression and contract coverage
|
|
205
|
+
- `references/` - short reference docs for important contracts and boundaries
|
|
206
|
+
- `implementation-plans/` - bounded plans for meaningful repo/runtime improvement waves
|
|
207
|
+
|
|
208
|
+
## Release and public-release framing
|
|
209
|
+
|
|
210
|
+
Version milestones are tracked in `VERSION_ROADMAP.md`.
|
|
211
|
+
High-level open-source/public-release direction is tracked in `OPEN_SOURCE_1_0_PLAN.md`.
|
|
212
|
+
|
|
213
|
+
Current public truth:
|
|
214
|
+
- the technical core has real governance, contract, and validation surfaces
|
|
215
|
+
- the public repo is best understood as a governance-first public core, not a full private operator environment
|
|
216
|
+
- the public repo shape is improving, but is still being refined
|
|
217
|
+
- public clarity, demo usability, and proof surfaces are better than before, but remain active work
|
|
218
|
+
|
|
219
|
+
## Documentation map
|
|
220
|
+
|
|
221
|
+
For intent-based navigation, use `DOCS_MAP.md`.
|
|
222
|
+
For final publication workflow, use `PUBLISHING.md`.
|
|
223
|
+
|
|
224
|
+
## Deeper reading
|
|
225
|
+
|
|
226
|
+
If you want more depth, read in this order:
|
|
227
|
+
1. `PUBLIC_STATUS.md`
|
|
228
|
+
2. `AUDIENCE.md`
|
|
229
|
+
3. `QUALITY_SIGNALS.md`
|
|
230
|
+
4. `VALIDATION.md`
|
|
231
|
+
5. `DOCS_MAP.md`
|
|
232
|
+
6. `ARCHITECTURE_OVERVIEW.md`
|
|
233
|
+
7. `WHY_RAVENCLAW.md`
|
|
234
|
+
8. `ARCHITECTURE.md`
|
|
235
|
+
9. `STATE_FILES.md`
|
|
236
|
+
10. `OPEN_SOURCE_1_0_PLAN.md`
|
|
237
|
+
|
|
238
|
+
Ravenclaw should be understood as intelligence under governance: adaptive enough to be useful, bounded enough to remain inspectable and trustworthy.
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# RAVENCLAW
|
|
2
|
+
|
|
3
|
+
[](https://github.com/rozmiarD/ravenclaw/actions/workflows/pytest.yml)
|
|
4
|
+
[](pyproject.toml)
|
|
5
|
+
[](pyproject.toml)
|
|
6
|
+
[](https://github.com/rozmiarD/GovEngine)
|
|
7
|
+
[](https://github.com/rozmiarD/SCLite)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
10
|
+
**RAVENCLAW is a governance-first security research runtime for bounded, auditable security operations.**
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
It is built around a simple idea:
|
|
14
|
+
advanced autonomy is only useful when it remains bounded, observable, and accountable.
|
|
15
|
+
|
|
16
|
+
## What Ravenclaw does
|
|
17
|
+
|
|
18
|
+
Ravenclaw is a multi-layer runtime for running security workflows under explicit governance.
|
|
19
|
+
It combines:
|
|
20
|
+
- deterministic planning and runtime contracts
|
|
21
|
+
- policy and approval gates before execution
|
|
22
|
+
- constrained execution through a dedicated execution engine
|
|
23
|
+
- artifact analysis and evidence-oriented qualification
|
|
24
|
+
- operator-facing visibility through Logdash
|
|
25
|
+
|
|
26
|
+
The goal is not maximum automation.
|
|
27
|
+
The goal is reliable autonomy under governance.
|
|
28
|
+
|
|
29
|
+
The public repository should be read as a **public core** of that system:
|
|
30
|
+
a publishable runtime/control-plane artifact with explicit governance and validation surfaces, not a claim that every private operator integration is bundled here.
|
|
31
|
+
|
|
32
|
+
## What makes it different
|
|
33
|
+
|
|
34
|
+
Ravenclaw is not an unconstrained offensive automation system.
|
|
35
|
+
Its core design claim is narrower:
|
|
36
|
+
- planning, authorization, execution, and interpretation are separated
|
|
37
|
+
- policy is enforced in runtime paths, not only described in prompts or docs
|
|
38
|
+
- operator approval remains explicit for sensitive actions
|
|
39
|
+
- evidence quality and replayability matter as much as action generation
|
|
40
|
+
|
|
41
|
+
In short, Ravenclaw optimizes for useful actions that stay within policy, scope, and review boundaries.
|
|
42
|
+
|
|
43
|
+
Ravenclaw now consumes **GovEngine** for reusable governed-runtime kernel mechanics and **SCLite** for contract lifecycle artifacts.
|
|
44
|
+
|
|
45
|
+
The current reusable direction is a small **Security Contract Layer** backed by Ravenclaw Runtime artifacts: scope binding, policy decisions, prepared/approved execution specs, execution receipts, evidence summaries, and runtime truth. The reusable contract core is now the standalone `sclite` package/repo, while Ravenclaw is being shaped as the reference security-research runtime/profile over GovEngine + SCLite. OpenClaw, MCP, and A2A are potential later carriers for these contracts, not new protocols Ravenclaw is trying to own.
|
|
46
|
+
|
|
47
|
+
The first PyPI package line is `ravenclaw-security==0.16.1`. It exposes the public
|
|
48
|
+
Ravenclaw security-profile and OpenClaw readiness contract helpers. The full
|
|
49
|
+
runtime, demo, Logdash, and validation surfaces remain source/reference
|
|
50
|
+
repository workflows in this release.
|
|
51
|
+
|
|
52
|
+
## Safe quickstart
|
|
53
|
+
|
|
54
|
+
The current official public-safe path is local and dry-run oriented.
|
|
55
|
+
|
|
56
|
+
Shortest reviewer path:
|
|
57
|
+
1. `INSTALL.md`
|
|
58
|
+
2. `DEMO.md`
|
|
59
|
+
3. `REVIEWER_VALIDATION_GUIDE.md`
|
|
60
|
+
4. `QUALITY_SIGNALS.md`
|
|
61
|
+
5. `PUBLIC_STATUS.md`
|
|
62
|
+
|
|
63
|
+
Broader navigation lives in `DOCS_MAP.md`; architecture depth starts with `ARCHITECTURE_OVERVIEW.md`.
|
|
64
|
+
|
|
65
|
+
This path is intentionally narrow and honest.
|
|
66
|
+
It shows the governed flow with a small one-command demo entrypoint (`bin/demo`), a shared bootstrap path (`scripts/bootstrap_public_demo.sh`), and an explicit `RAVENCLAW_MODE=demo` delivery profile, without pretending the repo already has a polished one-command public deployment story.
|
|
67
|
+
|
|
68
|
+
## Architecture at a glance
|
|
69
|
+
|
|
70
|
+
High-level governed flow:
|
|
71
|
+
|
|
72
|
+
`scope/input -> planner -> policy gate / auditor -> approved execution spec -> execution engine -> analysis -> operator visibility`
|
|
73
|
+
|
|
74
|
+
Main runtime layers:
|
|
75
|
+
- **Planner**: turns scope and operator input into structured campaign/runtime intent
|
|
76
|
+
- **Policy gate / Auditor**: enforces scope, tool, auth, and aggression rules before execution
|
|
77
|
+
- **Execution engine**: the only layer allowed to build and run final commands
|
|
78
|
+
- **Analysis / qualification**: turns raw artifacts into bounded findings and summaries
|
|
79
|
+
- **Logdash**: operator-facing control plane for visibility, control, and state truth
|
|
80
|
+
|
|
81
|
+
See `ARCHITECTURE_OVERVIEW.md` for the short version and `ARCHITECTURE.md` for the deeper map.
|
|
82
|
+
|
|
83
|
+
## Public maturity and status
|
|
84
|
+
|
|
85
|
+
Ravenclaw is not a flat-maturity repository.
|
|
86
|
+
Some parts are stable enough to be treated as strong public reference surfaces, while others remain experimental or local/internal.
|
|
87
|
+
|
|
88
|
+
Use `PUBLIC_STATUS.md` as the canonical public maturity guide.
|
|
89
|
+
For public proof and trust surfaces, use `VALIDATION.md`, `QUALITY_SIGNALS.md`, and `references/public-safe-proof-walkthrough.md`.
|
|
90
|
+
For the public-core/private-overlay split, read `references/public-core-private-overlay-boundary.md`.
|
|
91
|
+
For trusted-core authority boundaries, failure modes, and non-guarantees, read `THREAT_MODEL.md`.
|
|
92
|
+
For the emerging contract layer, read `SECURITY_CONTRACT_LAYER.md` and `references/approved-execution-spec-v0.1.md`.
|
|
93
|
+
For Logdash operator-facing control/recovery semantics, see `references/logdash-operator-truth-contracts.md`.
|
|
94
|
+
|
|
95
|
+
## Install and run posture
|
|
96
|
+
|
|
97
|
+
Fastest public-safe start:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
./scripts/bootstrap_public_demo.sh demo
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Reusable public demo bundle:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
./scripts/bootstrap_public_demo.sh bundle
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Reviewer-facing package-chain scenario:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
./scripts/bootstrap_public_demo.sh scenario
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
That scenario generates a local dry-run summary tying Ravenclaw demo artifacts to the GovEngine `security_profile` boundary and SCLite lifecycle-chain verification. In demo mode, Ravenclaw also records a deterministic GovEngine signing/trust-port example on the execution ticket, binding the ticket evidence to the execution-contract digest without claiming PKI, CA, KMS, key-store, or production identity ownership.
|
|
116
|
+
|
|
117
|
+
For containerized public-demo bring-up, see `.devcontainer/` and `compose.demo.yaml`.
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
Today, the repo is strongest as:
|
|
121
|
+
- a governance-first runtime architecture
|
|
122
|
+
- a research platform with real control and policy surfaces
|
|
123
|
+
- a codebase that can be inspected seriously
|
|
124
|
+
|
|
125
|
+
It now has an official public-safe local dry-run path, but it is not yet in its final lowest-friction form.
|
|
126
|
+
That remaining gap is real and still an active priority.
|
|
127
|
+
|
|
128
|
+
## Who this is for
|
|
129
|
+
|
|
130
|
+
Ravenclaw is best suited to technically serious readers who care about:
|
|
131
|
+
- governance-first security automation
|
|
132
|
+
- policy-gated execution
|
|
133
|
+
- operator-visible control and recovery
|
|
134
|
+
- contract-oriented runtime design
|
|
135
|
+
- evidence and replayability
|
|
136
|
+
|
|
137
|
+
If you want a clearer fit/non-fit guide, read `AUDIENCE.md`.
|
|
138
|
+
|
|
139
|
+
## Limits and non-goals
|
|
140
|
+
|
|
141
|
+
Ravenclaw is **not**:
|
|
142
|
+
- an unconstrained offensive automation platform
|
|
143
|
+
- an opaque autonomous attacker
|
|
144
|
+
- a replacement for operator judgment
|
|
145
|
+
- a guarantee of security outcomes
|
|
146
|
+
- a polished consumer product or hosted service
|
|
147
|
+
- a beginner-first security starter kit
|
|
148
|
+
|
|
149
|
+
It is intended for authorized security research and controlled environments.
|
|
150
|
+
Its value depends on bounded behavior, explicit governance, and operator visibility.
|
|
151
|
+
|
|
152
|
+
## Why this project exists
|
|
153
|
+
|
|
154
|
+
Many autonomous security systems have a hard tradeoff:
|
|
155
|
+
- rigid systems can be safe but not useful enough;
|
|
156
|
+
- unconstrained systems can act quickly but are hard to trust.
|
|
157
|
+
|
|
158
|
+
Ravenclaw separates proposal, approval, execution, and review so adaptive parts can help without owning final authority.
|
|
159
|
+
|
|
160
|
+
For the short public thesis, read `WHY_RAVENCLAW.md`.
|
|
161
|
+
|
|
162
|
+
## Repository guide
|
|
163
|
+
|
|
164
|
+
Main areas:
|
|
165
|
+
- `engine/` - planning, runtime orchestration, policy, execution, qualification, evaluation
|
|
166
|
+
- `logdash/` - operator-facing dashboard and control plane
|
|
167
|
+
- `tests/` and `engine/tests/` - regression and contract coverage
|
|
168
|
+
- `references/` - short reference docs for important contracts and boundaries
|
|
169
|
+
- `implementation-plans/` - bounded plans for meaningful repo/runtime improvement waves
|
|
170
|
+
|
|
171
|
+
## Release and public-release framing
|
|
172
|
+
|
|
173
|
+
Version milestones are tracked in `VERSION_ROADMAP.md`.
|
|
174
|
+
High-level open-source/public-release direction is tracked in `OPEN_SOURCE_1_0_PLAN.md`.
|
|
175
|
+
|
|
176
|
+
Current public truth:
|
|
177
|
+
- the technical core has real governance, contract, and validation surfaces
|
|
178
|
+
- the public repo is best understood as a governance-first public core, not a full private operator environment
|
|
179
|
+
- the public repo shape is improving, but is still being refined
|
|
180
|
+
- public clarity, demo usability, and proof surfaces are better than before, but remain active work
|
|
181
|
+
|
|
182
|
+
## Documentation map
|
|
183
|
+
|
|
184
|
+
For intent-based navigation, use `DOCS_MAP.md`.
|
|
185
|
+
For final publication workflow, use `PUBLISHING.md`.
|
|
186
|
+
|
|
187
|
+
## Deeper reading
|
|
188
|
+
|
|
189
|
+
If you want more depth, read in this order:
|
|
190
|
+
1. `PUBLIC_STATUS.md`
|
|
191
|
+
2. `AUDIENCE.md`
|
|
192
|
+
3. `QUALITY_SIGNALS.md`
|
|
193
|
+
4. `VALIDATION.md`
|
|
194
|
+
5. `DOCS_MAP.md`
|
|
195
|
+
6. `ARCHITECTURE_OVERVIEW.md`
|
|
196
|
+
7. `WHY_RAVENCLAW.md`
|
|
197
|
+
8. `ARCHITECTURE.md`
|
|
198
|
+
9. `STATE_FILES.md`
|
|
199
|
+
10. `OPEN_SOURCE_1_0_PLAN.md`
|
|
200
|
+
|
|
201
|
+
Ravenclaw should be understood as intelligence under governance: adaptive enough to be useful, bounded enough to remain inspectable and trustworthy.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "ravenclaw-security"
|
|
7
|
+
version = "0.16.1"
|
|
8
|
+
description = "Governance-first security research runtime with policy-gated execution and public-safe proof artifacts"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [{ name = "Krzysztof Probola" }]
|
|
13
|
+
keywords = ["security", "governance", "runtime", "contracts", "dry-run", "evidence"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 3 - Alpha",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"Intended Audience :: Information Technology",
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
20
|
+
"Programming Language :: Python :: 3.11",
|
|
21
|
+
"Programming Language :: Python :: 3.12",
|
|
22
|
+
"Programming Language :: Python :: 3.13",
|
|
23
|
+
"Topic :: Security",
|
|
24
|
+
]
|
|
25
|
+
dependencies = [
|
|
26
|
+
"PyYAML>=6,<7",
|
|
27
|
+
"sclite-core>=0.5.1,<0.6",
|
|
28
|
+
"govengine>=0.7.0,<0.8",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
[project.urls]
|
|
32
|
+
Homepage = "https://github.com/rozmiarD/ravenclaw"
|
|
33
|
+
Repository = "https://github.com/rozmiarD/ravenclaw"
|
|
34
|
+
Issues = "https://github.com/rozmiarD/ravenclaw/issues"
|
|
35
|
+
Changelog = "https://github.com/rozmiarD/ravenclaw/blob/main/CHANGELOG.md"
|
|
36
|
+
Documentation = "https://github.com/rozmiarD/ravenclaw#readme"
|
|
37
|
+
|
|
38
|
+
[project.optional-dependencies]
|
|
39
|
+
logdash = [
|
|
40
|
+
"Flask>=3,<4",
|
|
41
|
+
]
|
|
42
|
+
dev = [
|
|
43
|
+
"pytest>=8,<9",
|
|
44
|
+
"Flask>=3,<4",
|
|
45
|
+
"PyYAML>=6,<7",
|
|
46
|
+
"build>=1,<2",
|
|
47
|
+
"twine>=5,<7",
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
[tool.setuptools]
|
|
51
|
+
packages = ["ravenclaw"]
|
|
52
|
+
py-modules = []
|
|
53
|
+
|
|
54
|
+
[tool.pytest.ini_options]
|
|
55
|
+
addopts = "-q"
|
|
56
|
+
testpaths = ["engine/tests", "engine/planer/tests", "tests"]
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
"""OpenClaw carrier-readiness contracts for Ravenclaw.
|
|
4
|
+
|
|
5
|
+
These helpers describe the minimum redaction/output and approval-UX boundaries
|
|
6
|
+
for a future OpenClaw carrier. They do not implement an adapter and must stay
|
|
7
|
+
free of transport/runtime side effects.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from typing import Any, Mapping
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
CHANNELS = (
|
|
14
|
+
'direct_chat',
|
|
15
|
+
'group_chat',
|
|
16
|
+
'file_output',
|
|
17
|
+
'embed_output',
|
|
18
|
+
'attachment_output',
|
|
19
|
+
'private_operator_output',
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
ALWAYS_REDACT = (
|
|
23
|
+
'credentials',
|
|
24
|
+
'tokens',
|
|
25
|
+
'cookies',
|
|
26
|
+
'auth_headers',
|
|
27
|
+
'private_paths',
|
|
28
|
+
'operator_memory',
|
|
29
|
+
'raw_runtime_logs',
|
|
30
|
+
'raw_stdout',
|
|
31
|
+
'raw_stderr',
|
|
32
|
+
'request_response_bodies',
|
|
33
|
+
'private_target_identifiers',
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
PUBLIC_SAFE_FIELDS = (
|
|
37
|
+
'scope_ref',
|
|
38
|
+
'policy_decision_status',
|
|
39
|
+
'reason_code',
|
|
40
|
+
'prepared_spec_ref',
|
|
41
|
+
'approved_spec_ref',
|
|
42
|
+
'runner_receipt_ref',
|
|
43
|
+
'execution_truth_label',
|
|
44
|
+
'evidence_review_ref',
|
|
45
|
+
'validation_receipt_ref',
|
|
46
|
+
'non_claims',
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
APPROVAL_UX_STEPS = (
|
|
50
|
+
'show_scope_before_action',
|
|
51
|
+
'show_policy_decision',
|
|
52
|
+
'show_prepared_spec_as_proposal',
|
|
53
|
+
'show_approved_spec_as_authority_boundary',
|
|
54
|
+
'show_runner_supervision_state',
|
|
55
|
+
'show_dry_run_live_truth',
|
|
56
|
+
'show_evidence_review_and_non_claims',
|
|
57
|
+
'require_operator_confirmation_for_sensitive_actions',
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
REQUIRED_NON_CLAIMS = (
|
|
61
|
+
'does_not_authorize_live_target_execution',
|
|
62
|
+
'does_not_turn_chat_text_into_command_authority',
|
|
63
|
+
'does_not_publish_private_operator_state',
|
|
64
|
+
'does_not_claim_live_vulnerability_discovery_from_dry_run',
|
|
65
|
+
'does_not_implement_openclaw_mcp_or_a2a_adapter',
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
COMMAND_AUTHORITY_STOP_REASONS = (
|
|
69
|
+
'chat_text_contains_command',
|
|
70
|
+
'missing_policy_decision',
|
|
71
|
+
'missing_prepared_spec',
|
|
72
|
+
'missing_approved_spec',
|
|
73
|
+
'prepared_spec_treated_as_approved',
|
|
74
|
+
'missing_runner_supervision',
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
ROLLBACK_STOP_STATES = (
|
|
78
|
+
'scope_ambiguity',
|
|
79
|
+
'owner_review_required',
|
|
80
|
+
'pause_requested',
|
|
81
|
+
'abort_requested',
|
|
82
|
+
'cooldown_required',
|
|
83
|
+
'validation_failed',
|
|
84
|
+
'redaction_failed',
|
|
85
|
+
'dry_run_live_truth_ambiguous',
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def openclaw_redaction_matrix() -> dict[str, Any]:
|
|
90
|
+
outputs = []
|
|
91
|
+
for channel in CHANNELS:
|
|
92
|
+
public = channel != 'private_operator_output'
|
|
93
|
+
outputs.append({
|
|
94
|
+
'channel': channel,
|
|
95
|
+
'public_safe': public,
|
|
96
|
+
'requires_redaction_before_send': True,
|
|
97
|
+
'always_redact': list(ALWAYS_REDACT),
|
|
98
|
+
'allowed_fields': list(PUBLIC_SAFE_FIELDS) if public else list(PUBLIC_SAFE_FIELDS) + ['operator_only_notes'],
|
|
99
|
+
'blocked_fields': list(ALWAYS_REDACT),
|
|
100
|
+
'non_claims_required': list(REQUIRED_NON_CLAIMS),
|
|
101
|
+
})
|
|
102
|
+
return {
|
|
103
|
+
'artifact_type': 'openclaw_redaction_output_matrix',
|
|
104
|
+
'schema_version': 'v0.1',
|
|
105
|
+
'target_carrier': 'openclaw',
|
|
106
|
+
'adapter_status': 'not_implemented',
|
|
107
|
+
'outputs': outputs,
|
|
108
|
+
'non_claims': list(REQUIRED_NON_CLAIMS),
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def openclaw_approval_ux_sketch() -> dict[str, Any]:
|
|
113
|
+
return {
|
|
114
|
+
'artifact_type': 'openclaw_approval_ux_sketch',
|
|
115
|
+
'schema_version': 'v0.1',
|
|
116
|
+
'target_carrier': 'openclaw',
|
|
117
|
+
'adapter_status': 'not_implemented',
|
|
118
|
+
'steps': [
|
|
119
|
+
{
|
|
120
|
+
'step': 'show_scope_before_action',
|
|
121
|
+
'required_artifact': 'scope/input',
|
|
122
|
+
'authority_boundary': 'operator_scope',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
'step': 'show_policy_decision',
|
|
126
|
+
'required_artifact': 'PolicyDecision',
|
|
127
|
+
'authority_boundary': 'ravenclaw_policy_auditor',
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
'step': 'show_prepared_spec_as_proposal',
|
|
131
|
+
'required_artifact': 'PreparedExecutionSpec',
|
|
132
|
+
'authority_boundary': 'proposal_not_execution_authority',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
'step': 'show_approved_spec_as_authority_boundary',
|
|
136
|
+
'required_artifact': 'ApprovedExecutionSpec',
|
|
137
|
+
'authority_boundary': 'execution_engine_input',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
'step': 'show_runner_supervision_state',
|
|
141
|
+
'required_artifact': 'GovSupervisionPlan/GovRunnerLease/GovRunnerReceipt',
|
|
142
|
+
'authority_boundary': 'govengine_runner_supervision',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
'step': 'show_dry_run_live_truth',
|
|
146
|
+
'required_artifact': 'ExecutionReceipt',
|
|
147
|
+
'authority_boundary': 'receipt_truth_label',
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
'step': 'show_evidence_review_and_non_claims',
|
|
151
|
+
'required_artifact': 'GovEvidenceQualification/GovReviewResult',
|
|
152
|
+
'authority_boundary': 'evidence_review_not_live_vuln_claim',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
'step': 'require_operator_confirmation_for_sensitive_actions',
|
|
156
|
+
'required_artifact': 'ApprovalRequest',
|
|
157
|
+
'authority_boundary': 'operator_confirmation',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
'required_step_order': list(APPROVAL_UX_STEPS),
|
|
161
|
+
'non_claims': list(REQUIRED_NON_CLAIMS),
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def openclaw_command_authority_policy() -> dict[str, Any]:
|
|
166
|
+
return {
|
|
167
|
+
'artifact_type': 'openclaw_command_authority_policy',
|
|
168
|
+
'schema_version': 'v0.1',
|
|
169
|
+
'target_carrier': 'openclaw',
|
|
170
|
+
'adapter_status': 'not_implemented',
|
|
171
|
+
'required_authority_chain': [
|
|
172
|
+
'operator_scope',
|
|
173
|
+
'policy_decision',
|
|
174
|
+
'prepared_execution_spec',
|
|
175
|
+
'approved_execution_spec',
|
|
176
|
+
'runner_supervision',
|
|
177
|
+
'execution_receipt',
|
|
178
|
+
],
|
|
179
|
+
'blocked_inputs': [
|
|
180
|
+
'chat_text_command',
|
|
181
|
+
'model_prose_command',
|
|
182
|
+
'raw_shell_snippet',
|
|
183
|
+
'unapproved_tool_call',
|
|
184
|
+
'prepared_spec_without_approval',
|
|
185
|
+
],
|
|
186
|
+
'stop_reasons': list(COMMAND_AUTHORITY_STOP_REASONS),
|
|
187
|
+
'non_claims': list(REQUIRED_NON_CLAIMS),
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def evaluate_command_authority_request(request: Mapping[str, Any]) -> dict[str, Any]:
|
|
192
|
+
reasons: list[str] = []
|
|
193
|
+
if request.get('chat_text_contains_command') is True:
|
|
194
|
+
reasons.append('chat_text_contains_command')
|
|
195
|
+
if request.get('policy_decision') != 'approved':
|
|
196
|
+
reasons.append('missing_policy_decision')
|
|
197
|
+
if not request.get('prepared_spec_ref'):
|
|
198
|
+
reasons.append('missing_prepared_spec')
|
|
199
|
+
if not request.get('approved_spec_ref'):
|
|
200
|
+
reasons.append('missing_approved_spec')
|
|
201
|
+
if request.get('prepared_spec_ref') and request.get('prepared_spec_ref') == request.get('approved_spec_ref'):
|
|
202
|
+
reasons.append('prepared_spec_treated_as_approved')
|
|
203
|
+
if request.get('runner_supervision_status') != 'ready':
|
|
204
|
+
reasons.append('missing_runner_supervision')
|
|
205
|
+
return {
|
|
206
|
+
'status': 'blocked' if reasons else 'ready_for_ravenclaw_execution_engine',
|
|
207
|
+
'stop_reasons': reasons,
|
|
208
|
+
'non_claims': list(REQUIRED_NON_CLAIMS),
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def openclaw_rollback_stop_contract() -> dict[str, Any]:
|
|
213
|
+
return {
|
|
214
|
+
'artifact_type': 'openclaw_rollback_stop_contract',
|
|
215
|
+
'schema_version': 'v0.1',
|
|
216
|
+
'target_carrier': 'openclaw',
|
|
217
|
+
'adapter_status': 'not_implemented',
|
|
218
|
+
'states': list(ROLLBACK_STOP_STATES),
|
|
219
|
+
'required_propagation': [
|
|
220
|
+
'surface_to_operator',
|
|
221
|
+
'preserve_structured_reason',
|
|
222
|
+
'block_execution_until_reviewed',
|
|
223
|
+
'record_validation_receipt_ref',
|
|
224
|
+
],
|
|
225
|
+
'non_claims': list(REQUIRED_NON_CLAIMS),
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def evaluate_rollback_stop_signal(signal: Mapping[str, Any]) -> dict[str, Any]:
|
|
230
|
+
state = str(signal.get('state') or '').strip()
|
|
231
|
+
receipt_ref = str(signal.get('validation_receipt_ref') or '').strip()
|
|
232
|
+
operator_visible = signal.get('operator_visible') is True
|
|
233
|
+
structured_reason = str(signal.get('reason_code') or '').strip()
|
|
234
|
+
failed = []
|
|
235
|
+
if state not in ROLLBACK_STOP_STATES:
|
|
236
|
+
failed.append('unknown_stop_state')
|
|
237
|
+
if not operator_visible:
|
|
238
|
+
failed.append('not_operator_visible')
|
|
239
|
+
if not structured_reason:
|
|
240
|
+
failed.append('missing_structured_reason')
|
|
241
|
+
if state == 'validation_failed' and not receipt_ref:
|
|
242
|
+
failed.append('missing_validation_receipt_ref')
|
|
243
|
+
return {
|
|
244
|
+
'status': 'propagated' if not failed else 'blocked',
|
|
245
|
+
'failed_checks': failed,
|
|
246
|
+
'state': state,
|
|
247
|
+
'non_claims': list(REQUIRED_NON_CLAIMS),
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def evaluate_openclaw_readiness(
|
|
252
|
+
matrix: Mapping[str, Any],
|
|
253
|
+
ux: Mapping[str, Any],
|
|
254
|
+
) -> dict[str, Any]:
|
|
255
|
+
outputs = [item for item in matrix.get('outputs', []) if isinstance(item, Mapping)]
|
|
256
|
+
steps = [item for item in ux.get('steps', []) if isinstance(item, Mapping)]
|
|
257
|
+
step_order = [str(item.get('step')) for item in steps]
|
|
258
|
+
public_outputs = [item for item in outputs if item.get('public_safe') is True]
|
|
259
|
+
|
|
260
|
+
checks = {
|
|
261
|
+
'matrix_artifact_type': matrix.get('artifact_type') == 'openclaw_redaction_output_matrix',
|
|
262
|
+
'ux_artifact_type': ux.get('artifact_type') == 'openclaw_approval_ux_sketch',
|
|
263
|
+
'adapter_not_implemented': matrix.get('adapter_status') == 'not_implemented'
|
|
264
|
+
and ux.get('adapter_status') == 'not_implemented',
|
|
265
|
+
'all_channels_present': [str(item.get('channel')) for item in outputs] == list(CHANNELS),
|
|
266
|
+
'all_channels_redact_before_send': all(item.get('requires_redaction_before_send') is True for item in outputs),
|
|
267
|
+
'public_outputs_block_secrets': all(
|
|
268
|
+
set(ALWAYS_REDACT).issubset(set(str(field) for field in item.get('blocked_fields', [])))
|
|
269
|
+
for item in public_outputs
|
|
270
|
+
),
|
|
271
|
+
'public_outputs_require_non_claims': all(
|
|
272
|
+
set(REQUIRED_NON_CLAIMS).issubset(set(str(claim) for claim in item.get('non_claims_required', [])))
|
|
273
|
+
for item in public_outputs
|
|
274
|
+
),
|
|
275
|
+
'approval_step_order': step_order == list(APPROVAL_UX_STEPS),
|
|
276
|
+
'prepared_before_approved': step_order.index('show_prepared_spec_as_proposal')
|
|
277
|
+
< step_order.index('show_approved_spec_as_authority_boundary')
|
|
278
|
+
if set(('show_prepared_spec_as_proposal', 'show_approved_spec_as_authority_boundary')).issubset(step_order)
|
|
279
|
+
else False,
|
|
280
|
+
'command_policy_blocks_chat_authority': evaluate_command_authority_request({
|
|
281
|
+
'chat_text_contains_command': True,
|
|
282
|
+
'policy_decision': 'approved',
|
|
283
|
+
'prepared_spec_ref': 'prepared-1',
|
|
284
|
+
'approved_spec_ref': 'approved-1',
|
|
285
|
+
'runner_supervision_status': 'ready',
|
|
286
|
+
})['status'] == 'blocked',
|
|
287
|
+
'rollback_contract_requires_operator_visibility': evaluate_rollback_stop_signal({
|
|
288
|
+
'state': 'abort_requested',
|
|
289
|
+
'reason_code': 'operator_abort',
|
|
290
|
+
'operator_visible': False,
|
|
291
|
+
})['status'] == 'blocked',
|
|
292
|
+
}
|
|
293
|
+
failed = [name for name, passed in checks.items() if not passed]
|
|
294
|
+
return {
|
|
295
|
+
'status': 'passed' if not failed else 'failed',
|
|
296
|
+
'checks': checks,
|
|
297
|
+
'failed_checks': failed,
|
|
298
|
+
'non_claims': list(REQUIRED_NON_CLAIMS),
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def openclaw_readiness_status() -> dict[str, Any]:
|
|
303
|
+
return evaluate_openclaw_readiness(openclaw_redaction_matrix(), openclaw_approval_ux_sketch())
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
"""Ravenclaw security-profile boundary metadata.
|
|
4
|
+
|
|
5
|
+
This module is Ravenclaw-owned. It describes the security runtime/profile that
|
|
6
|
+
consumes GovEngine and SCLite surfaces; it does not create a carrier adapter or
|
|
7
|
+
move Ravenclaw security semantics into GovEngine.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any, Mapping
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
SCHEMA_VERSION = 'v0.1'
|
|
15
|
+
PROFILE_NAME = 'ravenclaw-security'
|
|
16
|
+
PROFILE_DOMAIN = 'security-research-runtime'
|
|
17
|
+
|
|
18
|
+
REQUIRED_GOVENGINE_SURFACES = (
|
|
19
|
+
'artifact_governance_core',
|
|
20
|
+
'planning_contracts_core',
|
|
21
|
+
'admission_policy_core',
|
|
22
|
+
'evidence_review_core',
|
|
23
|
+
'controlled_execution_core',
|
|
24
|
+
'security_profile_helpers',
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
REQUIRED_REFERENCE_PATHS = (
|
|
28
|
+
'references/ravenclaw-security-profile-boundary.md',
|
|
29
|
+
'references/openclaw-adapter-readiness-packet-2026-05-20.md',
|
|
30
|
+
'references/openclaw-redaction-output-matrix.md',
|
|
31
|
+
'references/openclaw-approval-ux-sketch.md',
|
|
32
|
+
'references/openclaw-command-authority-and-rollback-tests.md',
|
|
33
|
+
'references/carrier-readiness-checklist.md',
|
|
34
|
+
'references/openclaw-adapter-contract-map.md',
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
OWNED_SEMANTICS = (
|
|
38
|
+
'security_research_runtime_profile',
|
|
39
|
+
'finding_taxonomy',
|
|
40
|
+
'scope_and_policy_interpretation',
|
|
41
|
+
'logdash_operator_visibility',
|
|
42
|
+
'public_demo_and_snapshot_projection',
|
|
43
|
+
'host_adapter_projection',
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
EXTERNAL_AUTHORITIES = {
|
|
47
|
+
'govengine': (
|
|
48
|
+
'kernel_boundary_report',
|
|
49
|
+
'runtime_shell',
|
|
50
|
+
'planning',
|
|
51
|
+
'admission',
|
|
52
|
+
'execution.supervision',
|
|
53
|
+
'review',
|
|
54
|
+
'security_profile',
|
|
55
|
+
),
|
|
56
|
+
'sclite': (
|
|
57
|
+
'lifecycle_schema_validation',
|
|
58
|
+
'artifact_chain_validation',
|
|
59
|
+
'review_bundle_verdicts',
|
|
60
|
+
),
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
ADAPTER_READINESS_GATES = (
|
|
64
|
+
'scope_ux',
|
|
65
|
+
'redaction',
|
|
66
|
+
'command_authority',
|
|
67
|
+
'lifecycle_artifacts',
|
|
68
|
+
'rollback',
|
|
69
|
+
'public_private_boundary',
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
FORBIDDEN_PROFILE_CLAIMS = (
|
|
73
|
+
'govengine_kernel_ownership',
|
|
74
|
+
'sclite_schema_authority',
|
|
75
|
+
'carrier_adapter_implementation',
|
|
76
|
+
'live_execution_authority',
|
|
77
|
+
'credential_or_key_store',
|
|
78
|
+
'production_deployment_readiness',
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def security_profile_manifest() -> dict[str, Any]:
|
|
83
|
+
return {
|
|
84
|
+
'artifact_type': 'ravenclaw_security_profile_manifest',
|
|
85
|
+
'schema_version': SCHEMA_VERSION,
|
|
86
|
+
'profile': {
|
|
87
|
+
'name': PROFILE_NAME,
|
|
88
|
+
'domain': PROFILE_DOMAIN,
|
|
89
|
+
'role': 'reference_security_runtime_profile',
|
|
90
|
+
'runtime_owner': 'ravenclaw',
|
|
91
|
+
},
|
|
92
|
+
'package_chain': {
|
|
93
|
+
'ravenclaw': '0.16.1',
|
|
94
|
+
'ravenclaw_distribution': 'ravenclaw-security',
|
|
95
|
+
'govengine': '>=0.7.0,<0.8',
|
|
96
|
+
'sclite-core': '>=0.5.1,<0.6',
|
|
97
|
+
},
|
|
98
|
+
'required_govengine_surfaces': list(REQUIRED_GOVENGINE_SURFACES),
|
|
99
|
+
'owned_semantics': list(OWNED_SEMANTICS),
|
|
100
|
+
'external_authorities': {key: list(value) for key, value in EXTERNAL_AUTHORITIES.items()},
|
|
101
|
+
'adapter_readiness': {
|
|
102
|
+
'target_carrier': 'openclaw',
|
|
103
|
+
'status': 'readiness_packet_only',
|
|
104
|
+
'packet_path': 'references/openclaw-adapter-readiness-packet-2026-05-20.md',
|
|
105
|
+
'required_gates': list(ADAPTER_READINESS_GATES),
|
|
106
|
+
'carrier_order': ['openclaw', 'mcp_later', 'a2a_last_or_example_first'],
|
|
107
|
+
},
|
|
108
|
+
'required_reference_paths': list(REQUIRED_REFERENCE_PATHS),
|
|
109
|
+
'forbidden_profile_claims': list(FORBIDDEN_PROFILE_CLAIMS),
|
|
110
|
+
'non_claims': [
|
|
111
|
+
'Does not make Ravenclaw own GovEngine kernel APIs.',
|
|
112
|
+
'Does not make Ravenclaw own SCLite schemas or review-bundle verdict authority.',
|
|
113
|
+
'Does not implement OpenClaw, MCP, or A2A adapters.',
|
|
114
|
+
'Does not authorize live target execution.',
|
|
115
|
+
'Does not claim production deployment readiness.',
|
|
116
|
+
],
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def evaluate_security_profile_manifest(
|
|
121
|
+
manifest: Mapping[str, Any],
|
|
122
|
+
*,
|
|
123
|
+
root: Path | None = None,
|
|
124
|
+
) -> dict[str, Any]:
|
|
125
|
+
profile = manifest.get('profile') if isinstance(manifest.get('profile'), Mapping) else {}
|
|
126
|
+
adapter = manifest.get('adapter_readiness') if isinstance(manifest.get('adapter_readiness'), Mapping) else {}
|
|
127
|
+
package_chain = manifest.get('package_chain') if isinstance(manifest.get('package_chain'), Mapping) else {}
|
|
128
|
+
required_paths = [str(path) for path in manifest.get('required_reference_paths', [])]
|
|
129
|
+
|
|
130
|
+
checks = {
|
|
131
|
+
'artifact_type': manifest.get('artifact_type') == 'ravenclaw_security_profile_manifest',
|
|
132
|
+
'schema_version': manifest.get('schema_version') == SCHEMA_VERSION,
|
|
133
|
+
'profile_name': profile.get('name') == PROFILE_NAME,
|
|
134
|
+
'profile_domain': profile.get('domain') == PROFILE_DOMAIN,
|
|
135
|
+
'package_chain': package_chain.get('govengine') == '>=0.7.0,<0.8'
|
|
136
|
+
and package_chain.get('sclite-core') == '>=0.5.1,<0.6',
|
|
137
|
+
'govengine_surfaces': list(manifest.get('required_govengine_surfaces', [])) == list(REQUIRED_GOVENGINE_SURFACES),
|
|
138
|
+
'ravenclaw_owned_semantics': set(OWNED_SEMANTICS).issubset(set(str(item) for item in manifest.get('owned_semantics', []))),
|
|
139
|
+
'adapter_readiness_packet_only': adapter.get('status') == 'readiness_packet_only',
|
|
140
|
+
'adapter_readiness_gates': list(adapter.get('required_gates', [])) == list(ADAPTER_READINESS_GATES),
|
|
141
|
+
'carrier_order': list(adapter.get('carrier_order', [])) == ['openclaw', 'mcp_later', 'a2a_last_or_example_first'],
|
|
142
|
+
'forbidden_claims': set(FORBIDDEN_PROFILE_CLAIMS).issubset(
|
|
143
|
+
set(str(item) for item in manifest.get('forbidden_profile_claims', []))
|
|
144
|
+
),
|
|
145
|
+
}
|
|
146
|
+
missing_paths: list[str] = []
|
|
147
|
+
if root is not None:
|
|
148
|
+
missing_paths = [path for path in required_paths if not (root / path).exists()]
|
|
149
|
+
checks['required_reference_paths'] = not missing_paths
|
|
150
|
+
failed = [name for name, passed in checks.items() if not passed]
|
|
151
|
+
return {
|
|
152
|
+
'status': 'passed' if not failed else 'failed',
|
|
153
|
+
'profile_name': profile.get('name'),
|
|
154
|
+
'profile_domain': profile.get('domain'),
|
|
155
|
+
'checks': checks,
|
|
156
|
+
'failed_checks': failed,
|
|
157
|
+
'missing_paths': missing_paths,
|
|
158
|
+
'non_claims': list(manifest.get('non_claims', [])),
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def ravenclaw_security_profile_status(root: Path | None = None) -> dict[str, Any]:
|
|
163
|
+
return evaluate_security_profile_manifest(security_profile_manifest(), root=root)
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ravenclaw-security
|
|
3
|
+
Version: 0.16.1
|
|
4
|
+
Summary: Governance-first security research runtime with policy-gated execution and public-safe proof artifacts
|
|
5
|
+
Author: Krzysztof Probola
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/rozmiarD/ravenclaw
|
|
8
|
+
Project-URL: Repository, https://github.com/rozmiarD/ravenclaw
|
|
9
|
+
Project-URL: Issues, https://github.com/rozmiarD/ravenclaw/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/rozmiarD/ravenclaw/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: Documentation, https://github.com/rozmiarD/ravenclaw#readme
|
|
12
|
+
Keywords: security,governance,runtime,contracts,dry-run,evidence
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Information Technology
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Security
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: PyYAML<7,>=6
|
|
26
|
+
Requires-Dist: sclite-core<0.6,>=0.5.1
|
|
27
|
+
Requires-Dist: govengine<0.8,>=0.7.0
|
|
28
|
+
Provides-Extra: logdash
|
|
29
|
+
Requires-Dist: Flask<4,>=3; extra == "logdash"
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: pytest<9,>=8; extra == "dev"
|
|
32
|
+
Requires-Dist: Flask<4,>=3; extra == "dev"
|
|
33
|
+
Requires-Dist: PyYAML<7,>=6; extra == "dev"
|
|
34
|
+
Requires-Dist: build<2,>=1; extra == "dev"
|
|
35
|
+
Requires-Dist: twine<7,>=5; extra == "dev"
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
|
|
38
|
+
# RAVENCLAW
|
|
39
|
+
|
|
40
|
+
[](https://github.com/rozmiarD/ravenclaw/actions/workflows/pytest.yml)
|
|
41
|
+
[](pyproject.toml)
|
|
42
|
+
[](pyproject.toml)
|
|
43
|
+
[](https://github.com/rozmiarD/GovEngine)
|
|
44
|
+
[](https://github.com/rozmiarD/SCLite)
|
|
45
|
+
[](LICENSE)
|
|
46
|
+
|
|
47
|
+
**RAVENCLAW is a governance-first security research runtime for bounded, auditable security operations.**
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
It is built around a simple idea:
|
|
51
|
+
advanced autonomy is only useful when it remains bounded, observable, and accountable.
|
|
52
|
+
|
|
53
|
+
## What Ravenclaw does
|
|
54
|
+
|
|
55
|
+
Ravenclaw is a multi-layer runtime for running security workflows under explicit governance.
|
|
56
|
+
It combines:
|
|
57
|
+
- deterministic planning and runtime contracts
|
|
58
|
+
- policy and approval gates before execution
|
|
59
|
+
- constrained execution through a dedicated execution engine
|
|
60
|
+
- artifact analysis and evidence-oriented qualification
|
|
61
|
+
- operator-facing visibility through Logdash
|
|
62
|
+
|
|
63
|
+
The goal is not maximum automation.
|
|
64
|
+
The goal is reliable autonomy under governance.
|
|
65
|
+
|
|
66
|
+
The public repository should be read as a **public core** of that system:
|
|
67
|
+
a publishable runtime/control-plane artifact with explicit governance and validation surfaces, not a claim that every private operator integration is bundled here.
|
|
68
|
+
|
|
69
|
+
## What makes it different
|
|
70
|
+
|
|
71
|
+
Ravenclaw is not an unconstrained offensive automation system.
|
|
72
|
+
Its core design claim is narrower:
|
|
73
|
+
- planning, authorization, execution, and interpretation are separated
|
|
74
|
+
- policy is enforced in runtime paths, not only described in prompts or docs
|
|
75
|
+
- operator approval remains explicit for sensitive actions
|
|
76
|
+
- evidence quality and replayability matter as much as action generation
|
|
77
|
+
|
|
78
|
+
In short, Ravenclaw optimizes for useful actions that stay within policy, scope, and review boundaries.
|
|
79
|
+
|
|
80
|
+
Ravenclaw now consumes **GovEngine** for reusable governed-runtime kernel mechanics and **SCLite** for contract lifecycle artifacts.
|
|
81
|
+
|
|
82
|
+
The current reusable direction is a small **Security Contract Layer** backed by Ravenclaw Runtime artifacts: scope binding, policy decisions, prepared/approved execution specs, execution receipts, evidence summaries, and runtime truth. The reusable contract core is now the standalone `sclite` package/repo, while Ravenclaw is being shaped as the reference security-research runtime/profile over GovEngine + SCLite. OpenClaw, MCP, and A2A are potential later carriers for these contracts, not new protocols Ravenclaw is trying to own.
|
|
83
|
+
|
|
84
|
+
The first PyPI package line is `ravenclaw-security==0.16.1`. It exposes the public
|
|
85
|
+
Ravenclaw security-profile and OpenClaw readiness contract helpers. The full
|
|
86
|
+
runtime, demo, Logdash, and validation surfaces remain source/reference
|
|
87
|
+
repository workflows in this release.
|
|
88
|
+
|
|
89
|
+
## Safe quickstart
|
|
90
|
+
|
|
91
|
+
The current official public-safe path is local and dry-run oriented.
|
|
92
|
+
|
|
93
|
+
Shortest reviewer path:
|
|
94
|
+
1. `INSTALL.md`
|
|
95
|
+
2. `DEMO.md`
|
|
96
|
+
3. `REVIEWER_VALIDATION_GUIDE.md`
|
|
97
|
+
4. `QUALITY_SIGNALS.md`
|
|
98
|
+
5. `PUBLIC_STATUS.md`
|
|
99
|
+
|
|
100
|
+
Broader navigation lives in `DOCS_MAP.md`; architecture depth starts with `ARCHITECTURE_OVERVIEW.md`.
|
|
101
|
+
|
|
102
|
+
This path is intentionally narrow and honest.
|
|
103
|
+
It shows the governed flow with a small one-command demo entrypoint (`bin/demo`), a shared bootstrap path (`scripts/bootstrap_public_demo.sh`), and an explicit `RAVENCLAW_MODE=demo` delivery profile, without pretending the repo already has a polished one-command public deployment story.
|
|
104
|
+
|
|
105
|
+
## Architecture at a glance
|
|
106
|
+
|
|
107
|
+
High-level governed flow:
|
|
108
|
+
|
|
109
|
+
`scope/input -> planner -> policy gate / auditor -> approved execution spec -> execution engine -> analysis -> operator visibility`
|
|
110
|
+
|
|
111
|
+
Main runtime layers:
|
|
112
|
+
- **Planner**: turns scope and operator input into structured campaign/runtime intent
|
|
113
|
+
- **Policy gate / Auditor**: enforces scope, tool, auth, and aggression rules before execution
|
|
114
|
+
- **Execution engine**: the only layer allowed to build and run final commands
|
|
115
|
+
- **Analysis / qualification**: turns raw artifacts into bounded findings and summaries
|
|
116
|
+
- **Logdash**: operator-facing control plane for visibility, control, and state truth
|
|
117
|
+
|
|
118
|
+
See `ARCHITECTURE_OVERVIEW.md` for the short version and `ARCHITECTURE.md` for the deeper map.
|
|
119
|
+
|
|
120
|
+
## Public maturity and status
|
|
121
|
+
|
|
122
|
+
Ravenclaw is not a flat-maturity repository.
|
|
123
|
+
Some parts are stable enough to be treated as strong public reference surfaces, while others remain experimental or local/internal.
|
|
124
|
+
|
|
125
|
+
Use `PUBLIC_STATUS.md` as the canonical public maturity guide.
|
|
126
|
+
For public proof and trust surfaces, use `VALIDATION.md`, `QUALITY_SIGNALS.md`, and `references/public-safe-proof-walkthrough.md`.
|
|
127
|
+
For the public-core/private-overlay split, read `references/public-core-private-overlay-boundary.md`.
|
|
128
|
+
For trusted-core authority boundaries, failure modes, and non-guarantees, read `THREAT_MODEL.md`.
|
|
129
|
+
For the emerging contract layer, read `SECURITY_CONTRACT_LAYER.md` and `references/approved-execution-spec-v0.1.md`.
|
|
130
|
+
For Logdash operator-facing control/recovery semantics, see `references/logdash-operator-truth-contracts.md`.
|
|
131
|
+
|
|
132
|
+
## Install and run posture
|
|
133
|
+
|
|
134
|
+
Fastest public-safe start:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
./scripts/bootstrap_public_demo.sh demo
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Reusable public demo bundle:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
./scripts/bootstrap_public_demo.sh bundle
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Reviewer-facing package-chain scenario:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
./scripts/bootstrap_public_demo.sh scenario
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
That scenario generates a local dry-run summary tying Ravenclaw demo artifacts to the GovEngine `security_profile` boundary and SCLite lifecycle-chain verification. In demo mode, Ravenclaw also records a deterministic GovEngine signing/trust-port example on the execution ticket, binding the ticket evidence to the execution-contract digest without claiming PKI, CA, KMS, key-store, or production identity ownership.
|
|
153
|
+
|
|
154
|
+
For containerized public-demo bring-up, see `.devcontainer/` and `compose.demo.yaml`.
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
Today, the repo is strongest as:
|
|
158
|
+
- a governance-first runtime architecture
|
|
159
|
+
- a research platform with real control and policy surfaces
|
|
160
|
+
- a codebase that can be inspected seriously
|
|
161
|
+
|
|
162
|
+
It now has an official public-safe local dry-run path, but it is not yet in its final lowest-friction form.
|
|
163
|
+
That remaining gap is real and still an active priority.
|
|
164
|
+
|
|
165
|
+
## Who this is for
|
|
166
|
+
|
|
167
|
+
Ravenclaw is best suited to technically serious readers who care about:
|
|
168
|
+
- governance-first security automation
|
|
169
|
+
- policy-gated execution
|
|
170
|
+
- operator-visible control and recovery
|
|
171
|
+
- contract-oriented runtime design
|
|
172
|
+
- evidence and replayability
|
|
173
|
+
|
|
174
|
+
If you want a clearer fit/non-fit guide, read `AUDIENCE.md`.
|
|
175
|
+
|
|
176
|
+
## Limits and non-goals
|
|
177
|
+
|
|
178
|
+
Ravenclaw is **not**:
|
|
179
|
+
- an unconstrained offensive automation platform
|
|
180
|
+
- an opaque autonomous attacker
|
|
181
|
+
- a replacement for operator judgment
|
|
182
|
+
- a guarantee of security outcomes
|
|
183
|
+
- a polished consumer product or hosted service
|
|
184
|
+
- a beginner-first security starter kit
|
|
185
|
+
|
|
186
|
+
It is intended for authorized security research and controlled environments.
|
|
187
|
+
Its value depends on bounded behavior, explicit governance, and operator visibility.
|
|
188
|
+
|
|
189
|
+
## Why this project exists
|
|
190
|
+
|
|
191
|
+
Many autonomous security systems have a hard tradeoff:
|
|
192
|
+
- rigid systems can be safe but not useful enough;
|
|
193
|
+
- unconstrained systems can act quickly but are hard to trust.
|
|
194
|
+
|
|
195
|
+
Ravenclaw separates proposal, approval, execution, and review so adaptive parts can help without owning final authority.
|
|
196
|
+
|
|
197
|
+
For the short public thesis, read `WHY_RAVENCLAW.md`.
|
|
198
|
+
|
|
199
|
+
## Repository guide
|
|
200
|
+
|
|
201
|
+
Main areas:
|
|
202
|
+
- `engine/` - planning, runtime orchestration, policy, execution, qualification, evaluation
|
|
203
|
+
- `logdash/` - operator-facing dashboard and control plane
|
|
204
|
+
- `tests/` and `engine/tests/` - regression and contract coverage
|
|
205
|
+
- `references/` - short reference docs for important contracts and boundaries
|
|
206
|
+
- `implementation-plans/` - bounded plans for meaningful repo/runtime improvement waves
|
|
207
|
+
|
|
208
|
+
## Release and public-release framing
|
|
209
|
+
|
|
210
|
+
Version milestones are tracked in `VERSION_ROADMAP.md`.
|
|
211
|
+
High-level open-source/public-release direction is tracked in `OPEN_SOURCE_1_0_PLAN.md`.
|
|
212
|
+
|
|
213
|
+
Current public truth:
|
|
214
|
+
- the technical core has real governance, contract, and validation surfaces
|
|
215
|
+
- the public repo is best understood as a governance-first public core, not a full private operator environment
|
|
216
|
+
- the public repo shape is improving, but is still being refined
|
|
217
|
+
- public clarity, demo usability, and proof surfaces are better than before, but remain active work
|
|
218
|
+
|
|
219
|
+
## Documentation map
|
|
220
|
+
|
|
221
|
+
For intent-based navigation, use `DOCS_MAP.md`.
|
|
222
|
+
For final publication workflow, use `PUBLISHING.md`.
|
|
223
|
+
|
|
224
|
+
## Deeper reading
|
|
225
|
+
|
|
226
|
+
If you want more depth, read in this order:
|
|
227
|
+
1. `PUBLIC_STATUS.md`
|
|
228
|
+
2. `AUDIENCE.md`
|
|
229
|
+
3. `QUALITY_SIGNALS.md`
|
|
230
|
+
4. `VALIDATION.md`
|
|
231
|
+
5. `DOCS_MAP.md`
|
|
232
|
+
6. `ARCHITECTURE_OVERVIEW.md`
|
|
233
|
+
7. `WHY_RAVENCLAW.md`
|
|
234
|
+
8. `ARCHITECTURE.md`
|
|
235
|
+
9. `STATE_FILES.md`
|
|
236
|
+
10. `OPEN_SOURCE_1_0_PLAN.md`
|
|
237
|
+
|
|
238
|
+
Ravenclaw should be understood as intelligence under governance: adaptive enough to be useful, bounded enough to remain inspectable and trustworthy.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
MANIFEST.in
|
|
3
|
+
README.md
|
|
4
|
+
pyproject.toml
|
|
5
|
+
ravenclaw/__init__.py
|
|
6
|
+
ravenclaw/openclaw_readiness.py
|
|
7
|
+
ravenclaw/security_profile.py
|
|
8
|
+
ravenclaw_security.egg-info/PKG-INFO
|
|
9
|
+
ravenclaw_security.egg-info/SOURCES.txt
|
|
10
|
+
ravenclaw_security.egg-info/dependency_links.txt
|
|
11
|
+
ravenclaw_security.egg-info/requires.txt
|
|
12
|
+
ravenclaw_security.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ravenclaw
|