mirror of
https://github.com/KeygraphHQ/shannon.git
synced 2026-08-24 20:22:44 +02:00
* refactor(cli): list workspaces natively instead of via the worker image * feat(cli): preflight that Docker is installed and running * feat(cli): stop scans by workspace or --all, terminating their Temporal workflows * fix(worker): abort the running agent on cancellation so Temporal cancel takes effect * refactor(cli): split destructive teardown out of stop into a reset command * refactor(cli): centralise flag parsing and confirmation across commands * fix(cli): pass provider credentials to docker by name to keep secrets out of argv * feat(cli): add per-command help via <command> --help/-h and help <command> * feat(cli): replace raw docker output with clack spinners for infra and scan teardown * fix(cli): verify scan stop by re-querying container and workflow state instead of assuming success * fix(cli): resolve running state before prompting on stop and report no-op stops honestly * refactor(cli): show splash first and drive start with one spinner resolving to a clean line * fix(cli): validate --url up front so a bad value fails cleanly instead of a late crash * refactor(cli): centralize error reporting with fail() for expected errors and a crash handler that logs the stack and links the issue tracker * feat(cli): add --json/--plain machine-readable output to workspaces and status * refactor(cli): remove the workspaces command * refactor(cli): remove the status command * feat(cli): add 'progress <workspace>' — live scan progress from Temporal * fix(cli): mark metric-less agents as skipped in progress, not done * feat(cli): animate running agents in progress with a clack-style spinner * feat(cli): rename progress->status, reveal agents as they run, show live per-agent elapsed * fix(cli): mark passed-over phases as skipped live, not pending * style(cli): rename status footer 'Wall-clock' to 'Time Taken', drop the parenthetical * style(cli): drop '(sum of agents)' from status total cost line * style(cli): green filled circle for completed, Shannon gold for running * style(cli): use Shannon gold in place of green in status * feat(cli): suggest closest command or flag on typo * refactor(cli): single-source start help and drop ./repos bare-name shortcut * feat(cli): name providers and fix in multi-provider credential error * feat(cli): support --flag=value syntax and expand leading ~ in paths * refactor(cli): centralize ANSI color codes in colors.ts * feat(cli): add scans command listing completed scans with cost and duration * fix(cli): keep stdout clean off-TTY for logs and start * feat(cli): add repo link to top-level help * feat(worker): record auth-validation metrics and register resume attempts early * refactor(cli): share resume-aware workflow-id resolution and surface root-cause failures * feat(cli): add status --json, auth phase, dashboard link, and stable live redraw * refactor(cli): drop cost from status and scans output * feat(worker): surface both PDF and markdown report at run root * refactor(cli): normalize error/warning prefixing through fail and warn * feat(cli): add version --json for machine-readable output * refactor(cli): rename start --debug to --keep-container * refactor(cli): point start's progress hint at status instead of the Temporal dashboard * refactor(cli): centralize the mode-aware command prefix * refactor(cli): trim start and logs output to durable facts off-TTY * feat(cli): require typed confirmation for reset instead of --yes reset permanently wipes all Temporal data and volumes — a severe, irreversible action. Replace its default y/N confirm (bypassable with --yes) with a typed-word confirmation that has no bypass, so the wipe can only be triggered by a deliberate interactive answer. * feat(cli): surface logs and status hints after start on a TTY * feat(cli): exit 2 on usage errors, distinct from operational failures * feat(cli): add start --follow to stream logs and exit on scan outcome * refactor(cli): redesign splash with sunset-gradient wordmark and truecolor * refactor(cli): remove the uninstall command * docs: sync CLI docs with removed uninstall/workspaces, new scans and --follow * docs: fix reset confirmation — typed confirm, not --yes/-y * style(cli): restructure status footer with divider, aligned Logs/Temporal rows * feat(cli): show splash in the status command * fix(worker): validate auth-state shape, not entry count * docs: correct reset confirmation and add markdown report to run-root docs
156 lines
4.4 KiB
Markdown
156 lines
4.4 KiB
Markdown
# Source Build and CLI Commands
|
|
|
|
This guide covers the source-build workflow, common CLI commands, repository paths, and output locations. For the fastest first run, use the `npx` workflow in the main README.
|
|
|
|
## Prerequisites
|
|
|
|
- Docker
|
|
- Node.js 18+
|
|
- pnpm
|
|
- AI provider credentials
|
|
|
|
## Clone and Build
|
|
|
|
Use the source-build workflow if you want to run Shannon from a local clone, modify the open-source CLI, or keep the worker image built locally.
|
|
|
|
```bash
|
|
# 1. Clone Shannon.
|
|
git clone https://github.com/KeygraphHQ/shannon.git
|
|
cd shannon
|
|
|
|
# 2. Configure credentials.
|
|
cp .env.example .env
|
|
|
|
# 3. Install dependencies and build.
|
|
pnpm install
|
|
pnpm build
|
|
|
|
# 4. Run a pentest.
|
|
./shannon start -u https://your-app.com -r /path/to/your-repo
|
|
```
|
|
|
|
At minimum, your `.env` file should include one supported AI provider credential, such as:
|
|
|
|
```bash
|
|
ANTHROPIC_API_KEY=your-api-key
|
|
```
|
|
|
|
Environment variables can also be exported directly:
|
|
|
|
```bash
|
|
export ANTHROPIC_API_KEY="your-api-key"
|
|
```
|
|
|
|
## Prepare Your Repository
|
|
|
|
Shannon can scan any repository on your machine. Pass an absolute or relative path with `-r`.
|
|
|
|
```bash
|
|
npx @keygraph/shannon start -u https://example.com -r /path/to/repo
|
|
./shannon start -u https://example.com -r ./relative/path
|
|
```
|
|
|
|
The target repository is mounted read-only inside the worker container.
|
|
|
|
## Common Commands
|
|
|
|
Monitor progress:
|
|
|
|
```bash
|
|
npx @keygraph/shannon logs <workspace>
|
|
npx @keygraph/shannon status <workspace>
|
|
npx @keygraph/shannon scans
|
|
npx @keygraph/shannon version
|
|
```
|
|
|
|
Source-build equivalents:
|
|
|
|
```bash
|
|
./shannon logs <workspace>
|
|
./shannon status <workspace>
|
|
./shannon scans
|
|
./shannon version
|
|
```
|
|
|
|
Open the Temporal Web UI for detailed monitoring:
|
|
|
|
```bash
|
|
open http://localhost:8233
|
|
```
|
|
|
|
Stop Shannon:
|
|
|
|
```bash
|
|
npx @keygraph/shannon stop <workspace> # stop one scan (confirms first; add --yes/-y to skip)
|
|
npx @keygraph/shannon stop --all # stop all scans (Temporal stays up)
|
|
npx @keygraph/shannon reset # stop everything and wipe all Temporal data (type 'confirm' to proceed; cannot be skipped)
|
|
```
|
|
|
|
Source-build equivalents:
|
|
|
|
```bash
|
|
./shannon stop <workspace> # stop one scan (confirms first; add --yes/-y to skip)
|
|
./shannon stop --all # stop all scans (Temporal stays up)
|
|
./shannon reset # stop everything and wipe all Temporal data (type 'confirm' to proceed; cannot be skipped)
|
|
```
|
|
|
|
Usage examples:
|
|
|
|
```bash
|
|
# Basic pentest.
|
|
npx @keygraph/shannon start -u https://example.com -r /path/to/repo
|
|
|
|
# With a configuration file.
|
|
npx @keygraph/shannon start -u https://example.com -r /path/to/repo -c /path/to/my-config.yaml
|
|
|
|
# Custom output directory.
|
|
npx @keygraph/shannon start -u https://example.com -r /path/to/repo -o ./my-reports
|
|
|
|
# Named workspace.
|
|
npx @keygraph/shannon start -u https://example.com -r /path/to/repo -w q1-audit
|
|
|
|
# Stream the log until the scan finishes, then exit on its outcome (useful in CI).
|
|
npx @keygraph/shannon start -u https://example.com -r /path/to/repo --follow
|
|
|
|
# List completed scans.
|
|
npx @keygraph/shannon scans
|
|
```
|
|
|
|
Source-build examples:
|
|
|
|
```bash
|
|
./shannon start -u https://example.com -r /path/to/repo
|
|
./shannon start -u https://example.com -r /path/to/repo -c /path/to/my-config.yaml
|
|
./shannon start -u https://example.com -r /path/to/repo -o ./my-reports
|
|
./shannon start -u https://example.com -r /path/to/repo -w q1-audit
|
|
./shannon start -u https://example.com -r /path/to/repo --follow
|
|
./shannon scans
|
|
|
|
# Rebuild the worker image.
|
|
./shannon build --no-cache
|
|
```
|
|
|
|
## Output and Results
|
|
|
|
Results are saved to the workspaces directory:
|
|
|
|
- `./workspaces/` in source-build mode
|
|
- `~/.shannon/workspaces/` in `npx` mode
|
|
|
|
Use `-o <path>` to copy deliverables to a custom output directory after a run completes.
|
|
|
|
Output structure — the run directory's top level holds the final report, in PDF and Markdown; everything else is nested under a hidden `.shannon/` directory:
|
|
|
|
```text
|
|
workspaces/{hostname}_{sessionId}/
|
|
|-- Security-Assessment-Report.pdf # the final report (PDF)
|
|
|-- Security-Assessment-Report.md # the final report (Markdown)
|
|
`-- .shannon/ # internals
|
|
|-- deliverables/ # report source, per-phase analysis, queues
|
|
|-- agents/ # per-agent logs
|
|
|-- prompts/ # rendered prompts
|
|
|-- scratchpad/ # screenshots, scripts
|
|
|-- session.json # resume state
|
|
`-- workflow.log
|
|
```
|