Configuration¶
Documentation home · Previous: Features · Next: CLI
Synapse reads its configuration from the process environment. It does not auto-load a file.
Pass settings with docker run --env-file, Compose env_file, a strict dotenv loader, or your
process manager. Do not shell-source an untrusted dotenv file: shell syntax in that file would execute.
A fully documented template lives in .env.example.
Conventions: an empty value means unset, so the built-in default applies. Booleans accept
1/0/true/false. Durations use Go syntax such as 30s, 10m, 1h. Sizes are byte counts.
Required¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_API_TOKEN |
(none) | Bootstrap-admin bearer token. The API exits if empty. Operational routes require it; GET /healthz is intentionally public. Generate with openssl rand -hex 32. |
Core and server¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_HTTP_ADDR |
:8080 |
Listen address. |
SYNAPSE_ENV |
development |
Non-prod values: development, dev, local, test, ci. Any other value is treated as production and enables the strict, fail-closed gates. |
SYNAPSE_LOG_LEVEL |
info |
Log verbosity. |
SYNAPSE_SINGLE_TENANT |
true |
Single-tenant mode. |
SYNAPSE_AUP_VERSION |
1.0 |
Acceptable Use Policy version the operator accepts on first run. |
SYNAPSE_AUP_FILE |
data/aup-accepted.json |
File-backed path, in-memory mode only. |
SYNAPSE_AUDIT_FILE |
data/audit.jsonl |
File-backed path, in-memory mode only. |
SYNAPSE_MEASURE_CURSOR_SECRET |
Ephemeral in development; required in production | HMAC key for signing Measures pagination cursors; minimum 32 bytes |
Persistence¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_DB_DSN |
(in-memory) | PostgreSQL connection URL. Empty runs an in-memory dev store, so nothing is durable. |
SYNAPSE_DB_MAX_CONNS |
32 |
pgx pool maximum connections. |
SYNAPSE_DB_MIN_CONNS |
0 |
pgx pool minimum connections. |
SYNAPSE_DB_MAX_CONN_LIFETIME |
1h |
Connection lifetime. |
SYNAPSE_DB_MAX_CONN_IDLE |
30m |
Idle connection timeout. |
Evidence blob store (S3 or MinIO)¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_BLOB_ENDPOINT |
(in-memory) | Host and port without a scheme. Empty runs an in-memory blob store. |
SYNAPSE_BLOB_ACCESS_KEY |
synapse |
Access key. |
SYNAPSE_BLOB_SECRET_KEY |
synapse-secret |
Secret key. |
SYNAPSE_BLOB_BUCKET |
synapse-evidence |
Bucket for evidence artifacts. |
SYNAPSE_BLOB_USE_SSL |
false |
Set true for https endpoints. |
Custody, signing, and anchoring (required in production)¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_VAULT_MASTER_KEY |
(ephemeral) | AES-256 credential-vault master key, 64 hex chars or base64 of 32 bytes. Empty uses an ephemeral dev key, so stored secrets do not survive a restart. Never logged. |
SYNAPSE_EVIDENCE_SIGNING_SEED |
(ephemeral) | ed25519 seed attesting evidence and audit chain heads. Never logged. |
SYNAPSE_TSA_URL |
(none) | RFC-3161 timestamp authority for external anchoring. Empty leaves the chain signed but not anchored, still tamper-evident. |
Software composition analysis¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_SBOM_PRODUCER |
syft |
syft (pinned binary, full coverage, dep-graph edges) or ownsbom (detection-independent owned parsers, components only). |
SYNAPSE_SYFT_BIN |
syft |
Syft executable, resolved on PATH. |
SYNAPSE_GRYPE_BIN |
grype |
Grype executable. Missing means detection degrades to the live source only. |
SYNAPSE_GRYPE_DB_DIR |
(online) | Pin Grype's vulnerability database to a pre-synced directory for offline, reproducible scans. |
SYNAPSE_SCAN_TIMEOUT |
10m |
Per-scan timeout. 0 disables. |
SYNAPSE_FINDING_MIN_SEVERITY |
info |
Lowest severity promoted to a finding: critical, high, medium, low, info. The default promotes everything; set high to tighten the floor and drop medium/low/info. |
SYNAPSE_MAX_WORKSPACE_BYTES |
2147483648 |
Maximum prepared workspace size. A bigger target or archive is rejected. |
SYNAPSE_OWNED_ADVISORY |
true |
Match the SBOM against the owned advisory store, alongside the live and offline sources. Populate it first with synapse-cli sync-advisories. |
SYNAPSE_JARHASH_ONLINE_ENABLED |
false |
Recover the coordinate of a shaded or metadata-less JAR by its SHA-1. |
SYNAPSE_OSV_URL, SYNAPSE_OSV_BULK_URL, SYNAPSE_DEPSDEV_URL, SYNAPSE_KEV_URL, SYNAPSE_EPSS_URL |
(public) | Feed overrides for tests or mirrors. |
Extra scanners and detection tuning (opt-in)¶
Most of these ship ON by default (safe, best-effort). See Features for what each one does.
| Variable | Default | Description |
|---|---|---|
SYNAPSE_SECRET_SCAN_ENABLED |
true |
Secret scanning over the workspace (regex plus entropy). Matches are redacted; the raw secret never reaches logs, evidence, or the report. |
SYNAPSE_MISCONFIG_ENABLED |
true |
Misconfiguration and IaC scanning of Dockerfiles and Kubernetes manifests. |
SYNAPSE_CSPM_ENABLED |
false |
Enable durable read-only cloud posture runs. Requires PostgreSQL, fleet assets, synapse-worker, sandbox, and kernel egress enforcement. |
SYNAPSE_CSPM_PROVIDERS |
empty | Comma-separated provider allowlist: aws, azure, gcp. |
SYNAPSE_CSPM_RATE |
0 |
Requests per second, 1..100; 0 selects provider defaults. |
SYNAPSE_CSPM_HELPER_BIN |
synapse-cspm |
CSPM requires this to be an absolute path and authoritatively pinned in SYNAPSE_TOOL_HASHES; the helper executes inside bubblewrap. |
SYNAPSE_CSPM_EGRESS_HOSTS |
empty | Comma-separated provider=hostname HTTPS allowlist. Empty fails CSPM startup closed. |
SYNAPSE_FP_TRIAGE_ENABLED |
false |
Enable advisory LLM false-positive analysis over production-scope SAST/misconfig findings. Secrets never enter the LLM. A proposer alone or a scan without an evidence ledger never changes a gate. |
SYNAPSE_FP_TRIAGE_MODEL |
SYNAPSE_LLM_MODEL |
Proposer model for false-positive analysis. |
SYNAPSE_FP_TRIAGE_PROVIDER |
SYNAPSE_LLM_PROVIDER |
Explicit provider identity for the triage proposer model. |
SYNAPSE_FP_TRIAGE_MODE |
shadow |
shadow records would_gate_exempt but always keeps the finding gating. enforce permits the verified-consensus policy to set gate_exempt. Empty or unknown values fail closed to shadow. |
SYNAPSE_FP_TRIAGE_MAX_FINDINGS |
100 |
Hard per-scan cap on eligible findings sent to AI triage (range 1..1000). When capped, deterministic policy-impact/severity/risk ordering selects work; skipped findings remain reported and gating, and counts are exposed in ai_triage_budget. Invalid values restore the finite default. |
SYNAPSE_FP_TRIAGE_CONCURRENCY |
6 |
Maximum simultaneous AI finding assessments (range 1..32). A distinct verifier makes at most two provider calls per attempted finding. Invalid values restore the finite default. |
SYNAPSE_FP_TRIAGE_MAX_TOKENS |
1000000 |
Conservative per-scan token reservation ceiling. Both proposer/verifier requests are reserved before a finding is scheduled; work that does not fit remains gating. |
SYNAPSE_FP_TRIAGE_MAX_COST_MICRO_USD |
0 |
Optional per-scan cost ceiling in integer micro-USD (0 disables cost enforcement). When enabled, all active role prices must be configured or triage fails closed without provider calls. |
SYNAPSE_FP_TRIAGE_PROPOSER_INPUT_MICRO_USD_PER_MILLION |
0 |
Proposer input price in micro-USD per million tokens, for deterministic cost reservation and observed-cost metrics. |
SYNAPSE_FP_TRIAGE_PROPOSER_OUTPUT_MICRO_USD_PER_MILLION |
0 |
Proposer output price in micro-USD per million tokens. |
SYNAPSE_FP_TRIAGE_VERIFIER_INPUT_MICRO_USD_PER_MILLION |
0 |
Verifier input price in micro-USD per million tokens. |
SYNAPSE_FP_TRIAGE_VERIFIER_OUTPUT_MICRO_USD_PER_MILLION |
0 |
Verifier output price in micro-USD per million tokens. |
SYNAPSE_FP_TRIAGE_CIRCUIT_FAILURES |
5 |
Consecutive provider/parse failures before that role's circuit opens (range 1..100). An open circuit is advisory-only and cannot exempt findings. |
SYNAPSE_FP_TRIAGE_CIRCUIT_COOLDOWN |
1m |
Open-circuit cooldown before one half-open probe (maximum 24h). |
SYNAPSE_FP_TRIAGE_ALERT_MIN_SAMPLES |
10 |
Minimum per-scan samples before a safety-rate baseline alert is emitted. |
SYNAPSE_FP_TRIAGE_DISAGREEMENT_BASELINE_BPS |
1500 |
Expected proposer/verifier disagreement rate in basis points (10000 = 100%). |
SYNAPSE_FP_TRIAGE_EXEMPTION_BASELINE_BPS |
1000 |
Expected gate-exemption rate in basis points. |
SYNAPSE_FP_TRIAGE_PARSE_FAILURE_BASELINE_BPS |
200 |
Expected model parse-failure rate in basis points. |
SYNAPSE_FP_TRIAGE_ALERT_DEVIATION_BPS |
1000 |
Absolute deviation from a configured baseline that emits a persisted warning and structured alert metric. |
SYNAPSE_LLM_PROVIDER |
openai-compatible |
Explicit proposer-provider audit identity. It is not inferred from the URL because gateways may route multiple providers. |
SYNAPSE_VERIFIER_BASE_URL |
SYNAPSE_LLM_BASE_URL |
Independent OpenAI-compatible endpoint for the verifier. |
SYNAPSE_VERIFIER_API_KEY |
SYNAPSE_LLM_API_KEY |
Independent verifier credential; never logged. |
SYNAPSE_VERIFIER_PROVIDER |
SYNAPSE_FP_TRIAGE_PROVIDER |
Explicit verifier-provider audit identity. It defaults to the proposer identity so provider independence remains advisory-only until an operator deliberately selects a different verifier provider. |
SYNAPSE_VERIFIER_MODEL |
SYNAPSE_LLM_MODEL |
Must name a different canonical model family for AI gate exemptions. The verifier is blind to the proposer result. Provider/date aliases and Amazon Bedrock inference-profile IDs fail closed as the same family. Two-model consensus remains subject to high/critical, secret, and dangerous-CWE human-review floors. |
SYNAPSE_FP_TRIAGE_INDEPENDENCE |
model_family |
model_family requires different canonical model families. provider additionally requires different non-empty provider identities. Empty defaults to model-family compatibility; unknown values fail closed to advisory-only. |
SYNAPSE_DETECTION_PRIORITY |
comprehensive |
comprehensive reports every match. precise quarantines single-source, non-KEV findings into a needs-verify queue that is still reported and sealed but exempt from the --fail-on gate. |
SYNAPSE_OFFLINE |
false |
Skip the live advisory source and detect with the offline database only. |
SYNAPSE_IGNORE_UNFIXED |
false |
Drop vulnerabilities that have no fixed version. |
SYNAPSE_DB_MAX_AGE_DAYS |
30 |
Warn when a dated reference database (KEV, EPSS, or the Grype DB) is older than this many days. 0 disables the check. |
SYNAPSE_SUPPRESSION_ENABLED |
true |
Honor a .synapseignore file. Acceptance exempts only the --fail-on gate; the finding is still reported, persisted, and evidence-sealed. |
SYNAPSE_VEX_ENABLED |
true |
Consume an in-repo OpenVEX document (.synapse.vex.json) at scan time, on the same retain-and-mark surface as suppression. |
SYNAPSE_COMPLIANCE_ENABLED |
true |
Compliance benchmark. Re-projects findings onto a control specification and reports per-control PASS or FAIL. |
SYNAPSE_SCAN_CACHE_ENABLED |
true |
Enables content-addressed scan caches. SBOM entries key on content plus producer version. Tenant-bound API AI-triage entries key on tenant, project/engagement scope, finding fingerprint, complete-source hash, prompt-context hash, proposer/verifier models, prompt version, and policy version. Cached AI claims are always rebound to the current finding, re-authorized by server policy, and linked to newly sealed scan evidence; missing tenant identity and provider failures are not cached. The directory must be operator-owned, since a shared-writable cache would allow poisoning. |
SYNAPSE_SCAN_CACHE_DIR |
(per-user) | Cache location. Empty uses a per-user cache directory; AI-triage entries live in its owner-only ai-triage subdirectory and contain typed claims, never source text or credentials. |
SYNAPSE_IMAGE_ROOTFS_ENABLED |
true |
Materialize a container image root filesystem so the owned OS-package catalogers (dpkg, apk, and the rpm sqlite database) and installed-binary catalogers (Go build info, Python dist-info) can run. Best-effort. |
Project Code artifact retention and historical comparisons¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_PROJECT_SOURCE_ARTIFACT_DIR |
data/project-source-artifacts |
Operator-owned local storage for immutable, gzip-compressed Project Code head/base artifacts. Restrict OS access, encrypt/back up it according to source-data policy, and do not place it on a shared writable volume. The full Compose stack mounts its dedicated project-source-artifacts named volume here. |
SYNAPSE_PROJECT_SOURCE_RETENTION |
2160h (90 days) |
How long captured analysis artifacts remain available. Startup cleanup removes expired analysis directories; project deletion removes all of that project's artifacts. Legacy analyses are never backfilled. |
SYNAPSE_PROJECT_SOURCE_MAX_FILE_BYTES |
2097152 |
Maximum captured source file size. Bigger files are retained as unavailable metadata. |
SYNAPSE_PROJECT_SOURCE_MAX_FILES |
10000 |
Maximum source files captured for one analysis. |
SYNAPSE_PROJECT_SOURCE_MAX_BYTES |
524288000 |
Total source-artifact capture budget per analysis. |
SYNAPSE_PROJECT_GIT_COMPARISON_DEPTH |
256 |
Maximum Git history depth fetched to resolve a persisted comparison base. A missing/too-old base leaves source readable but comparison/unified/split capabilities unavailable. |
Historical Code reads are analysis-scoped and private-cacheable. Source and diff APIs never fetch the current repository or read mutable local paths. Git comparison requires configured, validated head/base/default-branch refs; local and archive scans intentionally expose source-only capability. Generated files are hidden by default from the Code inventory but remain retained and explicitly addressable. Binary/non-UTF-8/limited artifacts expose an unavailable reason instead of content.
For docker run, mount durable storage at the image's configured artifact path (the API image uses /project-source-artifacts): --mount type=volume,source=synapse-project-source-artifacts,target=/project-source-artifacts. Removing that volume permanently removes retained historical Code source and diffs.
Fleet attack paths¶
Attack paths are available when SYNAPSE_FLEET_ASSETS_ENABLED=true. They correlate the tenant's
asset relationships with explicitly attributed findings and reachability judgments. Every response
reports whether traversal was truncated; lowering a bound never produces a result that looks complete.
| Variable | Default | Description |
|---|---|---|
SYNAPSE_ATTACKPATH_MAX_LEN |
12 |
Maximum number of steps in one path. Must be positive. |
SYNAPSE_ATTACKPATH_MAX_PATHS |
100 |
Maximum retained paths per requested target or finding. Must be positive. |
SYNAPSE_ATTACKPATH_WALLCLOCK |
2s |
Wall-clock traversal budget. Must be positive. |
Reachability tiers (opt-in per language)¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_REACHABILITY_ENABLED |
true |
Go Tier-2 call-graph reachability proof (best-effort). |
SYNAPSE_JVM_REACHABILITY_ENABLED |
true |
JVM (Java/Kotlin) reachability. |
SYNAPSE_PYREACH_ENABLED |
false |
Python Tier-1 import-reachability (a dead dependency becomes an OpenVEX not_affected). |
SYNAPSE_JSREACH_ENABLED |
false |
JS/TS Tier-1 import-level reachability. |
SYNAPSE_JSREACH_TIER2_ENABLED |
false |
JS/TS Tier-2 symbol-level reachability. |
Fleet, leader election, and DAST¶
All off by default. The fleet needs PostgreSQL + synapse-worker; agents run on Linux hosts / Kubernetes. Enable leader election when running more than one API/worker so scheduled work fires once.
| Variable | Default | Description |
|---|---|---|
SYNAPSE_FLEET_ENABLED |
false |
Fleet transport + agent-admin routes. |
SYNAPSE_FLEET_ASSETS_ENABLED |
false |
Fleet asset model + attack paths. |
SYNAPSE_FLEET_HOST_INGEST_ENABLED |
false |
Accept host-inventory from synapse-agent. |
SYNAPSE_FLEET_CLUSTER_INGEST_ENABLED |
false |
Accept Kubernetes inventory from synapse-cluster-agent. |
SYNAPSE_FLEET_STALE_AFTER |
10m |
An agent older than this reads as stale (<=0 disables the staleness view). |
SYNAPSE_FLEET_COVERAGE_FRESHNESS_TARGET |
24h |
Coverage freshness SLO. |
SYNAPSE_FLEET_MIN_AGENT_VERSION |
empty | Reject agents below this version (empty = no floor). |
SYNAPSE_FLEET_CA_CERT / _CA_KEY / _CERT_TTL |
empty | Enrolment PKI for agent client certificates (never logged). |
SYNAPSE_FLEET_SIGNER_KEY |
empty | Signing key for agent packages/updates (never logged). |
SYNAPSE_LEADER_ENABLED |
false |
Fence scheduled dispatch to one node via a Postgres lease. |
SYNAPSE_LEADER_RESOURCE |
scheduler |
Lease name. |
SYNAPSE_LEADER_TERM |
15s |
Lease term. |
SYNAPSE_LEADER_RENEW |
5s |
Renew interval. |
SYNAPSE_VULNERABILITY_SCHEDULER_ENABLED |
false |
Dispatch due vulnerability-source syncs and recover stale runs. PostgreSQL deployments must also enable leader election. |
SYNAPSE_VULNERABILITY_SCHEDULER_POLL |
1m |
Scheduler polling interval. |
SYNAPSE_VULNERABILITY_SCHEDULER_STALE_AFTER |
30m |
Age after which a queued/running sync is eligible for checkpoint-based recovery. |
SYNAPSE_VULNERABILITY_SCHEDULER_JITTER_PERCENT |
10 |
Stable per-source cadence jitter, from 0 through 100 percent. |
SYNAPSE_VULNERABILITY_SCHEDULER_DISPATCH_LIMIT |
10 |
Maximum new source runs dispatched per scheduler tick. |
SYNAPSE_VULNERABILITY_SCHEDULER_MAX_QUEUE_DEPTH |
100 |
Stop dispatching when the vulnerability-sync queue reaches this depth. |
SYNAPSE_VULNERABILITY_SCHEDULER_RECOVERY_LIMIT |
10 |
Maximum stale runs recovered per scheduler tick. |
SYNAPSE_VULNERABILITY_PROVIDER_SYNC_ENABLED |
false |
Permit provider sync execution. This global gate also blocks already queued runs after rollback. |
SYNAPSE_VULNERABILITY_OCCURRENCE_WRITES_ENABLED |
false |
Permit tenant-scoped occurrence mutations for allowlisted tenants. |
SYNAPSE_VULNERABILITY_FINDING_PROJECTION_ENABLED |
false |
Permit machine-owned finding projection updates for allowlisted tenants. |
SYNAPSE_VULNERABILITY_ACTIONS_ENABLED |
false |
Permit risk-change action creation for allowlisted tenants. |
SYNAPSE_VULNERABILITY_NOTIFICATIONS_ENABLED |
false |
Permit notification-outbox writes for allowlisted tenants. |
SYNAPSE_VULNERABILITY_DRY_RUN_ENABLED |
true |
Persist reconciliation diffs and counts without occurrence, finding, action, or notification mutations. |
SYNAPSE_VULNERABILITY_TENANT_ALLOWLIST |
empty | Comma-separated tenant IDs allowed to use tenant-scoped gates and dry-run; * enables every tenant. Empty fails closed. |
SYNAPSE_SLA_ENABLED |
false |
Enable versioned risk-based remediation deadlines, immutable assessment history, human-only lifecycle transitions, and continuous-intelligence reassessment. See Remediation SLA governance. |
SYNAPSE_DAST_RATE_PER_SEC |
5 |
DAST crawler request rate. |
SYNAPSE_DAST_CONCURRENCY |
4 |
DAST crawler concurrency. |
SYNAPSE_DAST_MAX_DEPTH |
8 |
Maximum crawl depth. |
SYNAPSE_DAST_MAX_PAGES |
2000 |
Maximum pages crawled. |
SYNAPSE_DAST_MAX_WALL_CLOCK |
30m |
Maximum crawl wall-clock. |
SYNAPSE_DAST_HELPER_BIN |
synapse-dast-helper |
Sandboxed DAST helper binary. |
Recon and execution sandbox (sandbox required in production)¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_SANDBOX_ENABLED |
false |
Run tool execution and acquisition in the bubblewrap sandbox. If set but bubblewrap is missing, startup fails closed. |
SYNAPSE_SANDBOX_MEM_MAX |
536870912 |
Per-run memory limit in bytes. |
SYNAPSE_SANDBOX_PIDS_MAX |
256 |
Per-run pid limit. |
SYNAPSE_TOOL_HASHES |
(TOFU) | Authoritative sha256 pins. The sandbox refuses a binary whose hash does not match. |
SYNAPSE_RECON_TIMEOUT |
3m |
Per-run recon timeout. |
SYNAPSE_RECON_CONCURRENCY |
3 |
Recon worker pool size. |
SYNAPSE_RECON_ALLOW_CAPABILITY_SENSITIVE |
false |
Permit tools that need raw sockets. |
SYNAPSE_RECON_VIA_WORKER |
false |
Route recon through the durable queue to synapse-worker. Requires PostgreSQL. |
AI agent orchestration (off by default)¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_AGENT_ENABLED |
false |
Turn on the agent orchestrator. |
SYNAPSE_LLM_BASE_URL |
(none) | OpenAI-compatible Chat Completions endpoint. |
SYNAPSE_LLM_API_KEY |
(none) | Provider key. Never logged. |
SYNAPSE_LLM_PROVIDER |
openai-compatible |
Explicit provider identity retained for audit and separation-of-duties checks. |
SYNAPSE_LLM_MODEL |
(none) | Required when the agent is enabled. |
SYNAPSE_LLM_TIMEOUT |
60s |
Per-request timeout. |
SYNAPSE_AGENT_APPROVAL_MODE |
manual |
Human-in-the-loop approval: manual, filter, or auto. |
SYNAPSE_AGENT_APPROVAL_TIMEOUT |
30m |
Fail-closed approval timeout. |
SYNAPSE_AGENT_MAX_STEPS |
16 |
Per-run step bound. |
SYNAPSE_AGENT_TOKEN_BUDGET |
0 |
0 means unbounded. |
SYNAPSE_AGENT_MAX_DURATION |
10m |
Per-run duration bound. |
SYNAPSE_AGENT_VIA_WORKER |
false |
Durable agent on synapse-worker. Requires the recon worker and PostgreSQL. |
AI analysis brain (opt-in, best-effort)¶
SYNAPSE_JUDGMENTS_ENABLED (on by default) is the prerequisite for the analyzers that mint judgments.
All are best-effort and no-op without inputs. Set a flag to false to opt out.
| Variable | Default | Description |
|---|---|---|
SYNAPSE_JUDGMENTS_ENABLED |
true |
Judgment lifecycle routes (verify, accept, list). |
SYNAPSE_SAST_ENABLED |
true |
Pattern SAST in the scan pipeline. |
SYNAPSE_REACHABILITY_ENABLED |
true |
Call-graph reachability proof (Go, Tier-2). Needs judgments. |
SYNAPSE_PYREACH_ENABLED |
false |
Python import-reachability (Tier-1 dead-dependency → OpenVEX). Needs judgments. |
SYNAPSE_TAINT_ENABLED |
false |
Taint proposals. Needs judgments and the sandbox. |
SYNAPSE_CROSSCHECK_ENABLED |
true |
Detection-source disagreement judgments. |
SYNAPSE_SBOM_CROSSCHECK_ENABLED |
true |
Dual-producer SBOM cross-check. |
SYNAPSE_GOMODGRAPH_ENABLED |
true |
Transitive Go dependency edges via go mod graph. |
SYNAPSE_WRITEUP_DRAFTS_ENABLED |
false |
Agent write-up draft tool. A distinct human signs off. |
Additional operator settings¶
The settings below are intentionally grouped by owning process. They are real operator controls even when they are used only by a CLI, helper, or optional subsystem.
Database, project storage, and maintenance¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_DB_MIGRATION_DSN |
SYNAPSE_DB_DSN |
Optional owner-level PostgreSQL DSN used only for embedded migrations. Use it to keep the runtime DSN least-privileged. |
SYNAPSE_PROJECT_UPLOAD_DIR |
data/project-uploads |
Server-owned directory for uploaded project source bundles. |
SYNAPSE_PROJECT_ANALYSIS_COMPLETION_TIMEOUT |
1m |
Maximum wait for project-analysis completion; non-positive values reset to one minute. |
SYNAPSE_APPROVAL_SWEEP_INTERVAL |
1m |
Sweep interval for expired pending approvals. |
SYNAPSE_PROMOTION_RECONCILE_INTERVAL |
1m |
Interval for deterministic promotion-rule reevaluation. |
Advisory, NVD, and resolver access¶
Network-backed manifest resolution is disabled by default. When enabled, set the associated host allowlist; an empty or overly broad allowlist must not become an implicit network policy.
| Variable | Default | Description |
|---|---|---|
SYNAPSE_NVD_API_URL |
public NVD API | NVD API endpoint override for an approved mirror. |
SYNAPSE_NVD_API_KEY |
empty | NVD API key. Keep it in the process environment or secret manager; never put it in source. |
SYNAPSE_NVD_BUDGET |
20s |
Per-request NVD enrichment budget. |
SYNAPSE_NVD_CVSS_DB |
empty | CLI path to an offline CVSS database built with build-cvss-db. |
SYNAPSE_MAVEN_RESOLVE_ENABLED |
false |
Resolve Maven metadata from allowlisted repositories. |
SYNAPSE_MAVEN_REPO_HOSTS |
empty | Comma-separated Maven host allowlist. |
SYNAPSE_MAVEN_LOCAL_REPO |
platform default | Local Maven repository override. |
SYNAPSE_GRADLE_RESOLVE_ENABLED |
false |
Resolve Gradle metadata. Requires an isolated Gradle home and approved hosts. |
SYNAPSE_GRADLE_HOME |
empty | Isolated Gradle user-home directory. |
SYNAPSE_GRADLE_HTTP_TIMEOUT_MS |
implementation default | Gradle HTTP timeout in milliseconds. |
SYNAPSE_NPM_RESOLVE_ENABLED |
false |
Resolve npm manifests from allowlisted registries. |
SYNAPSE_NPM_REGISTRY_HOSTS |
empty | Comma-separated npm registry host allowlist. |
SYNAPSE_MANIFEST_RESOLVE_ENABLED |
false |
Enable remaining external manifest resolvers. |
SYNAPSE_MANIFEST_REGISTRY_HOSTS |
empty | Comma-separated host allowlist for those resolvers. |
SYNAPSE_JARHASH_BASE_URL |
empty | Approved jar-hash service or mirror URL. |
SYNAPSE_JARHASH_DB_PATH |
empty | Offline jar-hash database path. |
Tool binary overrides use SYNAPSE_AST_BIN, SYNAPSE_GOVULNCHECK_BIN, SYNAPSE_GO_BIN,
SYNAPSE_MVN_BIN, SYNAPSE_GRADLE_BIN, SYNAPSE_NPM_BIN, SYNAPSE_COMPOSER_BIN,
SYNAPSE_BUNDLE_BIN, SYNAPSE_POETRY_BIN, and SYNAPSE_TAINT_CALLGRAPH_BIN. Defaults are the
corresponding command names on PATH; production sandbox deployments should use absolute, pinned paths.
Recon and DAST limits¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_RECON_MAX_OUTPUT |
8388608 |
Maximum captured output per recon run, in bytes. |
SYNAPSE_RECON_QUEUE |
64 |
Recon work queue depth. |
SYNAPSE_DAST_MAX_REAUTH |
2 |
Maximum governed reauthorization cycles for a DAST session. |
SYNAPSE_DAST_MAX_REQUESTS |
20000 |
Hard request ceiling for a DAST session. |
SYNAPSE_DAST_SECRET_<NAME> |
unset | Helper-only projection of a named vault placeholder. The parent constructs and scrubs these values; operators should store the source secret in the vault instead of setting this prefix manually. |
SYNAPSE_DAST_AUTH_REQUEST_FD, SYNAPSE_DAST_AUTH_DECISION_FD,
SYNAPSE_CSPM_CREDENTIAL_FD, SYNAPSE_CSPM_AUTH_REQUEST_FD, and
SYNAPSE_CSPM_AUTH_DECISION_FD are inherited-pipe descriptors managed by the parent process. They are
not operator settings and must not be injected manually.
Fleet control plane¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_FLEET_CA_KEY |
empty | Private key for the fleet client-certificate CA. Required with the fleet CA certificate; treat as a production secret. |
SYNAPSE_FLEET_CERT_TTL |
24h |
Lifetime of issued fleet client certificates. |
SYNAPSE_FLEET_CLIENT_CERT_HEADER |
empty | Trusted reverse-proxy header carrying the verified client certificate. Enable only behind a proxy that strips all client-supplied copies and sets the header after mTLS verification. |
SYNAPSE_UPDATE_PUBLIC_KEY |
built-in release key | Hex Ed25519 public-key override for fleet self-update verification. Use only for a controlled private release channel. |
SYNAPSE_AGENT_CONCURRENCY |
8 |
Total server-side agent work concurrency. |
SYNAPSE_AGENT_QUEUE_DEPTH |
256 |
Pending agent-work queue depth. |
SYNAPSE_AGENT_MAX_PARALLEL |
1 |
Maximum parallel actions per agent; serial by default. |
SYNAPSE_AGENT_RECON_CONCURRENCY |
3 |
Recon work admitted within the agent budget. |
Host and Kubernetes agents¶
The following variables are read by synapse-agent and synapse-cluster-agent, not by the API:
| Variable | Default | Description |
|---|---|---|
SYNAPSE_FLEET_URL |
empty | Fleet API base URL. HTTPS is required except for loopback development. |
SYNAPSE_FLEET_ENROL_TOKEN |
empty | One-time enrollment token. Environment use is supported, but a token file is preferred; the equivalent command-line flag is visible in process listings and shell history. |
SYNAPSE_FLEET_ENROL_TOKEN_FILE |
empty | Preferred file containing the one-time token. Remove it after successful enrollment. |
SYNAPSE_AGENT_STATE_DIR |
platform default | Credential and offline-buffer directory; /var/lib/synapse-cluster-agent for the cluster agent. Protect it from other users. |
SYNAPSE_AGENT_ROOT |
/ |
Host filesystem root inventoried by the VM agent. |
SYNAPSE_AGENT_NAME |
hostname | Human-readable agent display name. |
SYNAPSE_DETECT_CLASSES |
empty | Comma-separated eBPF classes: process, network, file, privilege. Empty disables the engine; Linux root/capabilities are required. |
SYNAPSE_DETECT_CPU_CEIL_PCT |
0 |
CPU ceiling for deterministic class shedding; zero disables shedding. |
SYNAPSE_CLUSTER |
empty (required) | Stable cluster identity attached to every Kubernetes asset. |
SYNAPSE_CLUSTER_NAMESPACES |
empty | Comma-separated namespace scope; empty means all authorized namespaces. |
SYNAPSE_CLUSTER_RESYNC |
5m |
Interval between Kubernetes inventory collections. |
CLI integration¶
| Variable | Default | Description |
|---|---|---|
SYNAPSE_API_URL |
empty | Server base URL used by synapse-cli publish-source; overridden by --server. |
SYNAPSE_REACH_RUST |
false |
Enable conservative Rust manifest/import reachability. |
SYNAPSE_REACH_RUBY |
false |
Enable conservative Ruby manifest/import reachability. |
SYNAPSE_REACH_PHP |
false |
Enable conservative PHP manifest/import reachability. |
MCP server (synapse-mcp)¶
Read and propose only. It never executes. The token and engagement ID are required to start it.
| Variable | Default | Description |
|---|---|---|
SYNAPSE_MCP_TOKEN |
(none) | Bearer token. Never logged. |
SYNAPSE_MCP_ENGAGEMENT_ID |
(none) | The engagement the MCP server is scoped to. |
SYNAPSE_MCP_ADDR |
:8081 |
Listen address. |
Next: CLI