Cybersecurity SuperIntelligence
CSI is a multi-backend cybersecurity CLI — both a harness and a scaffold. One command, one local routing proxy, and your choice of agentic scaffold — Alias cc, Claude Code, OpenAI Codex, Alias CAI, Mistral Vibe or GCAI — all reaching specialized security models while telemetry is filtered and cost is logged.
▶ Install in one line
Two dependencies (curl and docker), one installer, then launch:
curl -Ls aliasrobotics.com/get_csi | sh
csi
By default csi launches cc, CSI’s security-focused scaffold. Switch the engine at any time with the CSI_BACKEND environment variable — see Choosing a scaffold.
☰ Start here
.env.CSI_BACKEND matrix and what each backend is good at.❖ Scaffold and harness
Two terms recur throughout these docs:
- Scaffold — the agent’s reasoning and orchestration architecture: its planning loop, tool-use protocol and context management.
- Harness — the environment that runs and constrains that architecture: process isolation, model routing, telemetry control and unified logging.
CSI is both. It is a harness — the local routing proxy, container and telemetry defense that every session runs inside — and a scaffold in its own right: a meta-scaffold that combines several specialized agentic scaffolds under one csi wrapper and can orchestrate them together (e.g. Blackboard mode). The proxy on 127.0.0.1 translates each scaffold’s wire format, blocks non-essential telemetry, and appends every request to a single JSONL cost ledger. Each backend below is itself a specialized agentic implementation.
| Backend | Scaffold | Original documentation |
|---|---|---|
cc (default) | cc — CSI security scaffold | cc one-pager → |
claude | Claude Code — Anthropic | code.claude.com/docs |
codex | OpenAI Codex | developers.openai.com/codex |
cai | Alias Robotics CAI | github.com/aliasrobotics/CAI |
mistral | Mistral Vibe | docs.mistral.ai/mistral-vibe |
gcai | Alias Robotics GCAI | GCAI one-pager → |
Installation
Install CSI with a single command, paste your Alias API key when prompted, and you’re ready to run. Linking a CAI .env is optional.
⚙ Prerequisites
Before installing CSI, make sure the following tools are available on your system:
| Dependency | Purpose | Verify |
|---|---|---|
curl | Downloads the CSI installer | curl --version |
docker | Runs CSI containers | docker --version |
apt, brew, etc.) or its official website before continuing.
⇓ Run the installer
Run the following command in your terminal. The installer will download and configure CSI automatically:
curl -Ls aliasrobotics.com/get_csi | sh
API key setup
During installation you will be prompted to enter your Alias API key. This key was sent to your registered email address. Copy it from your inbox and paste it when asked.
CAI environment (.env) — optional
If you use the CAI scaffold (CSI_BACKEND=cai csi), CAI loads a project .env from the working directory inside the container. CSI maps that to ~/.csi/workspace/.env on your host (mounted as /workspace).
After the API key step, the installer asks for an optional path to a local CAI git clone. If the repo has a .env at its root, the installer links it:
~/.csi/workspace/.env → /path/to/your/cai/.env
Press Enter to skip — the installer creates a minimal default ~/.csi/workspace/.env instead (includes your ALIAS_API_KEY and CAI_COMPACT_REPL=0).
CAI_MODEL is set by the CSI launcher from ANTHROPIC_MODEL (Docker -e or csi --model), not from your repo .env. Other CAI_* variables in the linked file (e.g. CAI_STREAM, PROMPT_TOOLKIT_NO_CPR) are loaded when CAI starts. Restart csi after editing the file on the host.
To reconfigure later without a full reinstall:
~/.csi/setup-cai-env.sh --configure # interactive prompt
~/.csi/setup-cai-env.sh --link ~/path/to/cai # link repo .env directly
Closing the Docker container does not modify your linked .env. Session-only changes made with /env set inside CAI are not written back to disk.
Step-by-step summary
-
1Open a terminalAny standard terminal on Linux or macOS.
-
2Run the installer
curl -Ls aliasrobotics.com/get_csi | sh -
3Enter your API keyPaste the key from your email when the installer prompts you.
-
4Link CAI repo .env (optional)Enter the path to your CAI clone, or press Enter for the default
~/.csi/workspace/.env. -
5Installation completeCSI is installed and ready to use.
▶ First run
To launch CSI, open a terminal and run:
csi
CSI will start and guide you from there. No additional arguments are required to get started.
csi launches cc, CSI’s security-focused scaffold. To pick a different engine see Choosing a scaffold. Optional flags such as --mount and --network host are documented under Launcher flags & env. csi --update refreshes the Docker image and, if your CAI .env is not linked to a repo, may prompt you to link it — it does not update the host launcher script; re-run curl -Ls aliasrobotics.com/get_csi | sh for that.
Architecture
One csi wrapper, any scaffold, a single local routing proxy. The proxy is CSI’s harness layer — the environment that runs, evaluates and constrains whichever scaffold you launch: it translates each scaffold’s wire format, filters telemetry, and logs every request to one cost ledger.
☷ Scaffold routing
Whichever scaffold you launch, its API traffic is pointed at the proxy on 127.0.0.1. A single model identifier — an alias* model, an OpenRouter slug, an Anthropic model, or a custom endpoint — reaches the right upstream regardless of which scaffold dispatched it.
csi wrapper
CSI_BACKEND ∈ {cc, claude, codex, cai, gcai, mistral}
127.0.0.1:PORTwire translation (Anthropic ↔ OpenAI) · /model switching · quota preflight · telemetry whitelist · JSONL logging + cost ledger
All upstreams speak Chat Completions; the proxy translates to each backend’s wire format (Anthropic /v1/messages for Claude Code, the Responses API for Codex). Every request is appended to ~/.csi/logs/csi_<uuid>.jsonl with route, model, status, tokens, cost and timing.
🔒 Telemetry defense
Telemetry control is a property of the harness, so it applies to every scaffold, not a single backend. By default (CSI_TELEMETRY_FILTER=1) CSI keeps non-essential traffic off the wire through up to three independent layers. The proxy whitelist (Layer 3) is universal — it governs all backends; scaffolds running on a JavaScript runtime gain two additional layers at the environment and network level.
Sets telemetry-disabling environment variables (e.g. DISABLE_TELEMETRY=1) in settings.json before the scaffold starts.
A loader patches fetch()/https.request()/DNS to block analytics and telemetry hosts (Segment, Datadog, GrowthBook, vendor endpoints). OAuth/login paths stay exempt.
Only API paths (/v1/messages, /v1/complete, /v1/responses, /oauth) are forwarded; WebSocket upgrades and metrics paths are rejected.
--no-telemetry-filter at install or CSI_TELEMETRY_FILTER=0 — see Environment variables. DISABLE_AUTOUPDATER=1 stays on regardless.
Full csi wrapper & proxy diagram
csi (wrapper)
CSI_BACKEND = cc | claude | codex | cai | gcai | mistral
|
+-----------+-----------+---+-------+-----------+-----------+
CSI::Claude CSI::Codex CSI::CAI CSI::GCAI CSI::Mistral
(cc/claude) (Rust) (Python) (in-tree) (vibe)
| | | | |
ANTHROPIC OPENAI ALIAS (proxy) (proxy)
_BASE_URL _BASE_URL _BASE_URL
+------------+-----------+----------+-----------+
v
+============================================================+
| L3 Local routing proxy 127.0.0.1:PORT |
| - wire translation Anthropic <-> OpenAI |
| - /model switching + quota preflight check |
| - telemetry whitelist (non-API paths blocked) |
| - JSONL logging + cost ledger per request |
+====+================+================+=====================+
v v v
alias* openrouter/* claude-* / custom
Alias API OpenRouter Anthropic / self-hosted
(:666) (OR_API_KEY) (OAuth / key)
⚙ Agent view (csi agents)
CSI’s multi-scaffold equivalent of claude agents: one TUI to dispatch, monitor, attach to, reply to and stop background sessions across every scaffold — each job routed through the shared proxy so a single model identifier reaches the right upstream from whichever scaffold dispatched it.
# open the cross-scaffold roster
csi agents
# one-shot dispatch (fire and forget)
csi agents "investigate the flaky settings test"
CSI_BACKEND=codex csi agents "summarise this branch"
- Cross-scaffold roster with live state (
working/done/blocked/failed). - Real-terminal attach via tmux — the scaffold’s own UI, no transcript replay.
- Reply straight into a live REPL; Ctrl-C double-tap detaches without killing the session.
- One persistent proxy per user; a guard child stops it after 60 s idle.
csi agents — cross-scaffold orchestration
csi agents (Ink TUI - cross-scaffold roster)
> * [cc] fix auth bug 1m
* [gcai] audit scan 4m
| dispatch{ scaffold, model, prompt }
v
adapter.dispatch() -> tmux pane per scaffold
cc . claude . codex . cai . gcai . vibe
| ANTHROPIC_BASE_URL = 127.0.0.1:
v
shared proxy (detached) + guard child
- one API JSONL - idle 60s -> SIGTERM
- polls roster.json - 12h hard ceiling
LLMs & sovereignty
CSI runs on the alias family of cybersecurity-specialized models — European-built, sovereign by design, and deployable on-prem or fully air-gapped. The harness keeps your data on your infrastructure.
☷ The alias model family
Alias Robotics trains a family of cybersecurity-specialized LLMs. Any of them is reachable through CSI with --model (or the ANTHROPIC_MODEL default), routed by the proxy — see Model routing.
| Model | Role |
|---|---|
alias3 | Largest, highest-capability model. |
alias2 | Flagship production model. |
alias2-mini | Fast, cost-efficient workhorse — the default for background agents. |
alias1 | Lightweight model; works out of the box on a fresh install. |
alias0 | Smallest, most embeddable model. |
csi --model alias3 --yolo
csi --model alias2-mini
🔒 Sovereign by design
CSI is built so sensitive security work never has to leave your perimeter:
- On-prem & air-gapped — run the suite and alias models cloud-deployed or fully air-gapped, with no dependency on a third-party cloud.
- No data leakage — the harness routes every request through a local proxy and filters non-essential telemetry by default (see Architecture).
- European-built — trained and operated under European data-sovereignty principles.
- Compliance-ready — designed for GDPR and NIS2 obligations.
Choosing a scaffold
A scaffold is the agent’s reasoning and orchestration architecture — its planning loop, tool-use and context management. Each CSI backend is a distinct, specialized agentic implementation. CSI (the harness) keeps the launch command identical; you only change which scaffold sits behind it via the CSI_BACKEND environment variable.
▶ Default scaffold
When you run csi, it starts using cc — CSI’s security-focused scaffold — out of the box. No extra configuration needed.
csi
⚙ Selecting a different scaffold
Set the CSI_BACKEND environment variable before launching CSI. It is read at startup and determines which AI engine powers the session.
CSI_BACKEND=<scaffold> csi
Available backends
| Backend | Scaffold | Command | One-pager |
|---|---|---|---|
cc | cc — CSI security scaffold (default) | csi | cc → |
claude | Claude Code | CSI_BACKEND=claude csi | Claude Code → |
codex | OpenAI Codex | CSI_BACKEND=codex csi | OpenAI Codex → |
cai | Alias Robotics CAI | CSI_BACKEND=cai csi | Alias CAI → |
mistral | Mistral Vibe | CSI_BACKEND=mistral csi | Mistral Vibe → |
gcai | Alias Robotics GCAI | CSI_BACKEND=gcai csi | GCAI → |
cc is the default scaffold — a security-focused coding agent re-implemented for autonomous cybersecurity work. claude runs Anthropic’s Claude Code. See the cc and Claude Code one-pagers.
★ Which one should I use?
Two questions come up constantly — “is CSI a step down from CAI?” and “do I prompt CSI differently?” The short answers:
- CSI is not a competitor to CAI — it is a meta-scaffold that contains it. CSI is the harness/orchestrator; CAI is one of the scaffolds it can run. Choosing CSI does not mean leaving CAI behind —
CSI_BACKEND=cai csiruns the exact same CAI engine, now routed through the CSI proxy. - Prompting is the same. There is no CSI-specific prompt syntax — you talk to whichever scaffold is behind the wrapper exactly as you would natively. If a session feels weaker, it is almost always the scaffold (and its model), not the prompt. Our prompt guide applies to every backend.
- Use
ccas your default. Across our benchmarking,ccandclaudeare the strongest autonomous-security performers; CAI is fully supported but is one of the lower performers. So if a plaincsisession feels more capable than your old CAI runs, that is expected — it is the defaultccscaffold doing the work. - For best results, use them all. CSI’s real advantage is orchestrating several agents at once — mixing scaffolds and models, and having them inspect and correct each other’s work. See Multi-agent.
export CSI_BACKEND=caicsi
CSI_BACKEND is not set, CSI always falls back to Claude Code as the default.
Claude Code
Anthropic’s agentic coding CLI, available as a CSI scaffold. CSI integrates it and routes its API traffic through the local proxy so any model identifier reaches the right upstream.
Claude Code is Anthropic’s terminal-native agent — it reads your files, runs tools, and edits code through an interactive TUI. It is a product of Anthropic; CSI integrates it as a scaffold (the claude backend, pinned for reproducibility) and routes it through the harness. You bring your own Claude Code access.
▶ Launch via CSI
Select Claude Code with CSI_BACKEND (the default scaffold is cc):
CSI_BACKEND=claude csi
CSI_BACKEND=claude csi --model alias1 # pick a model
CSI_BACKEND=claude csi --network host # share the host network stack
⏩ Continue mode
A CSI convenience: auto-send “continue” when the model stops with end_turn and no tool use, prompting it to keep working.
- Shift+Tab — cycle to ⏩ continue mode on (yellow indicator).
- Environment —
CSI_CONTINUE=1(persists the whole session); cap iterations withCSI_CONTINUE_MAX.
cc.
cc
cc is CSI’s default scaffold — a security-focused coding agent re-implemented by Alias Robotics, inspired by the Claude Code scaffold and tuned for long, autonomous cybersecurity work.
cc is a clean re-implementation inspired by the Claude Code scaffold, reworked for security operations: its own agent loop, tool-use, TUI and memory management. It runs through the CSI harness like every other scaffold — unified routing, telemetry control, JSONL logging and cost tracking.
cc is the scaffold behind a plain csi. It is engineered for autonomous, tool-heavy security sessions where general-purpose coding agents tend to run out of context or memory.
▶ Launch via CSI
csi # cc is the default
CSI_BACKEND=cc csi # the same, explicit
csi --yolo # auto-approve tools (long autonomous runs)
csi --model alias3 --yolo
⚙ Built for autonomous security work
Security investigations — port scans, fuzzing campaigns, multi-host triage — generate enormous tool-use traffic, and the number of messages climbs far faster than the token count. cc is built around that reality with a multi-level memory-management system so long sessions keep going where general-purpose agents stall:
- Bounded working set — the hot path avoids unbounded state growth, keeping memory flat across thousands of tool calls.
- Proactive summarization — the conversation is compacted by message count, well before any token limit, preserving investigation context.
- Safety valve — a cheap local fallback keeps the most recent context if a session spikes, instead of crashing.
- Session-memory continuity — transcript and continuity excerpts persist to disk so the agent recovers context after a compaction.
What else cc brings
- Tuned for autonomous
--yolooperation, the mode most security workflows run in. - Agent teams and skill loading for multi-agent investigations.
- Drives CSI dynamic workflows as the default fan-out scaffold.
- Routes any model through the CSI proxy, including the 1M-context endpoints for large-context models.
cc inherits the harness: telemetry control (see Architecture), unified logging, and MCP integration. For Anthropic’s Claude Code, see the Claude Code page.
OpenAI Codex
OpenAI’s Rust-based coding agent, routed through CSI. This page is a summary; the full reference is the official Codex documentation.
Codex is OpenAI’s terminal coding agent. It speaks the Responses API; CSI’s proxy bridges that wire format to Chat Completions so the same Alias, OpenAI or Anthropic model identifiers work from inside Codex.
▶ Launch via CSI
CSI_BACKEND=codex csi
CSI_BACKEND=codex csi --model alias1 "summarise this branch"
What CSI adds
- Responses API ↔ Chat Completions translation in the local proxy — no code changes to Codex.
- Auth handled for you:
OPENAI_API_KEYis derived from your Alias API key. - Single shared JSONL log and cost ledger alongside every other scaffold.
- Quota preflight handling so model switching is seamless.
Alias CAI
Alias Robotics’ open-source Cybersecurity AI framework — a bug-bounty-ready agent toolkit with its own agent loop, TUI and tool-use system. This page is a summary; see the CAI repository and paper for the full reference.
CAI (Cybersecurity AI) is the foundational open-source framework that started it all — used by 100,000+ hackers, supporting 300+ LLMs with built-in security tools. CSI installs it from the Alias private PyPI and starts the proxy for unified logging and cost tracking.
▶ Launch via CSI
CSI_BACKEND=cai csi
CSI_BACKEND=cai csi --yolo # auto-approve tool runs
CSI_BACKEND=cai csi --unrestricted # steering (abliteration)
CAI has its own agent loop, TUI and tool-use system. CSI starts the local routing proxy for unified JSONL logging and cost tracking, and passes the Alias API key via ALIAS_API_KEY.
What you get
- Agent + Runner SDK —
from cai.sdk.agents import Agent, Runner. - 300+ LLMs supported: alias models, Claude, GPT, Gemini, Mistral and local endpoints.
- Interactive
/mcpslash commands — the recommended path for MCP workflows. - Open source — the #1 AI agent for CTFs.
/mcp load / /mcp add commands make session management trivial — see MCP integration. The optional CAI .env is covered in Installation.
Mistral Vibe
Mistral AI’s open-source CLI coding agent, built for the Devstral model family and routed through CSI. This page is a summary; the official Mistral docs are the full reference.
Vibe is Mistral’s conversational CLI coding agent (Apache 2.0), with tools for file manipulation, code search, version control and shell execution. CSI routes it through the proxy so a single model identifier reaches the right upstream.
▶ Launch via CSI
CSI_BACKEND=mistral csi
CSI_BACKEND=mistral csi --model alias1 "draft a CHANGELOG"
What you get
- Interactive chat agent with read / write / edit, stateful
bash, and ripgrep-backedgrep. - Project-aware context — Vibe scans your file structure and Git status automatically.
- Agent profiles (
default,accept-edits,auto-approve,plan) selectable with--agent. - Programmatic mode (
--prompt,--output text|json) for scripting.
GCAI
Generative Cybersecurity AI — Alias Robotics’ minimalistic, one-shot generative scaffold. A standalone TypeScript agent, iteratively generated and refined by an autoresearch meta-harness, that compiles to a tiny auditable .mjs.
GCAI is purpose-built for deep-embedded, high-scrutiny, deterministic environments where every line must be auditable — roughly 1,344 LOC of TypeScript, hundreds of times smaller than its peers. Rather than being configured by the user, it is rapidly retargeted per cybersecurity vertical via an autoresearch loop that modifies, compiles, scores and accepts or rejects each candidate scaffold.
csi gcai).
▶ Launch via CSI
Run a compiled GCAI scaffold like any other backend:
CSI_BACKEND=gcai csi
CSI_BACKEND=gcai csi --model alias3
♻ The optimization loop
GCAI follows an autoresearch-style loop — the AI agent is the researcher, driving the loop via tool use. One targeted change per iteration, scored by real CTF solve rate (no LLM-as-judge):
- Modify — the agent generates a TypeScript candidate scaffold (one targeted change).
- Compile —
esbuild scaffold_candidate.ts→scaffold_candidate.mjs(~35 KB). - Evaluate — score the candidate on real CTF challenges; the metric is the solve rate.
- Decide — accept if the solve rate improves, otherwise discard; snapshot every iteration.
- Loop — autonomous until convergence, max iterations, or manual stop (
--resumeto continue).
CSI_BACKEND=cc csi gcai --model opus --target-model alias3 \
--challenges cybench --max-iters 50 --remote agents
/gcai skill — one iteration per invocation, driven by /loop. Interested in GCAI for an OT, robotics, embedded or air-gapped vertical? Co-design it with us →.
MCP integration
Bridge external Model Context Protocol servers — Burp Suite and Chrome DevTools — into a CSI session for hands-on web and network testing.
CSI_BACKEND=cai (Alias CAI). Its interactive /mcp slash commands make session management trivial. Other scaffolds (cc, claude, codex, vibe) support MCP through static config files instead.
⚙ Host setup (one time only)
These steps are performed once on your host machine before using MCP integrations with CSI.
1. Install dependencies
sudo apt install -y default-jre-headless
curl -LsSf https://astral.sh/uv/install.sh | sh
mkdir -p ~/.csi/burp
| Package | Purpose |
|---|---|
default-jre-headless | Java runtime required to run the Burp MCP proxy JAR |
uv (via installer) | Python package runner used to launch mcp-proxy |
~/.csi/burp/ | Directory where the Burp proxy JAR will be stored |
2. Configure Burp Suite MCP server
-
1Install the extensionIn Burp Suite, go to Extender → BApp Store, search for “MCP Server”, click Install, then Enable.
-
2Set host and portLeave the defaults: host
127.0.0.1, port9876. -
3Extract the proxy JARClick Extract server proxy jar (bottom corner of the MCP tab) and save it as
~/.csi/burp/mcp-proxy.jar.
▶ Each session: 3 terminals + inside CAI
$ALIAS_API_KEY is set in your environment before launching Terminal 3, or replace it inline with your actual key.
Every working session needs three host terminals (Burp bridge, Chrome bridge, CSI) plus the /mcp load commands inside CAI. This workflow uses host.docker.internal from inside the container, which works in every launch mode (bridge or --network host) — the launcher always wires the necessary --add-host.
uvx mcp-proxy --host 0.0.0.0 --port 9878 -- \
java -jar $HOME/.csi/burp/mcp-proxy.jar \
--sse-url http://127.0.0.1:9876
uvx mcp-proxy --host 0.0.0.0 --port 9877 -- \
npx -y chrome-devtools-mcp@latest
CSI_BACKEND=cai csi --model alias1 --yolo
csi --network host users: the container’s loopback is the host’s, so you may optionally bind both bridges to --host 127.0.0.1 and switch the /mcp load URLs (below) to http://127.0.0.1:<port>/sse. Functionally equivalent, but avoids exposing the bridges on your LAN.
Inside CAI
Once the CSI container is running, load the MCP servers and attach them to the agent:
CAI> /mcp load http://host.docker.internal:9878/sse burp
CAI> /mcp load http://host.docker.internal:9877/sse chrome
CAI> /mcp list
CAI> /mcp add burp redteam_agent
CAI> /mcp add chrome redteam_agent
Smoke test
Verify that the MCP integration is working end-to-end:
CAI> /agent redteam_agent
CAI> Use the chrome MCP to fetch https://example.com and report the page title.
example.com, your MCP setup is working correctly.
Launcher flags
The host launcher accepts a couple of optional, opt-in flags forwarded to Docker — mount extra folders and share the host network — plus a helper for the CAI .env. For variables, see Environment variables.
⚙ Optional launcher flags
The host launcher (installed by curl -Ls aliasrobotics.com/get_csi | sh) accepts two optional flags that are parsed before the regular CSI arguments and forwarded to Docker. They are opt-in — leave them out for the default behavior.
csi --update refreshes the Docker image and may prompt to link a CAI repo .env if one is not configured. To update the host launcher itself (e.g. to pick up new flags), re-run curl -Ls aliasrobotics.com/get_csi | sh.
CAI .env helper (~/.csi/setup-cai-env.sh)
Created during installation. Useful commands:
| Command | Effect |
|---|---|
~/.csi/setup-cai-env.sh --configure | Interactive prompt — link a CAI repo or create the default .env. |
~/.csi/setup-cai-env.sh --link ~/path/to/cai | Link ~/.csi/workspace/.env to ~/path/to/cai/.env. |
~/.csi/setup-cai-env.sh --write-default | Replace with the minimal default .env (non-interactive). |
Verify inside the container: cat /workspace/.env (should match your repo file when linked). Inside CAI: /env lists CAI_* variables present in the process.
--mount host:container[:ro] — expose host folders
By default, CSI only sees ~/.csi/workspace inside the container. To expose additional paths from your computer, use --mount with the usual Docker bind-mount syntax. The flag can be repeated.
csi --mount ~/Documents/GITLAB:/gitlab
csi --mount ~/projects:/projects --mount ~/data:/data:ro
| Example | Effect |
|---|---|
csi --mount ~/GITLAB:/gitlab | Your ~/GITLAB folder appears as /gitlab inside CSI. |
csi --mount ./reports:/workspace/reports | Mount the current directory’s reports subfolder read-write. |
csi --mount ~/secrets:/secrets:ro | Read-only mount — the agent can read but not modify host files. |
~/…) are expanded on the host before the container starts. Only mount what you need — broader mounts give the agent more access to your filesystem.
--network host — share the host’s network stack
By default CSI runs on Docker’s bridge network — fine for most web and MCP workflows (the container reaches host-side services via host.docker.internal). For local-network reconnaissance that needs Layer-2 visibility (ARP scans, live PCAP on your LAN interface, etc.), pass --network host so the container shares the host’s network stack.
csi --network host
CSI_BACKEND=cai csi --network host --yolo
CSI_BACKEND=cai csi --network host --mount ~/Documents/GITLAB:/gitlab
| Mode | When to use |
|---|---|
csi (default bridge) | Normal usage, MCP (Burp/Chrome via host.docker.internal), remote targets. |
csi --network host | Scanning your local subnet, ARP/L2 discovery, capturing traffic on the host NIC. MCP bridges become reachable on 127.0.0.1 (see MCP integration). |
--mount only on paths you actually need to expose to the agent.
Environment variables
A complete reference of the environment variables CSI reads. Most have sensible defaults — set them only when you need to override behaviour, point at a different model, or wire up a custom endpoint.
⚙ How to set them
Persist a variable in ~/.csi/config/settings.json (under env) at install time, export it in your shell for a single session, or inline it before the command:
# persisted in settings.json
csi install --api-key sk-xxx --env CLAUDE_CODE_MAX_OUTPUT_TOKENS=16000
# per-session
export CSI_BACKEND=cai
csi
# inline (one run)
CSI_BACKEND=codex CSI_CONTINUE=1 csi "summarise this branch"
▶ Backend & models
CSI_BACKENDcccc, claude, codex, cai, gcai or mistral.ANTHROPIC_MODELalias1alias* model or openrouter/<provider>/<model>). Overridden by --model.CSI_CONTEXT_WINDOW00 = use the model default.⇄ Custom & third-party endpoints
CSI_CUSTOM_ENDPOINTCSI_CUSTOM_API_KEYCSI_CUSTOM_MODELANTHROPIC_MODEL).OPENROUTER_API_KEYopenrouter/<provider>/<model> routing.MISTRAL_API_KEY▤ Tuning (Claude Code)
CLAUDE_CODE_MAX_OUTPUT_TOKENS32000MAX_THINKING_TOKENS00 = disabled.API_TIMEOUT_MS3000000CLAUDE_CODE_AUTO_COMPACT_WINDOW⏱ Rate-limit backoff (all scaffolds)
CSI_RETRY_MAX_ATTEMPTS14CSI_RETRY_BASE_MS2000CSI_RETRY_CAP_MS30000Retry-After is honored independently (capped at 120s).⏩ Continue mode
CSI_CONTINUE0end_turn without tool use (1 = on, persists the session).CSI_CONTINUE_MAX-1-1 = unlimited).⚛ Steering
CSI_STEERING1 for persistent activation steering (abliteration) for the entire session — injects steering_enabled:true into Alias API requests only. Per-prompt steering is available via the /steering skill.🔒 Telemetry & updates
CSI_TELEMETRY_FILTER10 = allow, e.g. for Pro/Team feature flags). Applies to every scaffold — see Architecture.DISABLE_AUTOUPDATER1CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC1☰ Agent view (csi agents)
CSI_AGENTS_DEFAULT_MODELalias2-miniCSI_AGENTS_QUIETCSI_AGENTS_DISABLE_SHARED_PROXYCSI_AGENTS_TUI_ATTACH🔑 Auth (set by the wrapper)
These are normally managed for you by the csi launcher — documented for transparency and advanced overrides.
ALIAS_API_KEYalias* models and the CAI backend.ANTHROPIC_BASE_URLhttp://127.0.0.1:PORT) for Claude Code.ANTHROPIC_API_KEY/login with OAuth (macOS Keychain); on Linux always injected.OPENAI_BASE_URL / OPENAI_API_KEYCLAUDE_CODE_OAUTH_TOKEN/login.CSI_FORCE_ANTHROPIC_AUTH1 to force Claude Code to honour OAuth-derived account info.▶ CAI backend
Loaded from your project .env when CAI starts (see Installation and Launcher flags).
CAI_MODELANTHROPIC_MODEL — not from your repo .env.CAI_STREAMCAI_COMPACT_REPL.env sets 0).PROMPT_TOOLKIT_NO_CPR⚙ Environment integration
CLAUDECODECLAUDECODE="") to bypass Claude Code’s nested-session detection when launching CSI from inside another agent.CLAUDE_CONFIG_DIRVIBE_HOMECSI_PYTHONCSI_PRESERVE_THINKING1 to round-trip Anthropic thinking blocks through the OpenAI translation.CSI_NO_TTY1 to force non-TTY mode (used by group / non-interactive runs).NO_COLORBLACKBOARD_*, CSI_GCTR_*, CSI_COLLAB_*, …) used by multi-agent collaboration modes. They are not needed for normal usage.
Model routing
A single --model identifier reaches the right upstream through the proxy — Alias models, OpenRouter (with provider routing), or any OpenAI-compatible endpoint you host yourself.
▶ Alias & provider models
Pick a model with --model (or the ANTHROPIC_MODEL default). Alias models route to the Alias API; Anthropic and OpenAI model slugs route to their providers.
csi --model alias1
csi --model alias3 --yolo
csi --model openrouter/z-ai/glm-5.1 "tell me a joke"
⇄ OpenRouter provider routing
For OpenRouter models, append a :: suffix to control which providers serve the request (maps to OpenRouter’s provider field). Requires OPENROUTER_API_KEY.
openrouter/<provider>/<model>::<key>=<val>[::...]
| Suffix | Description | Example |
|---|---|---|
::provider=A,B | Prefer providers in order (disables fallbacks) | ::provider=Together,Fireworks |
::only=A,B | Only use these providers | ::only=DeepInfra |
::ignore=A,B | Never use these providers | ::ignore=Azure |
::quant=X,Y | Quantization filter | ::quant=fp8,int4 |
# pin to a specific provider
csi --model openrouter/z-ai/glm-5.1:::provider=z-ai,z-ai::only=z-ai
# exclude Azure, prefer fp8 quantization
csi --model openrouter/meta-llama/llama-4-maverick::ignore=Azure::quant=fp8
OPENROUTER_PROVIDER, OPENROUTER_PROVIDER_ONLY, OPENROUTER_PROVIDER_IGNORE and OPENROUTER_QUANTIZATION env vars are used as defaults. Inline suffixes always override them.
▤ Custom, local & remote endpoints
Point CSI_CUSTOM_ENDPOINT at any OpenAI-compatible server (vLLM, TGI, Ollama, llama.cpp, a remote host). The proxy translates the scaffold’s wire format to Chat Completions and forwards the system prompt verbatim. Set CSI_CUSTOM_API_KEY if the endpoint needs auth.
# a locally served GGUF model with native tool calling
CSI_CUSTOM_ENDPOINT=http://localhost:5050 csi --model qwen3-8b --no-banner "tell me a joke"
# a remote vLLM / SGLang server
CSI_CUSTOM_ENDPOINT=http://10.0.0.5:8000/v1 csi --model Qwen3.5-27B --no-banner "tell me a joke"
# drive it from any scaffold
CSI_BACKEND=cc CSI_CUSTOM_ENDPOINT=http://10.0.0.5:8000/v1 csi --model Qwen3.5-27B --yolo
Channels
CSI agents can listen on messaging channels. An inbound message spawns a headless CSI session; the agent’s reply is sent back through the channel.
~/.csi/config/settings.json or per-agent in the agent’s YAML frontmatter (channel.botToken, etc.). Agent-level values take priority.
▶ Telegram
-
1Create a botMessage @BotFather, run
/newbot, and copy the token. -
2Add the tokenGlobally in
settings.json, or per-agent in frontmatter. -
3Bind an agentAdd a
channel: { type: telegram }block to the agent. -
4LaunchReinstall, then run
csiwith the agent.
Global token in ~/.csi/config/settings.json:
{ "channels": { "telegram": { "botToken": "123456:ABC-DEF..." } } }
Agent with a channel binding (plugins/csi/agents/mybot.md):
---
name: mybot
description: "My Telegram bot"
model: alias1
channel:
type: telegram
# botToken: "123456:ABC..." # optional per-agent override
permissionMode: bypassPermissions
---
Your agent system prompt here.
csi --model alias1 --agent csi:mybot --no-banner --yolo
▶ Google Chat
-
1Enable the APIIn Google Cloud Console, create a project and enable the Google Chat API.
-
2Service accountCreate one and download the JSON key file.
-
3Webhook URLPoint the Chat app at
https://<tunnel>/webhooks/googlechat(use ngrok / cloudflared for localhost). -
4Bind & launchAdd
channel: { type: googlechat }to an agent, reinstall, and the webhook is served by the proxy.
Global config in ~/.csi/config/settings.json:
{
"channels": {
"googlechat": {
"serviceAccountFile": "/path/to/service-account.json",
"audienceType": "project-number",
"audience": "123456789"
}
}
}
Dynamic workflows
csi agents workflow brings deterministic, script-driven multi-agent orchestration into the multi-scaffold fleet. Describe a task; CSI fans agents out — across scaffolds and models — and synthesises their results. Unlike a prose “spawn some agents” prompt, the control flow is deterministic and resumable.
▶ Run one
No script needed — describe it in natural language and CSI parses the topic, agent counts and scaffolds:
# one agent per scaffold, each a different model
csi agents workflow "pentest aliasrobotics.com, an agent per scaffold, each a different model"
# 10 agents on the default scaffold
csi agents workflow "compare TLS vs SSH, 10 agents"
# explicit fan-out
csi agents workflow fanout "<topic>" --scaffold cc,cai --per-scaffold 2 --model alias2-mini
# run or resume an explicit script
csi agents workflow run path/to/flow.js [--args '<json>'] [--resume <runId>]
csi agents workflow list | stop <runId>
You can also launch one straight from the csi agents TUI prompt: typing workflow … highlights the keyword and dispatches a fan-out detached, so the group appears in the roster as its agents come up.
⚙ How it works
A plain-English request becomes a deterministic script through a three-layer interpretation ladder (first usable result wins). Whatever the layer, the output is the same artifact — a JS workflow script under ~/.csi/workflows/<runId>/ — so every run is inspectable, editable and --resume-able.
| Layer | Produces | When |
|---|---|---|
| L1 — author | A full model-written JS workflow (any shape, not just fan-out). | Opt-in: --compose / CSI_WF_COMPOSE=1 |
| L2 — plan | A constrained {topic, agents[], synthesis} plan → always-valid fan-out. | Default (one planning call) |
| L3 — regex | Directives parsed deterministically (counts, per-scaffold, models). | Fallback: explicit flags or CSI_WF_NO_LLM=1 |
The engine runs the script in a sandbox with phase(), parallel(), pipeline(), agent(), budget and log() primitives, plus a content-addressed journal for resume. Each agent() crosses a single dispatch seam into the fleet — a real tmux job on any scaffold (cc, claude, codex, cai, gcai, vibe) — and a final synthesis agent integrates every view, citing each agent’s transcript.
NL → script → fleet — the one seam
csi agents workflow "pentest target.com, an agent per scaffold"
|
(1) INTERPRETATION LADDER L1 author / L2 plan / L3 regex
| -> workflow.js (~/.csi/workflows/<runId>, resumable)
(2) ENGINE (node:vm sandbox) phase . parallel . pipeline . agent . budget
| agent(prompt, { scaffold, model }) <- the host seam
(3) DISPATCH SEAM each agent() -> a real tmux fleet job, live in
| csi agents: cc . claude . codex . cai . gcai . vibe
v
SYNTHESIS agent -> integrates every view, cites each transcript
~/.csi/workflows/<runId>/ and can be inspected, edited and resumed. The default fan-out scaffold is cc; dispatched agents appear live in the agent view. Upstream design reference: code.claude.com/docs/en/workflows.
Multi-agent orchestration
CSI is a meta-scaffold: it can run a single agent or fan out to n agents at once — any mix of scaffolds (one or more CAI instances, one or more cc / Claude Code instances, Codex, GCAI, Vibe) and models — all under one csi wrapper, sharing one proxy and one cost ledger. This is where CSI does what a single scaffold cannot.
⚙ The agent roster (csi agents)
One TUI dispatches, monitors, attaches to, replies to and stops background sessions across every scaffold. Each job is routed through the shared proxy, so a single model identifier reaches the right upstream from whichever scaffold dispatched it.
# open the cross-scaffold roster
csi agents
# one-shot dispatch (fire and forget) on the default scaffold (cc)
csi agents "investigate the flaky auth flow on 10.0.0.5"
# dispatch on a specific scaffold
CSI_BACKEND=cai csi agents "enumerate SMB shares on 10.0.0.5"
CSI_BACKEND=codex csi agents "summarise the findings so far"
The roster shows each agent’s jobId, its scaffold@model, and live state (working / done / blocked / failed). Full architecture is on the Architecture page.
❖ Mix agents — and have them correct each other
Because every agent is addressable by jobId, a new prompt can build directly on a previous agent’s work — including across scaffolds. Reference a prior agent with @<jobId> and CSI injects that agent’s last output and transcript pointer into the new prompt:
# have a cc agent review and correct what a CAI agent produced
csi agents "@a05738af review this exploit for false positives and fix it"
# ask a fresh agent to get inspired by an earlier one's recon
csi agents "using @a05738af's port scan, propose three privilege-escalation paths"
This is the recommended way to work: let several agents tackle the same target from different angles, then point one at another’s output to verify, refine or cross-check it.
♻ Collaboration modes
For a coordinated team rather than independent jobs, group agents and pick a shared-memory mechanism. The default is a Blackboard: a shared append-log (a trusted notes.md plus a suggestive hypotheses.md) that members read and write as they progress, so the group converges instead of duplicating work.
# a 4-scaffold team sharing a blackboard
csi agents --scaffold claude,codex,gcai,cai --group bb --collab blackboard \
"pentest staging.example.com (in-scope only); coordinate via the blackboard"
Other mechanisms (scratchpad, topic, mailbox, verify) trade off how tightly members coordinate. For deterministic, script-driven fan-out and synthesis, use Dynamic workflows instead — CSI plans the fan-out, runs an agent per scaffold/model and synthesises every view into one cited answer.
cc as the default driver, add a claude agent for a second strong opinion, and fold in cai / codex / gcai for breadth — then let them cross-check each other via @<jobId> or a shared blackboard. One target, several perspectives, one ledger.
Sessions, limits & logs
How a long session manages its context (compaction), what happens when you hit the rate limit on a PRO key, and where to find — and how to export — the .jsonl session logs from the Docker container.
♻ Compaction
Compaction summarises the older part of a conversation so a long session keeps running without overflowing the model’s context window. It works across all supported scaffolds. Most of the time it is automatic — CSI compacts proactively as the context fills and recovers transparently from an over-length request — but you can also trigger it yourself:
/compact
| Scaffold | Compaction |
|---|---|
cc / claude | Automatic (proactive as the window fills, plus transparent recovery on an over-length request) and manual via /compact. |
cai | Uses CAI’s own (legacy) compaction path. It still works, but behaves differently from cc; the CAI_COMPACT_REPL variable governs it (the installer sets CAI_COMPACT_REPL=0 by default). |
/compact appears stuck (e.g. it waits at a confirmation and pressing y + Enter never returns), it should not normally block other actions — compaction is expected to work on every scaffold. Rather than quitting the session, grab the session .jsonl transcript (see Accessing logs below) and send it to support@aliasrobotics.com so we can reproduce and escalate. Including the log lets us diagnose far faster than a screenshot.
⏱ Rate limits & timeouts
When requests start getting throttled, nothing is broken — this is the deliberate per-key rate limiting that comes with PRO licenses. It exists so that individual keys do not oversaturate our shared inference servers.
- What you see: requests are slowed or temporarily rejected (HTTP 429, or a 5xx overload) once your key’s quota for the moment is reached.
- Recovery: once the limit is hit, it takes roughly 3–5 minutes for our servers to start accepting requests from a saturated key again. Waiting it out is enough — no reinstall or restart needed.
- Automatic backoff: the CSI proxy now rides out the whole cooldown for you. It retries throttled (429) and overloaded (5xx) requests with a true exponential backoff — 2s, 4s, 8s, 16s, then capped at 30s — honoring any
Retry-Afterthe server sends, for up to ~5.5 minutes total before surfacing an error. So the current action resumes on its own once the window clears, rather than failing the turn.
CSI_RETRY_BASE_MS, CSI_RETRY_CAP_MS and CSI_RETRY_MAX_ATTEMPTS; the per-request socket ceiling is API_TIMEOUT_MS — see Environment variables. Need higher throughput than a PRO key allows? Contact support@aliasrobotics.com about license tiers.
💾 Accessing logs (and getting them out of Docker)
Every session is logged as .jsonl. The good news for Docker users (e.g. on Kali): the most important logs are already bind-mounted onto your host — you do not need to docker cp them, and they survive the container exiting (CSI runs with --rm).
| What | On your host (Kali / Linux / macOS) |
|---|---|
| Proxy API log & cost ledger (all scaffolds) | ~/.csi/logs/csi_*.jsonl |
cc / claude session transcripts | ~/.csi/docker-config/projects/<cwd>/<sessionId>.jsonl |
| Your working files | ~/.csi/workspace/ (mounted as /workspace) |
From inside the session you can always resolve the active log path or open the viewer:
# print the path of the active proxy API JSONL
csi agents log --path
# open the log viewer (live)
csi agents log --live # or --viewer
# print a specific job's recent transcript
csi agents logs <jobId> [--tail N]
Inside the container the same files live under /home/vscode/.csi/logs/ and /home/vscode/.claude/projects/ — both of which map straight to the host paths above, so you can simply open them on Kali after (or during) the run.
CAI transcripts & the docker cp fallback
CAI writes its native transcript to ~/.cai/logs/cai_*.jsonl inside the container, which is not bind-mounted. To pull it (or any other in-container path) to the host without closing the container, copy it from a second terminal while the session is still running:
# find the running CSI container
docker ps
# copy the CAI transcript out to the host
docker cp <container>:/home/vscode/.cai/logs ~/csi-logs/
# or copy a single file
docker cp <container>:/home/vscode/.cai/logs/cai_<id>.jsonl ./
--rm, anything written only to a non-mounted path (like ~/.cai/logs) is gone once you exit. Copy it out before closing the session, or rely on the bind-mounted ~/.csi/logs/ ledger which persists automatically. When sending a log to support, the .jsonl from ~/.csi/logs/ or the cc/claude transcript is exactly what we need.
Steering
Steering (abliteration) removes censorship limitations from Alias API models by injecting steering_enabled: true into requests — for authorized red-team work where generating restricted content is necessary. It only affects alias* routes; other providers are unaffected.
▶ Modes
| Mode | Trigger | Lifetime |
|---|---|---|
| Per-prompt | /steering skill | Auto-resets on the next user turn. |
| Persistent | CSI_STEERING=1 env var | The entire session. |
# without steering (the model may refuse)
csi --model alias3 --yolo -p "Explain how to pick a lock"
# per-prompt steering (auto-resets after this turn)
csi --model alias3 --yolo -p "/steering Explain how to pick a lock"
# persistent steering (entire session)
CSI_STEERING=1 csi --model alias3 --yolo
⚙ How it works
The /steering skill POSTs to ${ANTHROPIC_BASE_URL}/csi/steering; the proxy flips an in-memory flag and records the current user-message count as a baseline. On the agent’s next answer the proxy injects steering_enabled:true into the Alias API request, and the model returns an uncensored response. On the next user turn (message count past the baseline) the proxy auto-disables it — tool-use chains within the same turn keep it active. Persistent mode (CSI_STEERING=1) skips the auto-reset.
CSI_STEERING variable is in Environment variables.
Example prompts
Copy-and-adapt prompt recipes across red team, blue team and DFIR. Pair them with the Prompt guide for consistent, actionable results.
Enumerate subdomains, exposed endpoints, and technology stack of a target web application before deeper testing.
Perform passive and active reconnaissance on https://target.example.com.
Enumerate subdomains, identify the tech stack, map exposed endpoints,
and list any login panels or admin interfaces found. Summarize findings
as a prioritised attack surface report.
Test a target application for the most critical web vulnerabilities: injections, broken auth, misconfigurations, and more.
Run an OWASP Top 10 assessment against https://target.example.com.
Test for SQL injection, XSS, broken authentication, IDOR, and
security misconfigurations. For each finding report: severity (CVSS),
evidence, and a recommended remediation step.
Scan open ports on a target host, fingerprint services, check for known CVEs, and attempt safe proof-of-concept exploitation.
Scan 192.168.1.100 for open TCP ports. Fingerprint each service and
version. Cross-reference against known CVEs (CVSS >= 7.0). For the
top 3 vulnerabilities, provide a safe PoC exploitation plan and
the exact Metasploit module or command if available.
After initial access, identify privilege escalation paths on a Linux host using standard enumeration techniques.
I have a low-privilege shell on a Linux box (Ubuntu 22.04).
Enumerate all privilege escalation vectors: SUID binaries, writable
cron jobs, weak sudo rules, world-writable paths, and kernel exploits.
Rank each vector by exploitability and provide the exact command
to exploit the top finding.
Review iptables or nftables rules for overly permissive entries, redundant rules, or missing egress controls.
Audit the attached iptables ruleset for security issues.
Flag any rules that allow unrestricted inbound access, missing egress
filtering, permit traffic from 0.0.0.0/0 to sensitive ports, or
contradict a least-privilege model. Output a hardened ruleset diff.
Analyse a batch of SIEM alerts to identify true positives, suppress noise, and prioritise incidents for response.
Analyse the following 50 SIEM alerts from the past 24 hours [paste alerts].
Classify each as true positive, false positive, or needs investigation.
Group related alerts into incidents, assign a severity (Critical / High /
Medium / Low), and recommend the immediate containment action for each
true positive.
Given a scanner report, rank findings by exploitability and business impact to build a realistic patching roadmap.
Given the attached Nessus/OpenVAS scan report for our production
environment, prioritise all findings with CVSS >= 6.0. Factor in:
public exploit availability, internet exposure, and asset criticality.
Output a patching roadmap with estimated remediation effort per item.
Review and harden SSH daemon configuration against common attack vectors such as brute force and weak ciphers.
Review the attached /etc/ssh/sshd_config. Identify misconfigurations:
permitted root login, weak ciphers/MACs, password auth enabled,
missing idle timeouts, or absent AllowUsers restriction. Output
a hardened config with inline comments explaining each change.
Perform static and behavioural analysis on a suspicious binary and produce a structured IOC report.
Analyse the suspicious binary at /samples/unknown.exe (SHA-256: <hash>).
Perform static analysis: strings, imports, PE headers, entropy.
Identify IOCs: C2 addresses, registry keys, file drops, mutex names.
Classify the malware family if possible and output a MISP-compatible
IOC list in JSON format.
Correlate logs from multiple sources to build a chronological attack timeline from initial access to impact.
I have auth.log, syslog, and web access logs from a potentially
compromised server covering 2026-05-28 to 2026-06-01 [paste logs].
Reconstruct a chronological attack timeline: initial access vector,
lateral movement, persistence mechanisms, and data accessed.
Output as a Markdown table with timestamp, event, and MITRE ATT&CK TTP.
Investigate network flow data or proxy logs for signs of large-scale or stealthy data exfiltration.
Analyse the attached network flow logs (NetFlow/PCAP) for signs of
data exfiltration over the past 7 days. Look for: large outbound
transfers to unknown IPs, DNS tunnelling patterns, beaconing at
regular intervals, and connections to known C2 ranges. Estimate
the volume exfiltrated and identify the destination endpoints.
Investigate a potentially hijacked user account by correlating authentication and activity logs.
Investigate the account jdoe@example.com for signs of compromise.
Correlate Azure AD sign-in logs, MFA events, and mail access logs
from the past 30 days. Identify: impossible travel, new device
registrations, inbox rule creation, and abnormal send volume.
Provide a yes/no verdict on compromise and recommended remediation steps.
Load a flash image into a decompiler, map the boot flow, and pull secrets and weaknesses out of the binary.
Load the firmware image at /samples/fw.bin (AVR8 / ATmega2560) into
Ghidra via GhidraMCP. Map the boot flow from the RESET vector,
decompile the authentication routine, and identify any hardcoded
credentials, keys, or timing-vulnerable comparisons. Report each
finding with its address and the relevant CWE.
From a spec and a sample client — no source — generate targeted fuzz cases and triage the crashes.
Here is a 1,780-line spec for a custom binary TLV protocol and a
sample client. With no source code, analyse the format and generate
targeted fuzz cases across buffer boundaries, integer arithmetic,
state violations and auth bypass. Run them against the ASAN server
at 127.0.0.1:9000 and triage each crash to a root-cause class.
Enumerate a Bluetooth LE target’s GATT services and work through read/write, notify and auth challenges.
Enumerate the GATT services of the BLE peripheral at MAC
AA:BB:CC:DD:EE:FF. For each characteristic, attempt read, write and
notify, and document the handle map. Then work the challenge flags in
order — MTU negotiation, MAC spoofing and brute force — explaining
the protocol behaviour behind each step.
Turn raw findings into a client-ready deliverable that preserves a template’s formatting.
Using the attached DOCX template and these findings [paste], write a
Python generator (python-docx) that fills a full report: executive
summary, scope, methodology, per-finding detail (severity, evidence,
reproduction, remediation) and a technical appendix — preserving the
template’s formatting and images.
Use cases
Real pentesting workflows run with the CSI suite on alias2-mini, across heterogeneous scaffolds. Each card summarises an unedited agent session — the full interactive recordings (with clickable timestamps) live on the CSI suite page.
The agent loaded an 11.4 KB AVR8 flash image into Ghidra via GhidraMCP and ran a full static reverse-engineering session — mapping the boot flow from the RESET vector, decompiling the authentication loop, and pinpointing a timing-vulnerable compare at 0x0006e8. It extracted the hardcoded password (TImInG@ttAkw0rk) and AES-128 key straight from flash, and flagged three CWEs (timing side-channel, hardcoded key, weak nonce).
Handed the TCM Security DOCX template and the findings from the firmware session, the agent wrote a Python generator that programmatically fills the report — executive summary, scope, methodology, two detailed findings (plaintext password / Critical, timing-vulnerable compare / High), reproduction, remediation and a technical appendix — preserving the original template formatting and images.
The agent ingested the public ROS 2 design specifications and project wiki, then threat-modelled the architecture — surfacing DDS transport (unauthenticated by default), SROS2 key distribution, node-graph introspection and parameter-server access as attack surfaces — and generated concrete attack paths mapped against the documented design. The same task was run across two scaffolds — Claude Code and Mistral's Vibe.
Working from real Nessus XML exports, the agent wrote a parser that extracts host inventories, maps severity distributions and emits per-host and aggregate JSON. It then prioritised the findings, cross-referenced CVEs and produced remediation guidance — two scans triaged in parallel.
Against CyberGym — a benchmark that hands the agent a vulnerable codebase and a vulnerability description — CSI analysed the source, understood the flaw, wrote a proof-of-concept and submitted a working exploit autonomously, going from analysis to weaponised PoC end-to-end.
The original BLE CTF needs an ESP32 and a Bluetooth dongle. The agent instead dockerized the whole challenge — building a Python BLE GATT server that emulates the firmware plus a client CLI, no hardware required — then solved all 20 flags via GATT enumeration, read/write, notifications, MTU negotiation, MAC spoofing, brute-force and OSINT, with protocol commentary for each.
Given only a 1,780-line protocol spec and a sample client — no source code — the agent analysed the format, generated ~40 targeted fuzz cases across buffer boundaries, format strings, integer arithmetic, state violations and auth bypass, then ran them against a live ASAN-instrumented server. It triggered three distinct memory-safety bugs: null-byte injection, a double-free during firmware upload, and a signed-integer overflow yielding negative array indices.
Prompt guide
CSI performs best when prompts are precise and focused. These five principles help you get consistent, actionable results — pair them with the example prompts.
Troubleshooting
Common symptoms and their fixes. If none of these resolve your issue, reach out to support.
⚠ Common issues
| Symptom | Fix |
|---|---|
CAI shows Processing initial prompt: --mount... | Your launcher is outdated. Re-run curl -Ls aliasrobotics.com/get_csi | sh. |
UnboundLocalError: Text when using CAI | Known CAI 1.1.2 bug — fixed in CAI 1.1.3. Re-run get_csi (launcher hotfix) or update to the latest CSI image. |
| Mounted folder not visible | Ask the agent to run a shell command, e.g. Run: ls -la /your/mount/path. Typing ls alone sends chat, not shell. |
ln: Permission denied on ~/.csi/workspace/.env | ~/.csi/workspace was often created as root by Docker. Fix ownership: sudo chown -R $USER:$USER ~/.csi/workspace, then re-run ~/.csi/setup-cai-env.sh --link … or the installer. |
Repo .env edits not reflected in CAI | Restart csi — CAI loads /workspace/.env at startup. /env set changes are session-only and are not saved to the file. |
CAI_MODEL missing from /env but model works | Expected — CSI sets CAI_MODEL from ANTHROPIC_MODEL before CAI starts. Use csi --model alias1 or edit the launcher’s -e ANTHROPIC_MODEL=… to change the model. |
| A session feels weaker than your old CAI runs | Expected if you are on the default scaffold — csi runs cc, not CAI, and cc/claude outperform CAI in our benchmarking. Prompting is identical across scaffolds. See Which one should I use? and Multi-agent. |
/compact hangs / pressing y+Enter never returns | Compaction works on every scaffold and should not block other actions. Instead of quitting, export the session .jsonl (csi agents log --path, or from ~/.csi/logs/) and send it to support so we can reproduce. See Sessions, limits & logs. |
| Requests rejected / throttled after heavy use | Per-key rate limiting on PRO licenses, not a fault. The proxy now retries 429/5xx with exponential backoff (2→30s, honoring Retry-After) for up to ~5.5 min, so the action resumes on its own as the ~3–5 min cooldown clears. Tunable via CSI_RETRY_MAX_ATTEMPTS. See Rate limits & timeouts. |
Can’t find / export the .jsonl log from Docker | The proxy log & cost ledger are bind-mounted to the host at ~/.csi/logs/ (and cc/claude transcripts at ~/.csi/docker-config/projects/) — no docker cp needed, they survive container exit. For CAI’s in-container ~/.cai/logs, use docker cp before closing. See Accessing logs. |