Fixies & Agents
How Fixie AI agents work - network agents, personal agents, knowledge architecture, tiers, and tool access.
Surfaces: /fixies (ADE) + Cmd+Shift+F (sidebar) + Telegram Bot + Telegram Mini App | Backend: Letta v0.16.6 | Agent Type: letta_v1_agent
Fixies are persistent AI assistants on the network. They are graph-aware, memory-backed, and operate across app and API layers with tier-gated capabilities.
Agent Types
Network Agents (Shared)
Three network-level agents serve all members. Each member gets an isolated conversation thread via the Letta Conversations API, so messages never mix between members.
| Agent | Domain | Persona Type | Primary Tools |
|---|---|---|---|
| Florin | Market intelligence, portfolio analysis | market_analysis | solana_portfolio, solana_transactions, graphiti_search_facts |
| Cypher | Knowledge graph queries, data exploration | query_builder | neo4j_query, member_status, graphiti_search_nodes |
| Sentinel | Risk assessment, governance, compliance | risk_assessment | governance_status, circle_activity, archival_memory_search |
Network agents:
- Are seeded via
POST /api/fixie/seed(admin, idempotent) - Share a
shared:networkGraphiti group -- facts learned in any conversation are available to all - Use per-user conversation isolation (
isolated_block_labels: ["human", "context"]) - Run at standard tier (Claude Sonnet) with full tool access
Personal Agents (Per-Member)
Every member gets a default personal Fixie on signup via bootstrapUser. Members can create up to 3 agents total through the ADE interface.
Personal agents:
- Are isolated by
fixie:member:{memberId}Graphiti group - Have their
contextblock populated from the knowledge graph at creation - Tier determines model, tools, and memory blocks (see Tiers below)
Creating a Fixie
Members create agents through the ADE interface at /fixies. The creation dialog offers:
- Name -- choose a name for the agent
- Persona type --
personal,market_analysis,query_builder,risk_assessment, orcustom - Custom system prompt -- available when persona type is
custom
Agents are created via POST /api/fixie with membership proof validation.
Tiers
Tier determines the LLM model, memory blocks, and whether sleep-time compute is enabled. All 16 tools are available to all tiers -- differentiation is model quality, not capability gating.
| Capability | Free | Standard | Premium |
|---|---|---|---|
| Model | Claude Haiku | Claude Sonnet | Claude Opus |
| Memory blocks | persona, human | + context | + preferences |
| Sleep-time compute | -- | -- | Yes |
| Tools | All 16 tools | All 16 tools | All 16 tools |
See Tool Access by Tier for the complete list of tools.
Knowledge Architecture
Each agent has access to three layers of knowledge. The depth of access depends on tier.
1. Letta Archives (Static, Shared)
Chunked documents (brand codex, tokenomics, compliance rules, Cypher patterns) stored as searchable passages. Attached to agents at creation time.
fxyz-networkandfxyz-complianceare attached to all agentsfxyz-marketis attached tomarket_analysisagentsfxyz-graphis attached toquery_builderagents- Searched via
archival_memory_search(all tiers)
2. Graphiti (Temporal, Conversational)
Facts learned from conversations are extracted into the Graphiti temporal knowledge graph via the zepai/knowledge-graph-mcp MCP server (using FalkorDB internally, not the fxyz Neo4j instance). Entities get deduplication, temporal validity edges, and group-based isolation.
- All agents can search (
search_facts,search_nodes) and write (add_episode) - Network agents share
shared:networkgroup - Member agents use
fixie:member:{memberId}group
3. Agent Memory (Per-Agent, In-Context)
Memory blocks are always in the LLM context window -- no tool call needed.
persona-- agent identity, domain expertise, tool guidance, behavioral ruleshuman-- member DID, owner ID, memory groupcontext-- member's graph neighborhood (contribution level, circles, roles, wallet)preferences-- learned interaction patterns (premium only)
See Knowledge Architecture for the full technical reference.
System Prompt Structure
Every agent persona follows a five-section template:
- Identity -- who the agent is, its domain, heritage
- Knowledge Sources -- what archives are attached, what tools are available
- Tool Priority -- ordered list of which tool to use first for different questions
- Memory Guidance -- how to use context/preferences blocks, when to persist facts
- Rules -- PII prohibition, MiCA terminology, communication style
Network agents have distinctive personas (Florin references the historic gold coin, Cypher references the query language, Sentinel references the watchful guardian). Member agents use configurable templates scaled by tier.
Conversation Isolation
Network agents are shared resources -- a single Letta agent serves all members. Conversation isolation prevents message mixing:
- Member sends first message to a network agent
getOrCreateConversation()creates a Letta conversation withisolated_block_labels: ["human", "context"]- The conversation is tagged with
[member:{userId}]in its summary for filtering - Subsequent messages use the stored
conversationId - Each member sees only their own conversation history
Personal agents do not need this -- each member has their own agent instance.
Surfaces
All surfaces share the same backend (Letta agents, tools, archives, Graphiti). The model, memory, and knowledge layers are identical regardless of which surface a member uses.
| Surface | Description |
|---|---|
/fixies | ADE page -- 3-panel layout (agent list, chat, agent state/memory) |
Cmd+Shift+F | Sidebar panel -- streams via /api/fixie/{agentId}/stream |
| Telegram Mini App | Mobile-native 3-tab UI inside Telegram at /telegram-app |
| Telegram Bot | Direct chat via bot commands, routes through /api/telegram/webhook |
/api/fixie/* | Backend route family for all agent operations |
/api/fixie/archives | Archive creation (admin) |
/api/fixie/archives/ingest | Document ingestion into archives (admin) |
/api/fixie/mcp | Graphiti MCP server registration (admin) |
/api/fixie/seed | Network agent seeding (admin) |
Telegram Integration
Fixie agents are accessible directly from Telegram through two complementary interfaces: a bot for quick command-line interactions and a mini app for a full mobile chat experience.
Telegram Bot
The bot provides a lightweight command interface. Messages are sent to /api/telegram/webhook, which routes them to Letta agents via the REST API (non-streaming).
Commands:
| Command | Description |
|---|---|
/start | Welcome message with overview of capabilities |
/help | Available features, tips, and link to fxyz.network |
/agents | List available Fixie agents with IDs |
/agent <id> | Select a specific agent for subsequent messages |
After selecting an agent, all text messages are forwarded to that agent via Letta. If no agent is selected, the default network agent (Florin) is used.
Webhook setup: Register the webhook via POST /api/telegram/setup (admin). This calls the Telegram Bot API to point the bot at your deployment's webhook URL. Verification uses X-Telegram-Bot-Api-Secret-Token.
Telegram Mini App
The mini app is a full mobile UI served at /telegram-app inside Telegram's WebView. It uses the same useChat hook and DefaultChatTransport as the sidebar panel, providing streaming responses identical to the in-app experience.
Three-tab layout:
| Tab | Component | Description |
|---|---|---|
| Chat | TelegramChat | Streaming conversation with selected agent, message bubbles, typing indicators |
| My Fixies | FixieList | Browse and select from available agents |
| Create | CreateFixie | Create a new personal Fixie (name, persona type, tier) |
Platform integration:
- Uses Telegram WebApp SDK (
telegram-web-app.js) for native look and feel - Respects Telegram's color scheme (light/dark mode)
- Haptic feedback on interactions (tab switches, agent selection, message send)
- Safe area insets for bottom navigation
noindex, nofollowmeta to prevent search engine indexing
User Mapping
Telegram users are mapped to the network via Neo4j TelegramUser nodes:
POST /api/telegram/user-- create or update a Telegram user, optionally link to a Fixie agentGET /api/telegram/user?telegramId=...-- look up user info and linked agentsDELETE /api/telegram/user?telegramId=...&agentId=...-- unlink an agent
The graph relationship is (TelegramUser)-[:OWNS_FIXIE]->(FixieAgent). The bot uses an in-memory mapping during a session; persistent mapping is stored in Neo4j.
Shared Backend
Both Telegram surfaces connect to the same Letta backend as the sidebar and ADE:
- Bot path: Telegram ->
/api/telegram/webhook-> Letta REST API (POST /v1/agents/{id}/messages) -> response sent back via Telegram Bot API - Mini App path: Telegram WebView ->
/telegram-app->useChat+DefaultChatTransport->/api/fixie/{agentId}/stream(SSE) -> Letta
All 16 custom tools, Letta Archives, Graphiti knowledge, and conversation isolation work identically on all surfaces.
API Reference
Chat (Streaming)
POST /api/fixie/{agentId}/stream
Content-Type: application/json
{ "message": "What is my current Florin balance?" }Returns Server-Sent Events with streaming response.
Chat History
GET /api/fixie/{agentId}/chat?limit=30Loads conversation history from Letta.
Agent Memory
GET /api/fixie/{agentId}/memoryReturns the agent's current memory blocks (persona, human, context, preferences).
Agent Tags
Agents are organized via Letta tags for efficient filtering:
| Tag Pattern | Purpose | Example |
|---|---|---|
fxyz:owner:{type} | Owner type | fxyz:owner:member |
fxyz:tier:{level} | Agent tier | fxyz:tier:premium |
fxyz:member:{id} | Member association | fxyz:member:did:privy:abc123 |
fxyz:network | Network-level agent | fxyz:network |
Related Documentation
- Knowledge Architecture -- Three-layer knowledge system technical reference
- The Fixies -- Architecture overview
- Cypher Query Examples -- What the
neo4j_querytool can do