Run locally
Prerequisites: Docker and an OpenAI API key.OWNER_ID decides who receives the private owner surface. In AgentOS and private Slack DMs, every other verified caller receives the private guest surface.
Connect the AgentOS UI
- Open os.agno.com and sign in with an identity listed in
OWNER_ID. - Choose Connect OS → Local.
- Enter
http://localhost:8000, name it Local Context, and connect. - Open Context under Agents and try a prompt from the examples below.
Connect MCP clients
The MCP endpoint exposes one tool,use_context, for retrieving and preparing the owner’s private context. Filing, learning, acknowledgement, drafts, Slack sends, and other mutations are absent from this surface.
http://localhost:8000/mcp, and verifies the connection. Undo the registrations with uvx agno disconnect.
Local MCP is keyless in development. Anything that can reach the port can read the owner’s context through use_context. Keep it on a trusted machine and network. See docs/MCP.md for production OAuth and per-client setup.
How it works
@context is one Agno agent that captures, files, retrieves, and prepares working context. In production, AgentOS verifies HTTP identities from JWTs. Slack verifies signed events and maps their authors to user IDs. Explicit local development trusts the caller-supplieduser_id.
The built-in playbooks help the owner retrieve and prepare context:
Playbooks live in
skills/, one SKILL.md per folder. The shipped set also includes process-today, research, and knowledge-review. When Slack is configured, scheduled daily and weekly playbooks DM their results to the owner.
Context sources
Most sources use Agno context providers that exposequery_<id> for reads and a source-scoped update tool where writes are enabled. The workspace source exposes list_files, search_content, and read_file directly.
The
crm source stores contacts, projects, meetings, reminders, notes, and queued updates in Postgres. The knowledge source stores specs and research notes on the filesystem by default and can use a private Git repository in production.
Security
The toolset is chosen in code from the request identity before the model runs. A private guest can append to the owner’s queue withsubmit_update and read only their own receipts with my_updates. Shared Slack rooms expose only submit_update. Guests cannot access the owner’s CRM, knowledge base, inbox, queue, or action tools. Each caller’s memory is scoped to their verified identity.
Owner actions are narrow. update_slack sends exact text only after explicit approval. update_gmail can create or update a draft and has no send capability. After a provider, workspace, or rundown read, the current run becomes read-only. Make any follow-up mutation as a fresh private request.
@context runs locally or in your own cloud. Its CRM and inbound queue live in Postgres, and its knowledge base lives on the filesystem or in a private Git repository. Prompts and retrieved material are processed by the model and provider services you configure. See docs/SECURITY.md.
Deploy to Railway
@context runs anywhere that runs a Docker container. For a quick deployment,scripts/railway/up.sh runs @context and Postgres on the same private network. It reads credentials from .env.production and creates the public domain you connect to in the AgentOS UI.
Prerequisites: Railway CLI installed and railway login completed.
1
Create a production env
.env.production first and fall back to .env.2
Deploy
3
Mint your JWT key
Token-Based Authorization is on by default. Without a
JWT_VERIFICATION_KEY in .env.production, the AgentOS will not serve traffic. That is the safe default for an agent that holds your work context. You can also issue and verify your own JWT.- Open os.agno.com, click Connect OS → Live, and paste the domain the script printed.
- Turn on Token-Based Authorization and click Connect.
- Copy the public key into
.env.productionasJWT_VERIFICATION_KEY. - Back in the terminal, press Enter. The script reads the key and deploys the service.
4
Verify
https://<your-domain>/docs to confirm the API is serving..env.production, sync them with ./scripts/railway/env-sync.sh. After code changes, redeploy with ./scripts/railway/redeploy.sh, or connect the repo in the Railway dashboard to auto-deploy on push.
Point MCP clients at production
Production connections use MCP OAuth.scripts/railway/up.sh generates MCP_CONNECT_SECRET when it is missing. A client connects by URL, and you approve it once on a consent page by entering that secret.
https://<your-domain>/mcp through the app’s custom connector flow, leave optional OAuth client credentials empty, and approve the consent page with MCP_CONNECT_SECRET. The AgentOS UI uses its separate control-plane JWT. Rotating AGENTOS_MCP_SIGNING_KEY revokes every issued token; rotating MCP_CONNECT_SECRET gates future consents.
See docs/MCP.md for the consent flow, per-client specifics, and ChatGPT and Claude on the web.
Back the knowledge base with Git
Local runs store the knowledge base in a gitignoredknowledge/ folder. In production, back it with a private Git repo: create one, mint a fine-grained token with read and write access to its contents, and add both to .env.production:
./scripts/railway/env-sync.sh. Every update commits and pushes, so the git history is your audit trail. See docs/KNOWLEDGE.md.
Connect to Slack
With Slack configured, teammates can @-mention @context to leave you updates, you can DM it for private conversations, and the scheduled daily rundown and weekly plan land in your DMs.- Create a Slack app from the manifest in docs/SLACK.md.
- Copy the Bot User OAuth Token and Signing Secret.
- Set
SLACK_BOT_TOKENandSLACK_SIGNING_SECRETin.envor.env.production. - Restart the application.
/slack/events and /slack/interactions request URLs at your Railway domain.
Connect Gmail
Connect Gmail to ground rundowns and preparation in your inbox. SetGOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and GOOGLE_PROJECT_ID, then mint the consent token once with python scripts/google_mint_tokens.py. See docs/GOOGLE.md.
Example prompts
Use the AgentOS UI or a private Slack DM for prompts that write context:- Add Dana Reyes, Head of Platform at Acme, dana@acme.com. Remind me to send her the integration spec next Tuesday.
- Write up a decision: we’re standardizing on Agno.
- Who do I know at Acme?
- What’s on today?
- Prep for my 2pm with Kyle.
- What in my knowledge base needs attention?
Run evals
@context comes with model-backed behavioral evals inevals/. They exercise guest boundaries and adversarial attempts to reach owner data. Deterministic policy and authorization checks live in tests/.