SafetyCard Request a review

Continue

Open-source coding agent for IDEs and CLI (cn)

github.com/continuedev/continue · 2026-10-03 · 5522c6f

Defense-in-depth score

2.1 / 10

Continue's CLI asks before shell commands, file writes and MCP calls, but that approval gate does not cover every path. Read and Fetch also run unprompted with no workspace or host limits, giving a hijacked session an unattended exfiltration path. Everything runs on the host as the user, with the full environment, no sandbox, and no step or cost limits.

Safest setup

Continue's CLI asks before shell commands, file writes and MCP calls in interactive mode, and reads its permissions and main config only from your home directory. Beyond that the defaults are thin: everything runs on the host as you, with your full environment, no sandbox and no spending limit, and Read and Fetch run unprompted. The safest setup keeps the prompts on, adds one for Fetch and builds containment around the process.

SetupHowWhat it gives you
Scoped, low-limit credentialsRun cn from an account or environment that holds only the keys this task needs, each scoped or read-only with a spending limit set at the providerWhatever the agent runs reaches only the systems and spend you chose, not every login in your shell C1
Its own container or VMRun cn in a container or VM with only the project mounted and network limited to the model provider and the hosts the task needsAn outer boundary around shell commands, MCP servers and file reads, with your home directory and keys out of reach C4
Per-call approvalRun the interactive TUI in normal mode, without --autoA person decides on shell commands, file writes and MCP calls before they run C2
Approval for web fetches--ask Fetch on each run, or Fetch under ask: in ~/.continue/permissions.yamlA person checks each request the Fetch tool makes before it leaves your machine C5
Only the tools needed--exclude <tool> for each tool the task has no use for, or list them under exclude: in ~/.continue/permissions.yamlThe model sees a smaller tool set, with shell, write and network tools only where you chose them C3
Trusted working directoriesStart cn in repositories you trust, after reading their AGENTS.md, CLAUDE.md and .continue/rulesThe instructions loaded into the system prompt come from people you trust C6

Approving with confidence

  • Read each prompt and approve calls one at a time with 'Continue'; 'Continue + don't ask again' saves a rule covering every later command that starts with the same word.
  • Shift+Tab cycles to a mode with no prompts, so keep the session in normal mode while you work.
  • Headless -p mode runs shell and MCP calls without prompts; use the interactive TUI for work on repositories or content you didn't write.

Handling data

  • ~/.continue/sessions keeps full transcripts, tool output included, in plain text; store it like the files the agent read.

Key gaps (3)

  1. A hijacked session can read files via the auto-approved Read tool and send them out via the auto-approved Fetch tool, with no human involved. C5 · Untrusted input blast radius
  2. All commands and MCP servers run on the host as the user with the full process environment; there is no sandbox. C4 · Code-execution isolation
  3. The agent holds the user's entire ambient authority (all env credentials, SSH agent, CLI logins) with no narrowing for subprocesses. C1 · Identity & least privilege

Criteria

C1 Identity & least privilege

0.00 / 1.00

The CLI runs as the logged-in user and does nothing to narrow that authority. Shell commands start a login shell that inherits the full process environment, and MCP servers are launched with the full environment merged into their own settings, so every cloud, GitHub, SSH-agent or API credential the user has is available to anything the agent runs. There is no per-tool identity or authorization layer; the only control is the approval prompt scored under approval gates, which does not cover every path.

C2 Approval gates

0.25 / 1.00

Interactive mode asks before running shell commands, writing or editing files, and calling MCP tools, and unknown tools default to asking. File edits show a real diff; the shell approval display does not always reflect exactly what will run. Choosing 'don't ask again' on one command writes a broad prefix rule such as Bash(git*) to the user's permissions file. The approval gate also does not cover every path. Read and Fetch also run unprompted, and there are no file checkpoints to undo damage.

C3 Tool & action scoping

0.20 / 1.00

The default tool set includes an arbitrary shell, arbitrary-URL fetch, and file read/write anywhere on disk. Argument checks are denylists: a list of always-blocked shell commands and a list of secret-looking file names that Read and Edit refuse. Read has no workspace containment, and Fetch accepts any URL including localhost and cloud metadata addresses. Tools can be excluded or a read-only plan mode chosen, but the default enables everything.

C4 Code-execution isolation

0.00 / 1.00

There is no execution isolation. Shell commands and MCP stdio servers all run directly on the host as the user, with the full environment, network and home directory available. No sandbox, container or OS profile exists anywhere in the CLI.

C5 Untrusted input blast radius

0.25 / 1.00

Fetched web pages, file contents, MCP results and repository instruction files all enter the model's context with the same standing as the user's request; nothing tracks where content came from. The general approval prompt still stands in front of shell, writes and MCP calls, but it is not tied to whether untrusted content was read, and Read and Fetch run unprompted, which is enough to read a file and send it to an attacker's URL. The approval gate also does not cover every path, so a hijacked session can both exfiltrate and take irreversible action with no human involved.

C6 Memory, context & configuration integrity

0.25 / 1.00

The CLI has no long-term memory store, and its permissions and main config come only from the user's home directory or explicit flags. But it silently loads AGENTS.md/CLAUDE.md and .continue/rules from the working directory into the system prompt, and repository content can influence execution without any trust prompt. Project-level hook files are parsed but never executed at this commit. Saved sessions live in ~/.continue/sessions and are only reused on explicit --resume.

C7 Third-party extensions

0.23 / 1.00

Third-party code enters as MCP servers the user adds to ~/.continue/config.yaml or passes with --mcp; the CLI does not load MCP configuration from the workspace. Server commands run exactly as configured with no version pinning or integrity check, and stdio servers are launched with the user's full environment merged in. MCP tool calls go through the approval prompt by default.

C8 Secrets & sensitive-data protection

0.25 / 1.00

Read and Edit refuse a built-in list of secret-looking files (.env, keys, .aws/, .ssh/); the matching does not cover every path, and the check does not apply to Bash. Subprocesses inherit the full environment. Telemetry is metrics-only and off unless OpenTelemetry is configured, and logs default to info level, but session transcripts with full tool output are stored in plaintext in ~/.continue/sessions and there is no redaction anywhere.

C9 Audit & traceability

0.45 / 1.00

Each session is saved as a structured JSON transcript in ~/.continue/sessions that records tool calls, their arguments, results and status, including denials. It is written by the agent process itself in a location its own tools can modify, carries no actor attribution or tamper evidence, and save failures are only logged. Sub-agent runs temporarily disable the history service, so their tool calls are not recorded individually.

C10 Limits & kill switch

0.20 / 1.00

The agent loop is an unbounded while(true) with no step, wall-clock or cost limit. Shell commands have an idle timeout of 180 seconds that resets whenever output appears, and the model can raise it to 600 seconds per call; background jobs are capped at five. Pressing Escape aborts the model stream cooperatively, but a running shell command is not tied to that abort signal.