How to connect Codex to your apps and give it memory
Register CoreSpeed in Codex with codex mcp add, sign in, connect your apps, and add memory rules to AGENTS.md so Codex recalls decisions across sessions.

Codex reaches your apps and durable memory through one MCP server. Run codex mcp add corespeed --url https://api.corespeed.io/mcp, sign in with codex mcp login corespeed, connect your apps in the CoreSpeed dashboard, and add the memory rules to ~/.codex/AGENTS.md. Codex then searches memory at the start of a task and saves decisions at the end, in every session.
- 1Register and sign incodex mcp add, then codex mcp loginThe browser opens login.corespeed.io.
- 2Verify in a new sessionmanage__whoami names you and your organization
- 3Connect your appsDashboard, Connectors; private or sharedTools show up on the next call as linear__, notion__, github__.
- 4Add memory rules to AGENTS.mdthe user-level file, one copySearch memory before planning; remember after significant work.
- 5Optional: a key for headless jobs--bearer-token-env-var CORESPEED_API_KEYThe entry stores the variable name, never the key.
How do you add the server to Codex?
- Register the server and sign in through the browser:
codex mcp add corespeed --url https://api.corespeed.io/mcp
codex mcp login corespeed
- The browser opens
login.corespeed.io. The consent screen names the client that is asking. Sign in or create an account. A first sign-in from Codex creates your organization on its first tool call; no dashboard visit is needed. - Start a new Codex session. Ask Codex to call
manage__whoami; it names you and your organization.
If Codex already has a corespeed entry for a different URL, replace it rather than adding a second one. Duplicate registrations collide on tool names.
You can also hand Codex the line set up https://corespeed.io/SKILL.md. It fetches the skill, adds the server, saves the skill at ~/.agents/skills/corespeed/SKILL.md, signs you in, and asks which apps to connect. Per-client details are on the MCP server page.
How do you use an API key instead of the browser?
A Codex job that runs where no browser can open takes an API key. Create one in Dashboard → API keys and put it in an environment variable named CORESPEED_API_KEY. Remove the browser entry with codex mcp remove corespeed, then register the server again with --bearer-token-env-var CORESPEED_API_KEY added to the same codex mcp add command. The entry stores the variable name; the key itself never lands in a config file.
A member key (sk-cs-) acts as you and reaches your private connections and the organization's shared ones. An agent key (sk-csa-) acts as an agent principal and reaches shared connections only; give one to an unattended job you operate. With a key, manage__whoami answers jwt_session_required, because that tool serves signed-in members. Verify instead that one free call such as memory__list_memory succeeds. The four credentials are compared on the Authentication page.
How do you connect your apps?
- Open Dashboard → Connectors and authorize the apps Codex should use. Their tools show up on the next call as
linear__search_issues,notion__create_page,github__create_pull_request, and so on. - Choose private or shared for each connection. Private is reachable only by you and your clients. Shared is reachable by the whole organization.
CoreSpeed stores the credential, refreshes it when the provider allows, and hands Codex namespaced tools. Codex never holds the token. If a connected account later shows needs_reauth, its tools stay listed and calls fail until you reauthorize it in the dashboard. Nothing in the Codex configuration is wrong in that state. See Connectors.
How do you give Codex memory?
Memory is a built-in capability. It is on by default, costs 0 credits per call, and belongs to the organization. The same facts are there when you open Claude Code or Cursor tomorrow, or when you replace the agent.
| Tool | What it does |
|---|---|
memory__search_memory | Hybrid search: lexical matching, entity aliases and vector similarity, fused into one ranking |
memory__remember | Save a fact or decision; scope is private by default or shared on request |
memory__get_memory | Read one memory in full by id |
memory__list_memory | List memories; a free call that doubles as a connectivity check |
memory__update_memory | Change a memory you own |
memory__archive_memory | Retire a stale memory and name its replacement with superseded_by, where memory maintenance is rolled out |
- Add the standing rules to
~/.codex/AGENTS.md, or to$CODEX_HOME/AGENTS.mdwhen that variable is set. This is the user-level file, so the rules hold in every project. Do not add them to a project's own file, and do not add a second copy.
- At the start of each non-trivial task, search CoreSpeed memory with
memory__search_memoryfor relevant context before planning, without waiting to be asked. - After significant work, save durable decisions and conventions with
memory__remember. - When a task needs an external tool or service, check and prefer CoreSpeed connectors; they are scoped, audited and budget-capped.
- If a needed connector is not connected yet, ask the user to connect it at https://app.corespeed.io/connectors.
The server helps on its own as well. On every MCP initialize it sends instructions that tell the agent to search memory with two or three short queries at the start of a non-trivial task and to save durable facts after significant work, plus a short index of your pinned memories. Pinning means "surface this at the start of every session". The rules in AGENTS.md keep the same behavior in place when the skill is not active.
What belongs in memory?
A preference, a product decision, a named relationship, an operating constraint. A transcript archive does not belong there, and neither do secrets or application data. Memory enforces nothing; policy lives in Smart Approval.
Each write is private by default. Shared must be asked for explicitly, and the caller's identity comes from authentication, so an agent cannot write as someone else. The boundary is enforced in Postgres by row-level security. Long memories come back as excerpts: a memory of 1,200 characters or fewer is returned whole, and for a search hit the excerpt is the passage that matched. The Free plan holds 200 MB of memory; Pro holds 2 GB. Retrieval and quotas are described on the Memory page.
What does a session look like?
Codex starts a task on the release checklist. It calls memory__search_memory with "release checklist" and "rollout window" and finds a shared memory: rollout requires a two-day review window. It reads the issue with linear__search_issues, opens the change with github__create_pull_request, and saves one line with memory__remember in shared scope: the review window now starts when the pull request is opened.
Tomorrow, in Claude Code, memory__search_memory returns that line. The conversation itself is not transferred between agents; memory holds the facts and decisions that came out of it.
FAQ
Does memory cost credits? No. Memory operations cost 0 credits per call. Storage quotas and rate limits protect the shared service.
Can a teammate see what Codex remembers? Only memories saved with scope: "shared". Private is the default, and the boundary is enforced by row-level security in the database.
Where does Codex keep the skill? ~/.agents/skills/corespeed/SKILL.md, the shared user-level skills directory. ~/.codex/skills is deprecated.
What if a memory is wrong? Save the correction with memory__remember, then archive the old one with memory__archive_memory and superseded_by set to the new id. A teammate's memory takes a reason and becomes a proposal that its author or an org admin merges or rejects in Dashboard → Memory → Proposals. An agent can propose and never merge.