Profile seeding and import
There are four ways a profile starts with useful context.
- MCP (default): connect
https://mcp.configure.dev; the profile seeds itself as the model saves facts and imports.
Configure Link
Use Configure Link when the user is actively in your product. The user can verify identity, review what the agent can access, connect apps, and seed the profile before your backend performs the first approved read.
html
<script src="https://configure.dev/js/configure.js"></script>
<button
data-configure-link
data-publishable-key="pk_..."
data-agent="your-agent">
Personalize
</button>After Link emits configure:linked, send the token to your backend and create a profile object:
ts
const profile = configure.profile({ token });
const read = await profile.read({
sections: ["identity", "preferences", "summary"],
});Use Continue with Configure (see the SSO drop-in guide) as the front door; Configure Link is the inline fallback when you cannot host the redirect. Omit sections only when the agent genuinely needs the broad approved overview.
Server-Side Users
For app-local users who have not linked Configure yet, pass a stable externalId to the SDK or send X-User-Id over HTTP. This creates a developer-scoped profile. apiKey (sk_) and the agent handle come from npx configure setup (see Installation).
ts
import { Configure } from "configure";
const configure = new Configure({
apiKey: process.env.CONFIGURE_API_KEY,
agent: process.env.CONFIGURE_AGENT,
});
const profile = configure.profile({ externalId: "customer-123" });
await profile.remember("User prefers concise support replies.");Developer-scoped profiles are not federated across developers until the user links a Configure identity.
Bulk Import / Backfill
Use configure.importProfiles() when you already have historical dialogue or existing profile artifacts and want Configure to create or enrich many developer-scoped profiles.
ts
const job = await configure.importProfiles({
mode: "backfill",
idempotencyKey: "migration-2026-05-11",
users: [
{
externalId: "customer-123",
profile: {
summary: "Longtime traveler based in SF.",
preferences: ["Prefers window seats."],
},
conversations: [
{
id: "thread-1",
messages: [
{ role: "user", content: "I usually fly out of SFO." },
{ role: "assistant", content: "Got it." },
],
},
],
},
],
});
const status = await configure.importJobs.get(job.id);Import is a server-side operation and requires a secret key (sk_). Do not call it from browser code. It is not a model-facing tool and it is not part of the profile.tools() set.
For a user-directed dump inside a conversation (pasted transcript, a ChatGPT memory export), the hosted MCP server exposes configure_profile_import, which distills the text into one note in a box. importProfiles() remains the developer backfill path.
Import is also separate from live turn write-back:
| Primitive | Use it for |
|---|---|
profile.remember() | One explicit fact or preference. |
profile.commit() | Live turn write-back after profile reads. |
configure.importProfiles() | Historical/onboarding backfill from raw dialogue or profile artifacts. |
Raw dialogue is source material for extraction. It is not returned as default portable profile memory. Import writes typed memories under the acting agent namespace:
txt
/agents/{resolved-agent}/memories/{YYYY-MM-DD}/{mem_id}.json
/agents/{resolved-agent}/imports/{import_job_id}/...Configure resolves {resolved-agent} from the API key and agent configuration. Request bodies cannot set storage paths, source, written_by, timestamps, or memory IDs. Imported memories include safe provenance such as import_job_id and input_conversation_id.
Import does not write root profile files:
txt
/identity.json
/preferences.md
/user.md
/context.mdProfile-like hints stay in the acting agent namespace as typed memories or import records. Root profile promotion is a separate, stricter workflow.
Connectors
Users can connect Gmail, Calendar, Drive, or Notion through Configure hosted UI. Connector data can seed profile context and back explicitly enabled connector model tools. In-conversation, agents on hosted Configure MCP obtain this link by calling configure_connect, never by constructing URLs.
ts
const tools = profile.tools({ connectors: ["gmail", "calendar"] });