Constructdocs
section · guides

Embedding boundary

What stays on your machine, what crosses the network, and how Construct isolates instances when you run it in embed mode.

2 min read·guides / concepts / embedding-boundary

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.

localYour machine.construct/ · beads · Postgres · gitbuildContextPacketContext packetrole-scoped excerpt token-budgetednetworkLLM APIClaude · OpenAI · Ollama

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 buildContextPacket goes 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:

ModeWhat it means
initBasic mode. Services not yet started. Dashboard shows limited navigation.
soloFull local mode. Postgres + pgvector running locally. No shared remote.
embed / liveFull 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.env plus 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.