Operate

FAQ & troubleshooting

Short answers to the questions that actually come up — most of which are permissions working as intended.

“Why can't I see X?”

A teammate sees a memory I don't

Almost always permissions, and almost always one of three checks: you lack a path grant covering the folder, the folder (or an ancestor) is restricted and your grant sits above the boundary, or the memory's classification exceeds your clearance. All three must pass. Ask a folder manager or admin to check grants — see Admin & governance.

Search returns nothing for a document I know exists

Same three checks — search is trimmed inside the query, so inaccessible content doesn't rank, snippet, or even count. Also check the approved-only toggle: drafts are hidden when it's on, and deprecated versions never appear in search at all.

My personal imports aren't visible to my team

By design. Personal connections import into your restricted /people/… folder. To share something, move or re-capture it into a team folder.

Answers & refusals

Chat refused to answer — is that a bug?

No — it's the honesty guarantee. A refusal means no accessible memory covers the question. The fix is content, not settings: capture the missing knowledge, or get access to the folder that holds it. Refusals are logged and clustered into gaps, so repeated unanswered questions surface as a documentation backlog on the org Overview.

An answer cited a draft

Drafts are visible but always labeled, and answers prefer approved content when sources conflict. If drafts shouldn't appear for a use case, use the approved-only search flag, and get drafts through the review queue faster.

Capture & compilation

I captured something and nothing appeared

Capture returns immediately; the Gardener compiles asynchronously — check the capture's status (GET /v1/sources/:id, or get_capture_status over MCP). Compiles are serialized per workspace, so a bulk import ahead of you can queue things for a while. Failed extractions (corrupt PDF, unsupported file) fail cleanly with the source marked failed — nothing enters half-parsed.

My capture got merged into an existing memory

That's the Gardener deduplicating: if your capture reads like a better version of an existing node, it lands as a new draft version on that node rather than a duplicate. The version history shows exactly what happened, and rollback is one action if the merge was wrong.

Connector issues

A sync run failed with “authorization expired”

OAuth tokens for some providers expire when unused (Atlassian rotates refresh tokens and expires them after ~90 idle days). Reconnect from Settings → Integrations (or Account, for personal connections). Pasted credentials fail when revoked on the provider side — re-paste a fresh key.

A sync ran but imported nothing

Syncs are incremental by content hash — unchanged documents are skipped, so a quiet source produces an empty run. Check the run's counts in the connector detail; per-document errors are listed there too.

Slack won't accept my pasted token for a personal connection

Personal Slack is OAuth-only — user tokens can't be hand-minted. Pasted xoxb- bot tokens work for org-level connections only.

MCP issues

“Requires a personal token”

You called a governance tool with an integration token. Governance (approvals, task verdicts, mappings, tokens, analytics) needs a personal token, which acts as its owning member with their live role. See MCP → tokens.

Tools connect but return empty results

The token's scopes are the fence: an integration token scoped to /projects/apollo sees nothing outside it, and that's the feature. Mint a token with the right scopes rather than working around it.

Product questions

Is Engram a wiki?

No — it's a governed memory layer with typed, versioned objects and an approval lifecycle. It also isn't a chatbot wrapper: the answer API is one consumer of the memory layer, not the product.

Can AI approve its own writes?

Structurally impossible: agent write tools can't set status, the service layer asserts AI writes enter as drafts, and a database constraint backs both. Only a human with manage rights on the folder promotes content — see the lifecycle.

What does Engram send to third parties?

Content goes to your configured model endpoint (OpenAI or a compatible endpoint you control) for embedding and answering; Clerk holds identities only. Everything else — memory text, bodies, embeddings, audit — lives in your Postgres and your bucket. See what lives where.

Who can read my chat conversations?

Conversations are private to their actor and persist across your devices; they are not shared surfaces.