Embedding boundary
What stays on your machine, what crosses the network, and how Construct isolates instances when you run it in embed mode.
Construct is designed to keep your data local by default. This page explains exactly what leaves your machine, what doesn't, and what changes when you run Construct in embed mode or with multiple instances.
What stays local
Everything in .construct/ stays on your machine (or on your team's shared Dolt remote if you're in team mode, never on Construct's servers):
.construct/knowledge/: ingested documents, ADRs, research briefs, meeting notes.construct/observations/: session observations, vector embeddings, entity graph.construct/sessions/: distilled session records- Postgres: when running with Docker, the database is local. Schema, embeddings, and traces never leave your host.
What crosses the network
The only data that leaves your machine is what you explicitly send to an LLM or provider:
- LLM API calls: the context packet built by
buildContextPacketgoes to whichever model you have configured (Claude, OpenAI, local Ollama, etc.). The packet contains the relevant slice of your codebase and session context. - Provider integrations: if you configure Slack, GitHub, Jira, or Salesforce, Construct reads from those APIs. It does not write back unless you invoke a command that explicitly does so.
- Embed mode parent/child: if you run a child Construct instance embedded in another tool, the instances communicate locally over a configured port. No external relay.
The LLM context packet is the main surface to be aware of. It is scoped by role: buildContextPacket selects only the artifact kinds relevant to the dispatched specialist, within an explicit token budget. Unrelated artifacts are omitted.
Modes
Construct runs in three modes that affect which features are active:
| Mode | What it means |
|---|---|
init | Basic mode. Services not yet started. Dashboard shows limited navigation. |
solo | Full local mode. Postgres + pgvector running locally. No shared remote. |
embed / live | Full access. Parent construct instance has registered this instance as a child. Dashboard shows full navigation including embed-specific views. |
The mode is detected automatically. You can check it with construct status.
Running multiple instances
If you run Construct in multiple projects simultaneously, each instance is namespace-isolated:
- Config: each instance reads its own
~/.config/construct/config.envplus any project-level overrides - Data:
.construct/directories are per-project; observations and sessions don't bleed between projects - Ports: each instance is assigned its own dashboard port. Conflicts surface as warnings during
construct init.
Set CONSTRUCT_INSTANCE_ID in your config to give an instance a stable identity across restarts. This is mainly useful when a parent instance needs to reference a specific child.
What Construct does not do
- Does not send your
.construct/contents to Anthropic or any third party - Does not phone home on install or runtime
- Does not write back to GitHub, Jira, or Slack unless you run a command that explicitly does so
- Does not share embeddings or knowledge between separate projects
If you're evaluating Construct for a compliance-sensitive environment, the relevant surface area is the LLM API calls. Everything else is local I/O.