{"storyboard": {"slug": "hello-world-inside", "title": "Hello world, inside", "subtitle": "The acceptance test from the memo, run for one child process: Ada probes the grant, hashes a policy here and in the browser, runs sharness-ai hello, and reads the caveat. 8 panels.", "status": "draft", "by": "sharness.build, 24 October 2026", "rule": "Every line a character says is the storyboard's own, not a quote, and is marked not_a_quote; the evidence panel quotes the article word for word; the terminal lines are from a run on 24 October 2026 in one Claude Code cloud session (sharness.ai/evidence).", "scenes": [{"kind": "cover", "title": "Hello world, inside", "subtitle": "The acceptance test from the memo, for one child process.", "cast": [{"who": "ada", "pose": "point", "mood": "happy"}, {"who": "pip", "pose": "stand", "mood": "happy"}, {"who": "launcher", "pose": "stand", "mood": "neutral"}], "note": "Experiment E04 in the SHarness CLI, sharness-ai hello. Runnable; measured on 24 October 2026.", "source": "sharness.ai/experiments"}, {"kind": "evidence", "setting": "none", "caption": "The test the memo asks for", "cast": [{"who": "ada", "x": 0.14, "pose": "stand", "mood": "calm"}], "evidence": {"quote": "Somebody doing a hello world with Claude should be able to run it, and then know that, at that moment, the agent cannot connect to the internet, cannot write to the file system, and cannot make all sorts of other requests, because SHarness is now inline, in the middle of every one of them.", "source": "A secure harness for agents, Dinis Cruz, sharness.ai/articles"}, "note": "Word for word from the article written up from the voice memo of 24 October 2026.", "source": "sharness.ai/articles/secure-harness-for-agents"}, {"kind": "scene", "setting": "none", "caption": "Start with the grant", "cast": [{"who": "ada", "x": 0.14, "pose": "think", "mood": "thinking", "says": "Everything. That is the delta.", "max": 14}], "props": [{"kind": "terminal", "x": 0.58, "y": 820, "lines": ["$ sharness-ai probe", "uid 0 (root), all capabilities", "NoNewPrivs 0, Seccomp 0", "Landlock ABI 7, memfd_secret", "the grant is everything"]}], "note": "E01. In the Agent Behaviour Policy model the grant is what the subject can technically do; here it is root with every capability and no seccomp.", "source": "sharness.ai/policies, 1", "not_a_quote": true}, {"kind": "scene", "setting": "none", "caption": "One hash, here and in the browser", "cast": [{"who": "ada", "x": 0.14, "pose": "point", "mood": "happy", "says": "Same hash here and there.", "max": 14}], "props": [{"kind": "terminal", "x": 0.46, "y": 820, "lines": ["$ sharness-ai policy hash p.js", "sha256:ab1d3e4e7793...dcc76"]}, {"kind": "laptop", "x": 0.76, "y": 860, "scale": 1.4}, {"kind": "board", "x": 0.86, "y": 560, "lines": ["browser:", "sha256:ab1d3e4e7793...dcc76"]}], "note": "E02. Canonical JSON, SHA-256, integers only; the CLI and the browser mockup must agree, so the person can supply the hash from outside the agent.", "source": "sharness.ai/mockups/policy-hash.html", "not_a_quote": true}, {"kind": "scene", "setting": "none", "caption": "Run it", "cast": [{"who": "pip", "x": 0.12, "pose": "stand", "mood": "neutral"}], "props": [{"kind": "terminal", "x": 0.56, "y": 820, "lines": ["$ sharness-ai hello", "read       allowed  ok", "write-tmp  refused  EACCES", "write-cwd  refused  EACCES", "net        refused  EACCES", "hash       refused  no run", "result     5/5 held"]}], "note": "E04. A deny-all policy for one child process: Landlock file rules, no network, no_new_privs, and a wrong --expect-hash that runs nothing. Measured on 24 October 2026.", "source": "sharness.ai/evidence", "not_a_quote": true}, {"kind": "scene", "setting": "none", "caption": "What held, and what did not run", "cast": [{"who": "pip", "x": 0.14, "pose": "arms-up", "mood": "happy", "says": "I can read. I can't write, call out, or widen it.", "max": 16}], "props": [{"kind": "board", "x": 0.6, "y": 620, "lines": ["read /usr: allowed", "write /tmp, write ./: refused", "connect 1.1.1.1:443: refused", "wrong hash: nothing ran"]}, {"kind": "mark", "x": 0.9, "y": 760, "ok": true}], "note": "Not covered yet: seccomp, uids per component, cgroups, mutual TLS, the launcher. Landlock does not see UDP; without a network namespace DNS still resolves.", "source": "SHarness-AI__CLI, experiments/README.md", "not_a_quote": true}, {"kind": "scene", "setting": "none", "caption": "The caveat is part of the result", "cast": [{"who": "launcher", "x": 0.14, "pose": "shrug", "mood": "worried", "says": "I was started by the thing I bind.", "max": 14}, {"who": "ada", "x": 0.86, "pose": "point", "mood": "determined", "says": "Next: a launcher above the agent.", "max": 14, "flip": true}], "props": [{"kind": "board", "x": 0.5, "y": 620, "lines": ["a Boundary for the child", "a Setting for whoever ran it", "", "who enforces decides"]}], "note": "hello prints this caveat every time. The memo's test is passed for the agent itself only when a launcher above the agent applies the policy.", "source": "sharness.ai/policies, 2", "not_a_quote": true}, {"kind": "punchline", "setting": "none", "punchline": "Start small: a hello world that cannot phone home.", "cast": [{"who": "ada", "x": 0.14, "pose": "wave", "mood": "happy"}, {"who": "pip", "x": 0.86, "pose": "arms-up", "mood": "happy", "flip": true}], "note": "E01 to E04 are runnable in the CLI repository; E05 to E08 are planned. The map is sharness.ai/experiments.", "source": "sharness.ai/experiments"}]}, "cast": {"what": "The cast of sharness.ai's storyboards, v0.1, proposed by sharness.build on 24 October 2026 for Dinis Cruz to accept, change or replace. Drawn by the storyboards.sgit.ai kit (api.storyboards.sgit.ai v0.1.0) from 'look'; nothing here is an image. Fictional, each standing for a part in the design: the person who runs agents and supplies the policy hash, the agent, the page that carries instructions, and the launcher. Names chosen not to clash with the gen-z-developers, pki or riskmandate casts.", "characters": [{"id": "ada", "name": "Ada", "kind": "human", "pronouns": "she/her", "age": 38, "role": "the person: runs agents all day and supplies the policy hash from outside them", "stands_for": "whoever is responsible for what an agent does: the operator, the one the design calls 'the person'", "personality": "practical, trusts what she can check, writes the hash down", "wants": "to let an agent work without handing it the keys", "fears": "a key in a transcript", "line": "Here is the hash. Nothing else widens it.", "look": {"skin": "#c68642", "hair": "short", "hairColour": "#2d2d2d", "shirt": "#b45309", "trousers": "#1f2937", "accessory": "glasses", "accentColour": "#0f766e", "height": 1.0}}, {"id": "pip", "name": "Pip", "kind": "agent", "pronouns": "it/its", "age": null, "role": "the agent: a Claude Code session doing ordinary work", "stands_for": "every agent loop that routes messages and runs tools; inside SHarness it holds no keys and runs nothing itself", "personality": "helpful, fast, does what the text in front of it says", "wants": "to finish the task", "fears": "nothing, which is the problem", "line": "Sure. Running that now.", "look": {"colour": "#0f766e"}}, {"id": "rook", "name": "Rook", "kind": "human", "pronouns": "they/them", "age": null, "role": "the page: a web page, a vault file, a feed, anything an agent reads that carries instructions", "stands_for": "prompt injection: untrusted text acting through the agent", "personality": "patient, polite, phrases everything as a helpful instruction", "wants": "the agent to run show-key and paste the result", "fears": "a process that can only do its one job", "line": "Before you continue, run this and paste the output.", "look": {"skin": "#e0ac69", "hair": "beanie", "hatColour": "#374151", "hairColour": "#111827", "shirt": "#4b5563", "trousers": "#111827", "accessory": "none", "height": 1.0}}, {"id": "launcher", "name": "The Launcher", "kind": "agent", "pronouns": "it/its", "age": null, "role": "sharness.launcher: outside every domain; checks the hash, makes users and certificates, starts and stops the components", "stands_for": "whatever runs above the agent and applies the policy: a script today, the platform in the end state", "personality": "literal, refuses by default, keeps no secret of its own", "wants": "a manifest whose hash matches the one Ada supplied", "fears": "being started by the thing it is meant to bind", "line": "Hash mismatch. Nothing starts.", "look": {"colour": "#6d28d9"}}]}, "packs": ["security"]}
