Security disclosure

Security by Architecture,
Not Configuration.

Your source code never leaves your machine โ€” that's architecture, not a promise. The only connection Forage makes to Squrl is a startup license check; your code, graph, and conversation history stay entirely local to you.

โœ“ Source code stays local โœ“ No telemetry or usage tracking โœ“ Localhost-only servers
Read the full disclosure

Four properties that define
Forage's trust boundary.

๐Ÿ”’

Zero-Exfiltration Architecture

The indexer, graph engine, and version control run 100% locally on your machine. Your source files are read only โ€” never transmitted anywhere. The database lives at .forage/forage.db inside your project directory and never leaves it.

๐ŸŒ

Localhost-Only Servers

Both the web UI (localhost:9988) and MCP server (localhost:9989) bind exclusively to 127.0.0.1. They are not reachable from the network โ€” not even on a LAN โ€” without explicit port forwarding that you control.

๐Ÿ”‘

MCP Authentication

The MCP HTTP/SSE server requires an X-API-Key header on every request. The key is generated locally using 32 bytes of cryptographic randomness (CSPRNG) and stored only in ~/.forage/config.json on your machine. It is never transmitted to Squrl.

๐Ÿ“ก

No Telemetry

Forage contains no analytics, crash reporters, or usage tracking of any kind. On each startup, Forage contacts Squrl's licensing server to verify your token and certificate โ€” that request contains only your license credentials, never your source code, graph data, or any content. No heartbeat. No update checks. No error beacons.

Where your data goes.
Accounted for, honestly.

Your Codebase on-disk
Forage Indexer local process
Local DB .forage/forage.db
Graph Engine & MCP Server localhost:9989
Your AI Agent (Claude, Cursor, etc.) queries only
Two outbound paths exist โ€” both are documented here:

1. License verification โ€” on every startup, Forage contacts Squrl's licensing server to validate your token and certificate. Only your license credentials are sent; no code, graph data, or usage information is included.

2. Inference provider โ€” if you configure a remote inference server, Forage sends structured graph context (file and symbol names, relationships) โ€” not your raw source files โ€” to that provider. You control this choice entirely. For local inference, run Ollama and no code or graph data leaves your machine.

Every data type.
Accounted for.

Data Type How It's Used Leaves Your Machine?
Source code filesIndexed locally into knowledge graphโŒ Never
File names & pathsStored in local DBโŒ Never
Code symbols (functions, classes)Graph nodes in local DBโŒ Never
Graph context summariesSent to inference server (if configured)โš  Only to your chosen provider
Conversation historyStored in local DBโŒ Never
User annotations & tagsStored in local DBโŒ Never
License token & certificateVerified with Squrl's licensing server on every startupโš  To Squrl only โ€” no code or graph data
API keyStored in ~/.forage/config.jsonโŒ Never
LogsWritten to ~/.forage/forage.logโŒ Never

Honest about the
one exception.

โš  Honest caveat

If you use a cloud-hosted inference provider, Forage sends the AI a compact graph context: file names, symbol names, relationship edges, and any user-added notes. It does not send your raw source file contents.

This is a deliberate design trade-off. The knowledge graph is a structural representation of your code, not the code itself.

โœ“ For a completely air-gapped workflow: run Ollama on your own hardware and point Forage at http://localhost:11434. In this configuration, Forage makes zero outbound connections. No data leaves your machine.

CISO Edition:
the hard questions.

QCan Forage exfiltrate our source code?

No. The indexer has no outbound network capability. All data written by Forage stays in .forage/ inside your project directory.

QDoes Forage require internet access?

Yes, on startup. Forage contacts Squrl's licensing server to verify your license token and certificate each time it launches. Once running, no additional internet access is required โ€” unless you configure a cloud inference provider.

QWho can access the MCP server?

Only processes on the same machine that possess the API key. The server is bound to 127.0.0.1 and is not network-accessible.

QWhat if an attacker gains access to the .forage/ folder?

They could read cached graph data: symbol names, file structure, and annotations. They could not access actual source files through Forage.

QIs Forage suitable for air-gapped environments?

Not fully. Forage requires a connection to Squrl's licensing server on every launch to verify your license. Once running, no further internet access is needed when paired with a local Ollama instance. Contact us if your environment has strict outbound restrictions.

QDo you store any data on your servers?

Squrl's licensing server receives your license token and certificate on each Forage startup to validate your subscription. It receives nothing about your source code, file structure, graph data, or usage. Your code and knowledge graph never leave your machine.

Found something?
Tell us first.

1
Report privately. Email a description of the vulnerability, steps to reproduce, and your assessment of impact to security@squrl-labs.com.
2
Wait for acknowledgment. We target a 72-hour initial response to confirm receipt and triage severity.
3
Coordinated disclosure window. We request a 90-day coordinated disclosure window from the date we confirm the issue.
4
Credit. We will publicly credit researchers who follow this process, if they wish to be named.

Security contact

security@squrl-labs.com

PGP fingerprint: 28E5 3D62 23BB B1FE C975 F01D D324 7507 59C6 7395

SLA: 72-hour acknowledgment  ยท  90-day coordinated disclosure window  ยท  We do not pursue legal action against good-faith security research.