Skip to main content
The assistant you talk to on the Agents page is not a hard-coded chatbot. Condor is itself an agent, built from the same parts as the agents you create, and every part is a plain file you can open. Its definition ships with Condor under agents/condor/. What your install writes for it, such as its memory of you and any skill it creates, goes under .condor/agents/condor/:
When both places have the same file, the one under .condor/ wins. Agents you build with Agent Builder get the same layout under their own slug. See Agent Architecture for the full folder structure.

AGENT.md: the brain

AGENT.md is the agent’s system prompt with a short frontmatter header:
agent_key sets the model it runs on by default. The body does three jobs:
  1. Names its tools. They come from two MCP servers: mcp-hummingbot (market data, portfolio, executors, bots, DEX tools) and condor (notifications, routines, agents and loops, servers, memory, skills and delegate). For the full list, see MCP Tools. Adding or removing exchange keys is not one of them: you manage keys yourself in Settings → Keys and Wallets.
  2. Sets how it routes work (next section).
  3. States its rules: lead with the answer, ask for confirmation before orders, swaps and LP changes, keep tool chains short, and don’t read source code unless asked.

A coordinator, not a tool-caller

Before any tool call, Condor runs a routing check:
  1. Does a skill match? Its skill index is in context as [SKILLS]. If a playbook covers the request, Condor reads it and follows its steps.
  2. Does a domain agent match? The [AGENTS] index lists your agents. Domain work goes to the specialist, which has the domain’s tools and memory.
  3. Only then does it use raw tools.
It hands work to another agent with delegate, which has two shapes: delegate also has list, get and stop to check on or cancel a delegation. In Telegram, /delegations lists them; on the Workspace they appear in the chat’s Tasks list. One rule is absolute: Condor never writes routine code in the chat. Creating, editing or fixing a routine is always delegated to a background copy of Condor itself (delegate(action="start", agent="condor", ...)), which follows the routine_cookbook playbook, writes the routine and tests it before reporting.

Skills: how it operates

A skill is a playbook: when to use it, and the steps. Each one is a folder with a SKILL.md:
The source field says where a skill came from:

Condor’s own skills

references_routine means the skill’s executable part is a routine: the skill says when, the routine does what. If the routine no longer exists, reading the skill reports routine_ok: false instead of running nothing.

The shared library

agents/_shared/skills/ holds playbooks that every agent reads, Condor included. An agent’s own skill with the same name takes precedence. The shipped shared skills are: Only Condor can publish to the shared library, with manage_skill(..., shared=True). A shared playbook lands in every agent’s context, so it has to read correctly from every seat. A skill that belongs to one agent is written to that agent instead, with manage_skill(..., agent="<slug>"). Skills are advice, not permission: an action a playbook describes still goes through the normal confirmation for orders, swaps and LP changes.

Memory: what it knows about you

Skills are how the agent works, the same for every user. Memory is what it knows about you. It is kept per agent and per user: Condor’s memory of you lives in .condor/agents/condor/store/user_<id>/. Memory is not shared between agents. Each trading agent keeps its own memory of you in its own store, .condor/agents/<slug>/store/user_<id>/. What you tell the Condor chat isn’t visible to your trading agents, and the other way round. MEMORY.md is the index, one line per memory. It is injected into every chat session as [USER MEMORY], so Condor starts each conversation knowing the headline of everything it has saved. The detail is in memories/<name>.md, read when needed. For example, a preference saved with manage_memory(action="write", ...) is stored like this:
Each memory is one fact, with a type of preference, fact, feedback or reference. Condor saves only what is new and stable about you, not details of the current conversation. After a conversation has been idle for 30 minutes, a background pass can also read it back and save memories from it; set CONDOR_REFLECTION=off to turn that off. Every write and delete is appended to audit.log. You can review and delete memories with /memory in Telegram, which shows a section per agent, or ask Condor to run manage_memory(action="audit").

Memory vs. skills

Learn more