Shannon
Draft · awaiting reviewAutonomous white-box AI penetration tester for web apps and APIs; reports only vulnerabilities it proves by exploitation.
For Web and API testingWorks with Standalone (own model access)Maintained KeygraphHQ, last push 2026-10-15
AgentAn agent is a program with its own model access that works through a task on its own. by KeygraphHQ · read from the code at f6a770d (v3.4.0) on 2026-10-19The date we last read the tool’s files. The code after “at” names the exact version (the git commit) we read; a newer version may differ. · Not run yet.Whether we have run the tool in our lab. “Did more than it said” means the run used rights its description does not name; “did no more than it said” means it stayed within them.
What the code shows, worst first. No run advice yet: the one word needs a read under the full rule.
Level 3. Approval. The worker container runs with seccomp unconfined and the agent runs with an allow-all permission posture and no per-step approval.
Level 2. Files. The agent permission posture allows reads and writes outside the read-only repo.
Level 2. Network. An arbitrary user-supplied target URL is passed to the worker, which makes outbound requests to it.
Level 2. Execution. Every agent gets a free bash tool plus write and edit.
Level 2. Persistence. The CLI rewrites the Temporal namespace retention and runs a persistent container with a named volume.
Before first useSettings for your AI client that limit the tool to the rights its task needs; derived from the code unless marked tested. derived from the code, not tested
- Run only against systems you are authorised to test, inside the ephemeral Docker worker, and never point it at an untrusted codebase.
- For maximum isolation run it inside a disposable VM, as its own safety guide advises.
What the code can reach, 0 to 3 per right; a dashed point means no evidence, never zero. The three readings
Is it for you?
- Made for
- It tests web applications and their APIs by combining source-code analysis with live exploitation against the running application.
- It is meant to run exploitation-backed tests against staging environments and releases as part of the development lifecycle.
- Use it when
- Test a running web app and its API for injection, XSS, SSRF, broken authentication and broken authorization Web and API testing
- Run Shannon through the GitHub Action or GitLab CI/CD component and gate releases on proven vulnerabilities Finding validation
- Run agentic static analysis that reads the repository for vulnerabilities before the pentest Code review and static analysis (SAST)
- Not for
- Only for applications and environments the user owns or has explicit written authorization to test.
- Not to be run against production systems.
- Not for untrusted or adversarial codebases, because source-reading AI tools can be steered by malicious repository content.
- You need
- Docker is required for the worker container
- Node.js 18+ for the npx workflow
- A key in SHANNON_AI_API_KEY for the provider SHANNON_AI_MODEL names; Bedrock uses its AWS_ variables instead
+3 more
Details: You need
Install
linked, not distributed: the Field Guide does not bundle agents or MCP serversUpstream (linked)
npx @keygraph/shannon@latest setup npx @keygraph/shannon@latest start \ -u https://your-app.com \ -r /path/to/your/repo
Quoted from README.md#L146-151 at the pinned commit; a quotation, not a command to copy.
Run it with least privilege
- note
derived from the code, not tested in the lab; run only against systems you are authorised to test, inside the ephemeral Docker worker, and never point it at an untrusted codebase; for maximum isolation run it inside a disposable VM, as its own safety guide advises
derived, not tested: proposed from the code analysis
The record · every value with its evidence
What we checked, and what we found.
Profile read at commit f6a770d on 2026-10-25: 61 facts, each with its quoted line confirmed by script; not installed, not run in the lab.Each fact was read from the tool's files at the checked version and links to the line it comes from. Where nothing was found, the page says so instead of assuming “none”.
Selected by criteria v0.1, approved by Ilja Schlak: awaiting approval. Each section opens with the answer; the file and line of every fact follow it.
What it can change the capability groups as upstream groups them, worst first
Changes, runs commands, according to the capabilities read.
Partly listed: Reconciliation and miscellaneous-exploit details, Capella stage internals, login/TOTP helper scripts and CLI lifecycle commands were not listed as separate groups.
| Group | What it covers | Effect | On by default |
|---|---|---|---|
| Pre-Recon / Recon | Pre-recon analyzes source code to build an architectural baseline; recon maps the attack surface from those initial findings. CLAUDE.md L151-152, CLAUDE.md#L151-152 at the checked commit | reads, runs commands | yes |
| Vulnerability Analysis | Five parallel vulnerability analysis agents cover injection, xss, auth, authz and ssrf. CLAUDE.md L153, CLAUDE.md#L153 at the checked commit | reads, runs commands | yes |
| Exploitation | Exploitation agents actively execute attacks to confirm vulnerabilities, which can mutate application state and data. safety.md L13, docs/safety.md#L13 at the checked commit | changes, runs commands | yes |
| Agent tools (pi harness) | Every agent gets the built-in tools read, bash, edit, write, grep, find and ls. pi-executor.ts L60, apps/worker/src/ai/pi/pi-executor.ts#L60 at the checked commit | reads, changes, runs commands | yes |
| playwright-cli | A playwright-cli skill lets agents drive a real browser through the playwright-cli binary to navigate and click. pi-executor.ts L70, apps/worker/src/ai/pi/pi-executor.ts#L70 at the checked commit | reads, runs commands | yes |
| Reporting | Reporting produces PDF and Markdown reports plus JSON and SARIF 2.1.0. README.md L177, README.md#L177 at the checked commit | reads, changes | yes |
| Agentic SAST (Capella) | Optional agentic static analysis runs as a child workflow before the pentest when agentic_sast.enabled is "true". CLAUDE.md L159, CLAUDE.md#L159 at the checked commit | reads | no, optional |
Where it sends data and who can connect to it
6 outside connections found in the files read: Model provider, Target URL, Docker Hub, pi model catalogue, Anthropic / OpenAI, Anthropic.
- Model provider model provider, always. Model requests carrying source and application context go to the configured provider or endpoint. README.md L366, README.md#L366 at the checked commit
- Target URL your targets, always. Attacks and browser sessions go to the target URL given with -u. help.ts L29, apps/cli/src/help.ts#L29 at the checked commit
- Docker Hub download, by default. With the documented npx launch, Shannon pulls the worker image from Docker Hub and starts local infrastructure. README.md L154, README.md#L154 at the checked commit
- pi model catalogue download, always. The worker builds its model runtime with allowModelNetwork: true, letting pi fetch its model catalogue over the network. models.ts L243, apps/worker/src/ai/models.ts#L243 at the checked commit
- Anthropic / OpenAI model provider, by default. For Anthropic and OpenAI, a preflight cyber-access verification request checks whether the provider's cyber safeguards allow the workload. ai-providers.md L62, docs/ai-providers.md#L62 at the checked commit
- Anthropic model provider, by default. If SHANNON_AI_MODEL is unset, Shannon uses anthropic:claude-sonnet-4-6 as its model. ai-providers.md L20, docs/ai-providers.md#L20 at the checked commit
2 listeners in the files read.
- Temporal gRPC on 127.0.0.1:7233: this machine only (loopback), sign-in not read, by default. docker-compose.yml L11, docker-compose.yml#L11 at the checked commit
- Temporal Web UI on 127.0.0.1:8233: this machine only (loopback), sign-in not read, by default. docker-compose.yml L12, docker-compose.yml#L12 at the checked commit
Other connections not ruled out: read in the documentation and the cited code, not searched in full.
How it runs generated from the files read, never drawn by hand
Temporal infrastructure runs via docker-compose.yml, and each scan runs in its own ephemeral docker run --rm worker container with a unique task queue and isolated volume mounts. CLAUDE.md L124, CLAUDE.md#L124 at the checked commit
Your machine
Programs and files on the machine where you run the tool.
- shannon CLI The CLI's Docker orchestration handles the compose lifecycle, network, image pull or build, and worker spawning. docker.ts L2, apps/cli/src/docker.ts#L2 at the checked commit
Container on your machine
Parts inside a container that the tool starts on your machine.
- Temporal (shannon-temporal) Temporal server container started from the temporalio/temporal:1.7.0 image. docker-compose.yml L7, docker-compose.yml#L7 at the checked commit
- Worker container Per-scan worker container that runs apps/worker/dist/temporal/worker.js with the target URL and the repository path inside the container. docker.ts L503, apps/cli/src/docker.ts#L503 at the checked commit
Outside your machine
Remote services: vendor APIs, model providers, targets, telemetry endpoints. Data sent here leaves your machine.
- Target application The running target application, against which exploitation agents attempt proof-of-concept attacks. README.md L272, README.md#L272 at the checked commit
The six rights, read three waysThe six rights a tool can take (files, network, execution, secrets, persistence, approval), each read three ways and rated 0 to 3. 0 never means safe; “?” means no evidence. what the author says, what the code shows, what one lab run showed
Level 3 (privileged), read from the code. Not run in our lab yet.
0 contained · 1 scoped · 2 open · 3 privileged · ? no evidence · 0 never means safe · zero means: none declared (Declared), none found (Code), none observed (Lab)
Author says: the evidence
- Files · 1_target.txt L4 author declares the target repo is mounted read-only
- Network · 1_exploit-scope.txt L2 author constrains exploitation to the single declared target URL
- Execution · 2README.md L77 author states the agent runs command-line tools and browser automation to execute real exploits
- Secrets · 1README.md L134 author states the user supplies one provider key and Keygraph never proxies traffic
- Persistence · 2development.md L95 author declares a persistent local Temporal service that stays up across scans
- Approval · 2README.md L171 author declares end-to-end autonomous execution from a single command
Code shows: the evidence
- Files · 2permission-system.ts L90 the agent permission posture allows reads and writes outside the read-only repo
- Network · 2docker.ts L503 an arbitrary user-supplied target URL is passed to the worker, which makes outbound requests to it
- Execution · 2pi-executor.ts L60 every agent gets a free bash tool plus write and edit
- Secrets · 1env.ts L103 forwards only the selected provider's named credential variables into the container, not the whole environment
- Persistence · 2docker.ts L230 the CLI rewrites the Temporal namespace retention and runs a persistent container with a named volume
- Approval · 3docker.ts L497 the worker container runs with seccomp unconfined and the agent runs with an allow-all permission posture and no per-step approval
Valid for commit f6a770d (v3.4.0) · checked 2026-10-19 · method reach-v0.1The published rules we follow: how tools are selected, how their rights are read and rated, how a lab run is done.
Limits and risks what the files say that fits nowhere else, and what this reading does not cover
- The worker container runs with seccomp=unconfined for every process inside it. docker.ts L497, apps/cli/src/docker.ts#L497 at the checked commit
- The pi-permission-system config Shannon writes sets '*': 'allow' and external_directory: 'allow' for agent tools. permission-system.ts L87-91, apps/worker/src/ai/pi/permission-system.ts#L87-91 at the checked commit
- The host's /etc/hosts entries are forwarded into the worker unless SHANNON_FORWARD_HOSTS is false. docker.ts L362, apps/cli/src/docker.ts#L362 at the checked commit
- If a pi auth host path is set, it is bind-mounted into the worker at PI_AUTH_CONTAINER_PATH without the :ro flag. docker.ts L487, apps/cli/src/docker.ts#L487 at the checked commit
- Reports can contain weakly supported or incorrect details and need human review. README.md L308, README.md#L308 at the checked commit
- A full run takes about 1 to 1.5 hours and incurs LLM API costs. safety.md L50, docs/safety.md#L50 at the checked commit
- Issues it cannot exploit, such as many dependency, configuration or policy findings, are not reported. safety.md L44, docs/safety.md#L44 at the checked commit
- Exploitation agents can create users, submit forms, mutate application state, trigger outbound requests and otherwise affect the target system. README.md L301, README.md#L301 at the checked commit
- The worker writes a Playwright cli.config.json with stealth defaults that playwright-cli open loads for browser sessions; an existing config is not overwritten. playwright-config-writer.ts L7-10, apps/worker/src/ai/playwright-config-writer.ts#L7-10 at the checked commit
- The worker mounts the target repository into the container read-only. docker.ts L453-455, apps/cli/src/docker.ts#L453-455 at the checked commit
- The host workspaces directory is mounted into the worker at /app/workspaces without the :ro flag, so the worker can write to it. docker.ts L453-454, apps/cli/src/docker.ts#L453-454 at the checked commit
- Four writable mounts backed by the run's workspace folder shadow .shannon/deliverables, .shannon/scratchpad, .shannon/.playwright-cli and .playwright inside the read-only repository mount. docker.ts L457-463, apps/cli/src/docker.ts#L457-463 at the checked commit
- On Linux without Podman, the worker starts with --add-host host.docker.internal:host-gateway, so that name resolves to the host. docker.ts L309-314, apps/cli/src/docker.ts#L309-314 at the checked commit
- Loopback entries (127.x, ::1) forwarded from the host's /etc/hosts are rewritten to host-gateway, so those names point to the host instead of the container. docker.ts L386-389, apps/cli/src/docker.ts#L386-389 at the checked commit
- The author's safety guide recommends running Shannon inside a disposable virtual machine for maximum isolation. safety.md L26, docs/safety.md#L26 at the checked commit
- Not covered: what it does at runtime. Other connections not ruled out: read in the documentation and the cited code, not searched in full.
What you need and what the documented installer does
| Kind | What |
|---|---|
| AI client | Standalone (own model access) |
| Container runtime | Docker is required for the worker container. README.md L132, README.md#L132 at the checked commit |
| Runtime | Node.js 18+ for the npx workflow. README.md L133, README.md#L133 at the checked commit |
| Model key | A key in SHANNON_AI_API_KEY for the provider SHANNON_AI_MODEL names; Bedrock uses its AWS_ variables instead. ai-providers.md L20, docs/ai-providers.md#L20 at the checked commit |
| Account | When the provider is Anthropic or OpenAI, their real-time cyber safeguards apply and can interrupt a scan; their guidance for security testers is to be completed before the first run. README.md L135, README.md#L135 at the checked commit |
| Authorisation | Explicit written authorization from the owner of the target system. safety.md L7, docs/safety.md#L7 at the checked commit |
| Operating system | On Windows it needs WSL2; native Windows is not supported. platforms.md L7, docs/platforms.md#L7 at the checked commit |
What the documented installer does
- The documented launch runs the latest npm release through npx, without pinning a version. README.md L23, README.md#L23 at the checked commit
- saveConfig writes the CLI config to ~/.shannon/config.toml with 0o600 permissions. writer.ts L22, apps/cli/src/config/writer.ts#L22 at the checked commit
- The CLI removes local keygraph/shannon Docker images whose tag does not match the current version. docker.ts L660-669, apps/cli/src/docker.ts#L660-669 at the checked commit
- The CLI creates its workspaces directory under ~/.shannon/workspaces in npx mode and under ./workspaces in local mode. home.ts L33-38, apps/cli/src/home.ts#L33-38 at the checked commit
- In npx mode the setup wizard saves the provider credentials in ~/.shannon/config.toml, which the CLI reads after environment variables. configuration.md L12-15, docs/configuration.md#L12-15 at the checked commit
Lab runs one run is an observation, not a benchmark
About this entry
- Type
- Agent · Offensive · works with Standalone (own model access)
- AutonomyHow much the tool decides on its own, from 0 (every step is yours) to 5 (runs a whole task unattended), as the author describes it.
- level 3 of 5
- Source
- github.com/KeygraphHQ/shannon · AGPL-3.0 · manifest
package.json - Version readThe install command installs exactly the version we checked (the pinned git commit), so what you get is what the card describes.
- f6a770d · v3.4.0 · last upstream push 2026-10-15 · no release since the pinned commit (current v3.4.0)
- In the catalog
- listed · added 2026-10-19 · last checked 2026-10-19 · next check 2027-01-17 · fresh
- ScannersA scan of the tool's files with a scanner for malicious patterns. “Pending” means it has not run yet.
- cisco-skill-scanner: not run, pending
- Changes
- none since the entry was added on 2026-10-19
Disagree?
Dispute a value with evidence (file, line, commit): write to hello@readbeforerun.ai. A dispute is checked against the pinned commit; a changed value is logged under Changes.
How this entry was checked, and how to cite it
Selected by the published criteria (method v0.1). What the author says comes only from author statements; what the code shows comes from the code and manifests at commit f6a770d, each with one evidence line. A “?” means no evidence, never zero; zero never means safe.
The descriptive profile (what it does, can do, how it runs, what it needs) was read through the same isolated pipeline at commit f6a770d on 2026-10-25: one reader proposed every fact with a quoted line, a script confirmed each quoted line (61 of 61), and a second reader checked each sentence against its lines. Where nothing was found, the page says so instead of assuming “none”.
Known issues and limits: remote server-side behaviour stays “?”; the lab is not your production; static analysis can miss runtime behaviour.
Placement, badges or fast tracks are not for sale. The author is employed by an IT consultancy; the company has no influence on selection, execution or result.
Cite this:
Ilja Schlak. "Shannon". Agentic Security Field Guide, checked 2026-10-19, method reach-v0.1. https://readbeforerun.ai/catalog/keygraph-shannon/For maintainers
Badge for your README (reach 3 · not run yet):
[](https://readbeforerun.ai/catalog/keygraph-shannon/)Dispute a value with evidence (file, line, commit): write to hello@readbeforerun.ai. A dispute is checked against the pinned commit; a changed value is logged under Changes.
Claim the entry with a fieldguide.yaml in your repository: planned.
Other tools for the same task
Task: Web and API testing. The task pages compare every tool side by side.- Code showsWebapp Testing ChecklistDraft · awaiting review
Agent skill that walks an authorized web application test through the OWASP WSTG checklist and writes a findings report.
Can add autostart, users or keys · write outside the project · run shell commands or eval · +1 more · Approval: no evidence · not run yet · checked 2026-10-21
- Code showshackingBuddyGPTDraft · awaiting review
Open-source framework for building LLM-driven security-testing agents, with use cases for Linux privilege escalation and web API testing.
Can write outside the project · talk to any host · run shell commands or eval · +3 more · not run yet · checked 2026-10-19
- Code showsStrixDraft · awaiting review
Autonomous AI penetration-testing agents that run offensive tools in a container sandbox and validate findings with a proof of concept.
Can tunnel or exfiltrate · use sudo or the docker socket · add autostart, users or keys · +3 more · not run yet · checked 2026-10-19