runewall 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- runewall-1.0.0/.gitattributes +2 -0
- runewall-1.0.0/.github/workflows/ci.yml +26 -0
- runewall-1.0.0/.github/workflows/community-map-verify-example.yml +18 -0
- runewall-1.0.0/.gitignore +17 -0
- runewall-1.0.0/AGENTS.md +193 -0
- runewall-1.0.0/CHANGELOG.md +58 -0
- runewall-1.0.0/CONTRIBUTING.md +33 -0
- runewall-1.0.0/LICENSE +21 -0
- runewall-1.0.0/PKG-INFO +206 -0
- runewall-1.0.0/README-START-HERE.md +42 -0
- runewall-1.0.0/README.md +181 -0
- runewall-1.0.0/brain/runewall-brain-bundle.md +249 -0
- runewall-1.0.0/brain/runewall-technical-spec.md +391 -0
- runewall-1.0.0/demos/README.md +39 -0
- runewall-1.0.0/demos/runewall_60_second_demo.ps1 +36 -0
- runewall-1.0.0/docs/.gitkeep +0 -0
- runewall-1.0.0/docs/ANNOUNCEMENT.md +39 -0
- runewall-1.0.0/docs/COMMUNITY_MAPS.md +165 -0
- runewall-1.0.0/docs/COMMUNITY_MAP_KEYS.md +135 -0
- runewall-1.0.0/docs/COMMUNITY_MAP_MANIFEST.md +127 -0
- runewall-1.0.0/docs/COMMUNITY_MAP_SIGNING.md +88 -0
- runewall-1.0.0/docs/COMMUNITY_PACKAGE_VERIFY_CI.md +87 -0
- runewall-1.0.0/docs/HANDOFF.md +104 -0
- runewall-1.0.0/docs/INSTALL.md +84 -0
- runewall-1.0.0/docs/MCP_CLIENT_EXAMPLES.md +73 -0
- runewall-1.0.0/docs/MCP_SERVER_PLAN.md +77 -0
- runewall-1.0.0/docs/PACKAGING.md +98 -0
- runewall-1.0.0/docs/PYTHON_SDK_EXAMPLES.md +94 -0
- runewall-1.0.0/docs/QUICKSTART.md +90 -0
- runewall-1.0.0/docs/RELEASE_CHECKLIST.md +61 -0
- runewall-1.0.0/docs/RELEASE_NOTES_TEMPLATE.md +37 -0
- runewall-1.0.0/docs/ROADMAP.md +22 -0
- runewall-1.0.0/docs/agent-json-schema.md +280 -0
- runewall-1.0.0/docs/maps-contributing.md +348 -0
- runewall-1.0.0/examples/.gitkeep +0 -0
- runewall-1.0.0/examples/community-maps/README.md +8 -0
- runewall-1.0.0/examples/community-maps/github_create_issue.safe.json +14 -0
- runewall-1.0.0/examples/community-maps/keys/example-author-key.json +6 -0
- runewall-1.0.0/examples/community-maps/manifest.example.json +31 -0
- runewall-1.0.0/examples/file_rollback_demo.py +47 -0
- runewall-1.0.0/maps/.gitkeep +0 -0
- runewall-1.0.0/pyproject.toml +35 -0
- runewall-1.0.0/runewall/__init__.py +13 -0
- runewall-1.0.0/runewall/cli/.gitkeep +0 -0
- runewall-1.0.0/runewall/cli/__init__.py +1 -0
- runewall-1.0.0/runewall/cli/main.py +2903 -0
- runewall-1.0.0/runewall/core/.gitkeep +0 -0
- runewall-1.0.0/runewall/core/__init__.py +6 -0
- runewall-1.0.0/runewall/core/config.py +442 -0
- runewall-1.0.0/runewall/core/db.py +73 -0
- runewall-1.0.0/runewall/core/interceptor.py +155 -0
- runewall-1.0.0/runewall/core/log.py +229 -0
- runewall-1.0.0/runewall/core/models.py +72 -0
- runewall-1.0.0/runewall/core/rollback.py +47 -0
- runewall-1.0.0/runewall/core/rules.py +235 -0
- runewall-1.0.0/runewall/core/snapshot.py +144 -0
- runewall-1.0.0/runewall/maps/__init__.py +5 -0
- runewall-1.0.0/runewall/maps/executor.py +187 -0
- runewall-1.0.0/runewall/maps/planner.py +100 -0
- runewall-1.0.0/runewall/maps/registry.py +918 -0
- runewall-1.0.0/runewall/maps/sites/cloudflare.json +23 -0
- runewall-1.0.0/runewall/maps/sites/discord.json +32 -0
- runewall-1.0.0/runewall/maps/sites/github.json +36 -0
- runewall-1.0.0/runewall/maps/sites/linear.json +36 -0
- runewall-1.0.0/runewall/maps/sites/netlify.json +23 -0
- runewall-1.0.0/runewall/maps/sites/slack.json +32 -0
- runewall-1.0.0/runewall/maps/sites/supabase.json +23 -0
- runewall-1.0.0/runewall/maps/sites/vercel.json +23 -0
- runewall-1.0.0/runewall/sdk.py +66 -0
- runewall-1.0.0/runewall/translate/__init__.py +5 -0
- runewall-1.0.0/runewall/translate/reader.py +47 -0
- runewall-1.0.0/specs/.gitkeep +0 -0
- runewall-1.0.0/tests/__init__.py +1 -0
- runewall-1.0.0/tests/cli/.gitkeep +0 -0
- runewall-1.0.0/tests/cli/__init__.py +1 -0
- runewall-1.0.0/tests/cli/test_cli.py +7509 -0
- runewall-1.0.0/tests/core/.gitkeep +0 -0
- runewall-1.0.0/tests/core/__init__.py +1 -0
- runewall-1.0.0/tests/core/test_config.py +245 -0
- runewall-1.0.0/tests/core/test_interceptor.py +177 -0
- runewall-1.0.0/tests/core/test_log.py +127 -0
- runewall-1.0.0/tests/core/test_rollback.py +50 -0
- runewall-1.0.0/tests/core/test_rules.py +200 -0
- runewall-1.0.0/tests/core/test_snapshot.py +213 -0
- runewall-1.0.0/tests/integration/.gitkeep +0 -0
- runewall-1.0.0/tests/integration/__init__.py +1 -0
- runewall-1.0.0/tests/integration/test_dry_run_logging.py +80 -0
- runewall-1.0.0/tests/integration/test_file_rollback.py +97 -0
- runewall-1.0.0/tests/integration/test_github_create_issue_execution.py +113 -0
- runewall-1.0.0/tests/integration/test_protect_file_create_delete.py +54 -0
- runewall-1.0.0/tests/integration/test_protect_file_write.py +37 -0
- runewall-1.0.0/tests/integration/test_read_logging.py +49 -0
- runewall-1.0.0/tests/integration/test_review_flow.py +126 -0
- runewall-1.0.0/tests/maps/__init__.py +1 -0
- runewall-1.0.0/tests/maps/test_executor.py +517 -0
- runewall-1.0.0/tests/maps/test_planner.py +56 -0
- runewall-1.0.0/tests/maps/test_registry.py +892 -0
- runewall-1.0.0/tests/test_sdk.py +128 -0
- runewall-1.0.0/tests/translate/test_reader.py +58 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: Runewall CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
|
|
11
|
+
steps:
|
|
12
|
+
- name: Check out repository
|
|
13
|
+
uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- name: Set up Python 3.13
|
|
16
|
+
uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.13"
|
|
19
|
+
|
|
20
|
+
- name: Install dependencies
|
|
21
|
+
run: |
|
|
22
|
+
python -m pip install --upgrade pip
|
|
23
|
+
python -m pip install -e ".[dev]"
|
|
24
|
+
|
|
25
|
+
- name: Run tests
|
|
26
|
+
run: python -m pytest tests -v
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Example workflow for local community map package verification.
|
|
2
|
+
# This is a documentation-style example and can be adapted per repository.
|
|
3
|
+
name: Community Map Verify Example
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
pull_request:
|
|
7
|
+
push:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
verify-community-maps:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- uses: actions/setup-python@v5
|
|
15
|
+
with:
|
|
16
|
+
python-version: "3.13"
|
|
17
|
+
- run: python -m pip install -e ".[dev]"
|
|
18
|
+
- run: runewall maps community package verify examples/community-maps --json
|
runewall-1.0.0/AGENTS.md
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
Behavioral guidelines for Codex while building Runewall.
|
|
4
|
+
|
|
5
|
+
These instructions reduce common LLM coding mistakes. Follow them together with the project brain and technical spec.
|
|
6
|
+
|
|
7
|
+
Before coding, always read:
|
|
8
|
+
|
|
9
|
+
* `brain/runewall-brain-bundle.md`
|
|
10
|
+
* `brain/runewall-technical-spec.md`
|
|
11
|
+
|
|
12
|
+
Runewall is local-first, open-source, Python-first, CLI-first, and safety-first.
|
|
13
|
+
|
|
14
|
+
Do not build everything at once.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Think Before Coding
|
|
19
|
+
|
|
20
|
+
**Don't assume. Don't hide confusion. Surface tradeoffs.**
|
|
21
|
+
|
|
22
|
+
Before implementing:
|
|
23
|
+
|
|
24
|
+
* State your assumptions explicitly.
|
|
25
|
+
* If uncertain, ask or explain the uncertainty.
|
|
26
|
+
* If multiple interpretations exist, present them instead of silently choosing.
|
|
27
|
+
* If a simpler approach exists, say so.
|
|
28
|
+
* Push back when the request would make the system overcomplicated.
|
|
29
|
+
* If something is unclear, stop and name what is confusing.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. Simplicity First
|
|
34
|
+
|
|
35
|
+
**Minimum code that solves the current task. Nothing speculative.**
|
|
36
|
+
|
|
37
|
+
* No features beyond what was asked.
|
|
38
|
+
* No abstractions for single-use code.
|
|
39
|
+
* No dashboard unless explicitly requested.
|
|
40
|
+
* No TypeScript SDK unless explicitly requested.
|
|
41
|
+
* No Playwright/browser translation unless explicitly requested.
|
|
42
|
+
* No website maps unless explicitly requested.
|
|
43
|
+
* No auth/credential layer unless explicitly requested.
|
|
44
|
+
* No agent-native protocol unless explicitly requested.
|
|
45
|
+
* No "future flexibility" unless the current task needs it.
|
|
46
|
+
* If you write 200 lines and it could be 50, rewrite it.
|
|
47
|
+
|
|
48
|
+
Ask yourself:
|
|
49
|
+
|
|
50
|
+
> Would a senior engineer say this is overcomplicated?
|
|
51
|
+
|
|
52
|
+
If yes, simplify.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 3. Surgical Changes
|
|
57
|
+
|
|
58
|
+
**Touch only what you must. Clean up only your own mess.**
|
|
59
|
+
|
|
60
|
+
When editing existing code:
|
|
61
|
+
|
|
62
|
+
* Do not improve adjacent code, comments, or formatting unless needed.
|
|
63
|
+
* Do not refactor things that are not broken.
|
|
64
|
+
* Match the existing style.
|
|
65
|
+
* If you notice unrelated dead code, mention it but do not delete it.
|
|
66
|
+
* Remove imports, variables, or functions only if your changes made them unused.
|
|
67
|
+
|
|
68
|
+
Every changed line should directly trace to the current request.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 4. Goal-Driven Execution
|
|
73
|
+
|
|
74
|
+
**Define success criteria. Loop until verified.**
|
|
75
|
+
|
|
76
|
+
Transform tasks into verifiable goals.
|
|
77
|
+
|
|
78
|
+
Examples:
|
|
79
|
+
|
|
80
|
+
* "Add validation" means: write tests for invalid inputs, then make them pass.
|
|
81
|
+
* "Fix the bug" means: write a test that reproduces it, then make it pass.
|
|
82
|
+
* "Refactor X" means: ensure tests pass before and after.
|
|
83
|
+
|
|
84
|
+
For multi-step tasks, state a brief plan:
|
|
85
|
+
|
|
86
|
+
```txt
|
|
87
|
+
1. [Step] → verify: [check]
|
|
88
|
+
2. [Step] → verify: [check]
|
|
89
|
+
3. [Step] → verify: [check]
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Do not stop after writing code. Run or explain the verification.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 5. Runewall Build Order
|
|
97
|
+
|
|
98
|
+
Build Runewall in this order:
|
|
99
|
+
|
|
100
|
+
```txt
|
|
101
|
+
1. Python package skeleton
|
|
102
|
+
2. Core models
|
|
103
|
+
3. SQLite schema
|
|
104
|
+
4. Action log
|
|
105
|
+
5. CLI init/log
|
|
106
|
+
6. Rules engine
|
|
107
|
+
7. File snapshot engine
|
|
108
|
+
8. File rollback engine
|
|
109
|
+
9. Interceptor
|
|
110
|
+
10. Universal read mode
|
|
111
|
+
11. Maps
|
|
112
|
+
12. Auth
|
|
113
|
+
13. Protocol
|
|
114
|
+
14. Dashboard
|
|
115
|
+
15. TypeScript SDK
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Do not skip ahead.
|
|
119
|
+
|
|
120
|
+
Current priority:
|
|
121
|
+
|
|
122
|
+
```txt
|
|
123
|
+
Core models → SQLite schema → Action log → CLI init/log
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 6. Runewall Non-Negotiables
|
|
129
|
+
|
|
130
|
+
Runewall must remain:
|
|
131
|
+
|
|
132
|
+
* Local-first
|
|
133
|
+
* Open-source
|
|
134
|
+
* No required hosted backend
|
|
135
|
+
* No required API key
|
|
136
|
+
* No vendor lock-in
|
|
137
|
+
* Python-first
|
|
138
|
+
* CLI-first
|
|
139
|
+
* Framework-agnostic
|
|
140
|
+
* Safety-first
|
|
141
|
+
* Rollback-focused
|
|
142
|
+
|
|
143
|
+
Do not add external services.
|
|
144
|
+
|
|
145
|
+
Do not require internet except for websites agents intentionally visit.
|
|
146
|
+
|
|
147
|
+
Do not log secrets.
|
|
148
|
+
|
|
149
|
+
Do not hardcode credentials.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 7. Testing Rules
|
|
154
|
+
|
|
155
|
+
For every feature:
|
|
156
|
+
|
|
157
|
+
* Add tests.
|
|
158
|
+
* Keep tests small and focused.
|
|
159
|
+
* Prefer temp directories for file-system tests.
|
|
160
|
+
* Do not depend on real websites in core tests.
|
|
161
|
+
* Do not require external API keys.
|
|
162
|
+
* Do not require network access for core tests.
|
|
163
|
+
|
|
164
|
+
Before finishing, run:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
pytest tests/ -v
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
If tests fail, fix only the failing area.
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 8. Git / Diff Discipline
|
|
175
|
+
|
|
176
|
+
Before final response:
|
|
177
|
+
|
|
178
|
+
* Summarize changed files.
|
|
179
|
+
* Summarize tests run.
|
|
180
|
+
* Mention any tests not run.
|
|
181
|
+
* Mention any known limitations.
|
|
182
|
+
* Do not claim something works unless it was tested.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 9. These Guidelines Are Working If
|
|
187
|
+
|
|
188
|
+
* Diffs are small.
|
|
189
|
+
* No unnecessary files are touched.
|
|
190
|
+
* No speculative systems are added.
|
|
191
|
+
* Tests exist for new behavior.
|
|
192
|
+
* Clarifying questions happen before wrong implementation.
|
|
193
|
+
* Runewall grows one safe layer at a time.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
- Pending changes for the next release.
|
|
6
|
+
|
|
7
|
+
## v1.0.0
|
|
8
|
+
|
|
9
|
+
- Stable release after rc1 validation.
|
|
10
|
+
- No new features or behavior changes from rc1.
|
|
11
|
+
|
|
12
|
+
## v1.0.0-rc1
|
|
13
|
+
|
|
14
|
+
- Release candidate hardening.
|
|
15
|
+
- Public README and announcement polish.
|
|
16
|
+
- Install, quickstart, packaging, and release checklist docs stabilized.
|
|
17
|
+
- No new runtime features.
|
|
18
|
+
|
|
19
|
+
## v0.9.0
|
|
20
|
+
|
|
21
|
+
- Added PyPI/public packaging readiness.
|
|
22
|
+
- Added local build artifact verification.
|
|
23
|
+
|
|
24
|
+
## v0.8.6
|
|
25
|
+
|
|
26
|
+
- Pending release checklist polish.
|
|
27
|
+
|
|
28
|
+
## v0.8.4
|
|
29
|
+
|
|
30
|
+
- Added release checklist command.
|
|
31
|
+
- Added release checklist documentation.
|
|
32
|
+
- Added packaging/release workflow guidance.
|
|
33
|
+
|
|
34
|
+
## v0.8.3
|
|
35
|
+
|
|
36
|
+
- Added local packaging documentation.
|
|
37
|
+
- Documented local wheel and sdist build flow.
|
|
38
|
+
|
|
39
|
+
## v0.8.2
|
|
40
|
+
|
|
41
|
+
- Added package build readiness check.
|
|
42
|
+
|
|
43
|
+
## v0.8.1
|
|
44
|
+
|
|
45
|
+
- Added package readiness status.
|
|
46
|
+
|
|
47
|
+
## v0.8.0
|
|
48
|
+
|
|
49
|
+
- Added public README, install, quickstart, and demo polish.
|
|
50
|
+
- Added 60-second local demo.
|
|
51
|
+
|
|
52
|
+
## v0.7.3
|
|
53
|
+
|
|
54
|
+
- Polished community package verify docs.
|
|
55
|
+
|
|
56
|
+
## v0.7.0
|
|
57
|
+
|
|
58
|
+
- Added community package verify command.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Runewall is a local-first, open-source, CLI-first project. Please keep contributions small, focused, and easy to review.
|
|
4
|
+
|
|
5
|
+
## Local workflow
|
|
6
|
+
|
|
7
|
+
Run tests before commit:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
python -m pytest tests -v
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Run release checks:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
runewall config profile safe
|
|
17
|
+
runewall release check
|
|
18
|
+
runewall release json-check
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Maps must pass strict lint:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
runewall maps lint --strict
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Project guardrails
|
|
28
|
+
|
|
29
|
+
- do not print, store, or log tokens
|
|
30
|
+
- do not add browser automation, Playwright, a dashboard, TypeScript, or a hosted backend unless that work is explicitly scheduled
|
|
31
|
+
- keep diffs small and directly related to the task
|
|
32
|
+
- add tests for CLI behavior when changing CLI behavior
|
|
33
|
+
- prefer local-first behavior and safe defaults
|
runewall-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Runewall 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.
|
runewall-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: runewall
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Local-first runtime for logging and protecting agent actions.
|
|
5
|
+
Author: Runewall Contributors
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Keywords: agents,ai,cli,rollback,sqlite
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Requires-Dist: beautifulsoup4>=4.12
|
|
21
|
+
Requires-Dist: httpx>=0.27
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
|
|
26
|
+
# Runewall
|
|
27
|
+
|
|
28
|
+
[](https://www.python.org/)
|
|
29
|
+
[](LICENSE)
|
|
30
|
+

|
|
31
|
+

|
|
32
|
+

|
|
33
|
+

|
|
34
|
+
|
|
35
|
+
Runewall is a local-first safety/runtime layer for AI agents before they take real-world actions.
|
|
36
|
+
|
|
37
|
+
## Why Runewall?
|
|
38
|
+
|
|
39
|
+
Agents are moving from answering to acting. Once agents touch files, APIs, tools, or external systems, developers need a boundary layer that can preview actions, explain policy decisions, block risky behavior, log what happened, and rollback where possible.
|
|
40
|
+
|
|
41
|
+
## What is it?
|
|
42
|
+
|
|
43
|
+
Runewall is a local-first CLI and developer tool that sits between an agent and a real action. It helps you inspect what an agent is about to do before you let it touch the outside world.
|
|
44
|
+
|
|
45
|
+
## Why does it matter?
|
|
46
|
+
|
|
47
|
+
When agents move beyond chat and start acting on files, services, and tools, mistakes get more expensive. A local safety/runtime layer gives you a clearer review point before that action happens.
|
|
48
|
+
|
|
49
|
+
## Architecture flow
|
|
50
|
+
|
|
51
|
+
`Agent -> Runewall -> policy check -> dry-run -> review/execute/block -> log/audit`
|
|
52
|
+
|
|
53
|
+
## How do I try it?
|
|
54
|
+
|
|
55
|
+
Start with the five-minute quickstart below, or run the 60-second local demo in [demos/README.md](demos/README.md).
|
|
56
|
+
|
|
57
|
+
## What Runewall can do now
|
|
58
|
+
|
|
59
|
+
- CLI-first safety runtime
|
|
60
|
+
- dry-run before mutation
|
|
61
|
+
- local SQLite action log
|
|
62
|
+
- `policy explain`, `policy test`, and `policy audit`
|
|
63
|
+
- snapshots and rollback
|
|
64
|
+
- guarded real execution for selected services
|
|
65
|
+
- local MCP stdio surface
|
|
66
|
+
- Python SDK preview
|
|
67
|
+
- community map package verification
|
|
68
|
+
|
|
69
|
+
## 5-minute quickstart
|
|
70
|
+
|
|
71
|
+
```powershell
|
|
72
|
+
python -m pip install -e ".[dev]"
|
|
73
|
+
runewall version
|
|
74
|
+
runewall config profile safe
|
|
75
|
+
runewall policy audit
|
|
76
|
+
runewall act github create_issue --dry-run --json --input repo=user/repo --input title="Bug"
|
|
77
|
+
runewall maps community package verify examples/community-maps --json
|
|
78
|
+
runewall mcp status --json
|
|
79
|
+
runewall sdk status --json
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
What this gives you:
|
|
83
|
+
|
|
84
|
+
- confirms the CLI is installed
|
|
85
|
+
- applies safe local defaults
|
|
86
|
+
- audits current policy settings
|
|
87
|
+
- previews a mapped action without mutating anything
|
|
88
|
+
- verifies a local community package without importing it
|
|
89
|
+
- shows local MCP status
|
|
90
|
+
- shows local SDK status
|
|
91
|
+
|
|
92
|
+
## Status
|
|
93
|
+
|
|
94
|
+
Runewall is currently a local-first CLI/devtool with:
|
|
95
|
+
|
|
96
|
+
- core safety runtime
|
|
97
|
+
- MCP stdio surface
|
|
98
|
+
- Python SDK preview
|
|
99
|
+
- community package verification
|
|
100
|
+
|
|
101
|
+
## Safe by default
|
|
102
|
+
|
|
103
|
+
- real execution is disabled by default
|
|
104
|
+
- dry-run does not call external APIs
|
|
105
|
+
- tokens only come from environment variables
|
|
106
|
+
- tokens are never printed, stored, or logged
|
|
107
|
+
- community maps are non-executable
|
|
108
|
+
- package verify does not import or execute maps
|
|
109
|
+
- no hosted backend is required
|
|
110
|
+
|
|
111
|
+
## What is not included yet?
|
|
112
|
+
|
|
113
|
+
- hosted service
|
|
114
|
+
- dashboard
|
|
115
|
+
- remote registry
|
|
116
|
+
- real signature verification
|
|
117
|
+
- community map execution
|
|
118
|
+
|
|
119
|
+
## Install
|
|
120
|
+
|
|
121
|
+
See [docs/INSTALL.md](docs/INSTALL.md) for Windows PowerShell-first setup.
|
|
122
|
+
|
|
123
|
+
## Install status
|
|
124
|
+
|
|
125
|
+
- local editable install is supported
|
|
126
|
+
- PyPI publishing is future work
|
|
127
|
+
- use [docs/INSTALL.md](docs/INSTALL.md) for setup
|
|
128
|
+
- see [docs/PACKAGING.md](docs/PACKAGING.md) for local packaging notes
|
|
129
|
+
- `runewall package pypi-check` is a local readiness check only
|
|
130
|
+
- `runewall package dist-check` is a local artifact presence check only
|
|
131
|
+
|
|
132
|
+
## Quickstart
|
|
133
|
+
|
|
134
|
+
See [docs/QUICKSTART.md](docs/QUICKSTART.md) for a safe first walkthrough.
|
|
135
|
+
|
|
136
|
+
## Demo
|
|
137
|
+
|
|
138
|
+
See [demos/README.md](demos/README.md) for a 60-second local-only, token-free demo.
|
|
139
|
+
|
|
140
|
+
## 60-second demo
|
|
141
|
+
|
|
142
|
+
Run the local demo with:
|
|
143
|
+
|
|
144
|
+
```powershell
|
|
145
|
+
.\demos\runewall_60_second_demo.ps1
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
It shows:
|
|
149
|
+
|
|
150
|
+
- version
|
|
151
|
+
- safe profile
|
|
152
|
+
- policy audit
|
|
153
|
+
- dry-run
|
|
154
|
+
- community package verify
|
|
155
|
+
- MCP status
|
|
156
|
+
- SDK status
|
|
157
|
+
|
|
158
|
+
## MCP
|
|
159
|
+
|
|
160
|
+
Runewall includes a local MCP stdio surface for agent safety checks.
|
|
161
|
+
|
|
162
|
+
```powershell
|
|
163
|
+
runewall mcp status
|
|
164
|
+
runewall mcp serve --once
|
|
165
|
+
runewall mcp serve
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
See [docs/MCP_CLIENT_EXAMPLES.md](docs/MCP_CLIENT_EXAMPLES.md) for more MCP examples.
|
|
169
|
+
|
|
170
|
+
## Python SDK preview
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
from runewall.sdk import policy_test, dry_run
|
|
174
|
+
|
|
175
|
+
print(policy_test("map.execute"))
|
|
176
|
+
print(dry_run("github", "create_issue", {"repo": "user/repo", "title": "Bug"}))
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
- `runewall sdk status`
|
|
180
|
+
- `runewall sdk status --json`
|
|
181
|
+
- SDK is local-only
|
|
182
|
+
- `execute` is not exposed yet
|
|
183
|
+
- `dry_run` does not call external APIs
|
|
184
|
+
|
|
185
|
+
## Community package verify
|
|
186
|
+
|
|
187
|
+
Use community package verify as the recommended local gate before community map import or review.
|
|
188
|
+
|
|
189
|
+
```powershell
|
|
190
|
+
runewall maps community package verify examples/community-maps
|
|
191
|
+
runewall maps community package verify examples/community-maps --json
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Verify checks manifest validation, SHA-256 checksums, signing status, trusted key status, and execution safety posture.
|
|
195
|
+
|
|
196
|
+
Verify does not import maps, execute maps, download remote files, or call external APIs.
|
|
197
|
+
|
|
198
|
+
## More docs
|
|
199
|
+
|
|
200
|
+
- [docs/INSTALL.md](docs/INSTALL.md)
|
|
201
|
+
- [docs/PACKAGING.md](docs/PACKAGING.md)
|
|
202
|
+
- [docs/QUICKSTART.md](docs/QUICKSTART.md)
|
|
203
|
+
- [docs/ROADMAP.md](docs/ROADMAP.md)
|
|
204
|
+
- [demos/README.md](demos/README.md)
|
|
205
|
+
- [docs/COMMUNITY_MAPS.md](docs/COMMUNITY_MAPS.md)
|
|
206
|
+
- [docs/PYTHON_SDK_EXAMPLES.md](docs/PYTHON_SDK_EXAMPLES.md)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Runewall Starter Folder
|
|
2
|
+
|
|
3
|
+
Open this folder in VS Code and ask Codex to build one slice at a time.
|
|
4
|
+
|
|
5
|
+
Start with this prompt:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
You are building Runewall.
|
|
9
|
+
|
|
10
|
+
Read:
|
|
11
|
+
- brain/runewall-brain-bundle.md
|
|
12
|
+
- brain/runewall-technical-spec.md
|
|
13
|
+
|
|
14
|
+
Build ONLY the initial Python package skeleton from the technical spec.
|
|
15
|
+
|
|
16
|
+
Do not build dashboard.
|
|
17
|
+
Do not build Playwright/browser translation.
|
|
18
|
+
Do not build maps yet.
|
|
19
|
+
Do not build TypeScript yet.
|
|
20
|
+
Do not add extra features.
|
|
21
|
+
|
|
22
|
+
Create:
|
|
23
|
+
- pyproject.toml
|
|
24
|
+
- LICENSE with MIT
|
|
25
|
+
- README.md placeholder
|
|
26
|
+
- runewall/__init__.py
|
|
27
|
+
- runewall/core/__init__.py
|
|
28
|
+
- runewall/core/models.py
|
|
29
|
+
- runewall/core/db.py
|
|
30
|
+
- runewall/core/log.py
|
|
31
|
+
- runewall/cli/__init__.py
|
|
32
|
+
- runewall/cli/main.py
|
|
33
|
+
- tests/conftest.py
|
|
34
|
+
- tests/core/test_log.py
|
|
35
|
+
|
|
36
|
+
Goal:
|
|
37
|
+
- `runewall init` creates `.runewall/runewall.db`
|
|
38
|
+
- SQLite schema includes actions, snapshots, rules, checkpoints
|
|
39
|
+
- A test can create an Action, save it, and list it back
|
|
40
|
+
|
|
41
|
+
Keep the implementation small, clean, typed, and tested.
|
|
42
|
+
```
|