deadbolt / index.html
bizbots's picture
Correct stable Rust installation anchor
2ff8678 verified
Raw History Blame Contribute Delete
10.9 kB
<!doctype html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>DeadBolt · NextEleven</title>
<style>
:root{color-scheme:dark;--bg:#10151e;--panel:#192230;--line:#3a485c;--text:#f1f4f9;--muted:#c1ccdc;--blue:#91baff;--green:#9aebbe}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:18px/1.6 system-ui,sans-serif}main,header,footer{max-width:1120px;margin:auto;padding:26px}header{display:flex;gap:22px;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line)}nav{display:flex;gap:18px;flex-wrap:wrap}a{color:var(--blue);text-underline-offset:4px}a:hover{color:white}h1{font-size:clamp(42px,6.5vw,70px);line-height:1.1;letter-spacing:-.045em;max-width:900px;margin:22px 0}h2{font-size:30px;line-height:1.25}h3{font-size:21px;margin:8px 0}p{max-width:900px}.eyebrow{color:var(--blue);font-size:15px;letter-spacing:.09em;text-transform:uppercase}.lead{font-size:22px;color:var(--muted)}.actions{display:flex;gap:14px;flex-wrap:wrap;margin:26px 0}.button,button{background:#99bdff;color:#101b30;padding:12px 18px;border-radius:8px;border:0;font:inherit;font-weight:650;cursor:pointer;text-decoration:none}.button.secondary{background:var(--panel);color:var(--text);border:1px solid var(--line)}.panel{border:1px solid var(--line);border-radius:14px;padding:26px;margin:24px 0;background:var(--panel)}.notice{border-left:3px solid var(--blue);padding:8px 18px;color:var(--muted)}.grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.grid .panel{margin:0}select{font:inherit;color:var(--text);background:var(--bg);padding:14px;border:1px solid var(--line);width:100%;border-radius:8px;margin:10px 0}label{display:block;font-weight:650}pre{padding:18px;background:var(--bg);border:1px solid var(--line);border-radius:8px;overflow:auto;font-size:15px;white-space:pre-wrap;overflow-wrap:anywhere}.effect{font-size:24px;color:var(--green);font-weight:650}video{width:100%;background:#000;border-radius:8px}summary{cursor:pointer;font-weight:650}.muted{color:var(--muted)}footer{font-size:15px;border-top:1px solid var(--line)}:focus-visible{outline:3px solid var(--blue);outline-offset:4px}@media(max-width:760px){header{display:block}nav{margin-top:14px}.grid{grid-template-columns:1fr}main,header,footer{padding:18px}.panel{padding:20px}}
</style></head><body>
<header><strong>NextEleven / DeadBolt</strong><nav aria-label="Project links"><a href="https://github.com/seanebones-lang/deadbolt">Source</a><a href="https://seanebones-lang.github.io/deadbolt/">Project site</a><a href="https://www.nexteleven.dev">NextEleven</a></nav></header>
<main><p class="eyebrow">Local execution control · Free under Apache-2.0</p><h1>Let agents work.<br>Keep control of their actions.</h1><p class="lead">Put a permission check in the code that runs the action. Decide what may execute, require operator approval when needed, and keep evidence of the decision.</p>
<div class="actions"><a class="button" href="https://github.com/seanebones-lang/deadbolt/blob/v2.0.0/docs/QUICKSTART.md">Try one bounded action</a><a class="button secondary" href="https://github.com/seanebones-lang/deadbolt/blob/v2.0.0/docs/INTEGRATION.md">Choose your integration</a></div>
<p class="notice"><strong>Current stable release: 2.0.0.</strong> Fixed run deadlines, optional supervisor-only liveness, private operator state and readable denials. Conflicting recognized destinations and damaged-store startup are refused. <a href="https://seanebones-lang.github.io/deadbolt/editors-v2.html">Stable MCP bundle and editor setup</a>. Published qualification is linked separately from this historical replay; prior RC3 GUI/model tests are not certification. We will review feedback weekly, with 2.0.0 as the baseline through October 19. Tested Apache-2.0 contributions are welcome.</p>
<section class="panel" aria-labelledby="evidence-title"><p class="eyebrow">Inspect a real execution check</p><h2 id="evidence-title">An allow runs the body. A denial leaves it uncalled.</h2><p>This browser replays recorded results from a real disposable-file evaluation on Apple Silicon macOS, using the installed <strong>1.1.0-rc.1</strong> Python client and native binary. These are historical recorded results, not a rerun of stable 2.0.0. No agent or sidecar runs in this Space.</p><label for="scenario">Choose a recorded check</label><select id="scenario" disabled><option>Loading recorded evidence…</option></select><div id="result" role="status" aria-live="polite">Loading…</div><details><summary>Read the complete recorded report</summary><pre id="report"></pre></details><p class="notice">Nine synthetic checks; zero model requests. Automated fixture approvals are for testing only. Your production operator must review approvals, and your own protected routes need acceptance tests. <a href="evaluation.json">Download the report</a>.</p></section>
<div class="grid"><section class="panel"><h2>Build it in</h2><p>Embed Rust at your executor's dispatch point, or put a local HTTP sidecar around the real Python or Node callback.</p><p><a href="https://github.com/seanebones-lang/deadbolt/blob/v2.0.0/docs/INTEGRATION.md">Rust / HTTP / Node integration</a></p><p><a href="https://github.com/seanebones-lang/deadbolt/blob/v2.0.0/docs/PYTHON.md">Python dispatch and SDK decorator</a></p></section><section class="panel"><h2>Bolt it on</h2><p>Wrap a trusted stdio MCP server and gate its routed tool calls. Keep operator credentials outside model-controlled code.</p><p><a href="https://github.com/seanebones-lang/deadbolt/blob/v2.0.0/docs/INTEGRATION.md#bolt-on-stdio-mcp-proxy">MCP proxy integration</a></p><p><a href="https://github.com/seanebones-lang/deadbolt/blob/v2.0.0/docs/CREDENTIALS.md">Scoped admission credentials</a></p></section></div>
<section class="panel"><h2>Try it without an AI account</h2><p>Download the native archive for your OS and verify its checksum. From the extracted directory on macOS or Linux:</p><pre><code>chmod 0755 deadbolt
./deadbolt drill
python3 examples/evaluate.py --binary ./deadbolt</code></pre><p>Expected: <code>deadbolt drill ok</code>, then a JSON report with <code>"passed": true</code>. Python 3.9+ is needed for the evaluation. Windows commands and setup are in the guide.</p><p><a href="https://github.com/seanebones-lang/deadbolt/releases/tag/v2.0.0">Stable downloads and qualification</a> · <a href="https://github.com/seanebones-lang/deadbolt/releases/tag/v1.0.3">Historical 1.0.3 release</a> · <a href="https://github.com/seanebones-lang/deadbolt/blob/v2.0.0/docs/INSTALL.md">Installation guide</a></p><p class="notice">The Python wheel does not bundle the executable; install the matching engine separately. <a href="https://pypi.org/project/n11-deadbolt-client/2.0.0/">Python client 2.0.0 on PyPI</a> · <a href="https://github.com/seanebones-lang/deadbolt/blob/main/docs/INSTALL.md#reviewed-source-candidate">Rust CLI/library from exact stable source</a>. Read the <a href="https://github.com/seanebones-lang/deadbolt/blob/v2.0.0/docs/MIGRATING-V2.md">migration guide</a> before upgrading. No npm package is offered here.</p></section>
<section class="panel"><h2>Watch it work · 4:31 overview</h2><p class="muted">Visible English captions throughout. You can follow on mute.</p><video controls playsinline preload="none" aria-label="DeadBolt captioned overview"><source src="https://github.com/seanebones-lang/deadbolt/releases/download/walkthrough-2026-10-10/deadbolt-showcase-extract-cedar-captioned.mp4" type="video/mp4"></video><p><a href="https://youtu.be/9MEIVQnIm0g">Overview on YouTube</a> · <a href="https://youtu.be/fhj8dmwdMbk">Full developer walkthrough · 21:17</a> · <a href="https://seanebones-lang.github.io/deadbolt/walkthrough.html">Read the transcript</a></p><p class="notice">Videos were recorded before prerelease publication; candidate-status narration reflects that date. Cedar narration is AI-generated. Harness uses a deterministic local demo provider; its dispatcher and file effects are real. Presentation slides explain the system.</p></section>
<section class="panel"><h2>Make the boundary explicit</h2><p>DeadBolt protects actions routed through its gate. Your trusted executor supplies identity, tools, destinations and reported spend. The operator controls policy, approvals and revocation. Ordinary Rust/HTTP admission leaves unset tool policy open; MCP admission requires a nonempty tool allowlist. Configure policy before dispatch.</p><p>It does not sandbox arbitrary code, cancel an already running effect, independently meter billing, or make an external effect transactional with admission. Evidence records are not a compliance certification.</p><p><a href="https://github.com/seanebones-lang/deadbolt/blob/v2.0.0/docs/TRUST.md">Read the trust boundary</a> · <a href="https://github.com/seanebones-lang/deadbolt/blob/v2.0.0/docs/PILOT.md">Run an integration pilot</a> · <a href="https://github.com/seanebones-lang/deadbolt/issues/new/choose">Share an integration problem</a></p></section>
</main><footer>Built by <a href="https://www.nexteleven.dev">NextEleven</a> · Free under Apache-2.0 · Showcase prepared with AI assistance; recorded decisions produced by the actual application.</footer>
<script>
const labels={'operator-control-denied':'Workload tries an operator control','wrong-run-denied':'Credential targets another run','allowed-write':'Allowed file write','off-policy-denied':'Tool outside policy','exact-changed-content-denied':'Approved content is changed','exact-approved-once':'Exact approved content executes once','exact-replay-denied':'Approval is replayed','killed-run-denied':'Run has been revoked','sidecar-outage-denied':'Sidecar is unavailable'};
const result=document.getElementById('result'),select=document.getElementById('scenario');let report;
function render(){const check=report.checks[Number(select.value)];result.replaceChildren();const heading=document.createElement('h3');heading.textContent=labels[check.case];const body=document.createElement('p');body.className='effect';body.textContent=check.body_ran?'Recorded effect: callback ran':'Recorded effect: callback did not run';const code=document.createElement('pre');code.textContent=JSON.stringify(check,null,2);result.append(heading,body,code);}
select.addEventListener('change',render);
fetch('./evaluation.json').then(r=>{if(!r.ok)throw new Error('Report unavailable');return r.json()}).then(data=>{report=data;select.replaceChildren();report.checks.forEach((check,i)=>{const option=document.createElement('option');option.value=String(i);option.textContent=labels[check.case];select.append(option)});select.value='2';select.disabled=false;document.getElementById('report').textContent=JSON.stringify(report,null,2);render()}).catch(()=>{result.textContent='Recorded report could not load. Use the linked local evaluation guide.'});
</script></body></html>