{"slug": "talon-open-source-agentic-ai-harness-for-telegram-discord-teams-and-terminal", "title": "Talon – open-source agentic AI harness for Telegram, Discord, Teams and terminal", "summary": "Talon, an open-source agentic AI harness, launched with support for Telegram, Discord, Microsoft Teams, and terminal, offering pluggable backends including Claude Agent SDK, Kilo, OpenCode, Codex, and OpenAI Agents. The tool provides MCP tool access, background agents, goals, skills, triggers, and per-chat settings, enabling multi-platform autonomous AI operations.", "body_md": "Multi-platform agentic AI harness. Runs on **Telegram**, **Discord**, **Microsoft Teams**, and the **Terminal**, with a pluggable backend (** Claude Agent SDK**, **Kilo**, **OpenCode**, **Codex**, or **OpenAI Agents**) and full tool access through MCP.\n\nMulti-frontend |\nTelegram (Grammy + GramJS userbot), Discord (discord.js), Microsoft Teams (Bot Framework), Terminal with live tool visibility |\nPluggable backend |\nClaude Agent SDK, Kilo, OpenCode, Codex, OpenAI Agents — selectable per-process via `backend` config. Streaming, model fallback, context-overflow recovery. |\nMCP tools |\nMessaging, media, history, search, web fetch, cron jobs, triggers, goals, stickers, file system, admin controls |\nPlugins |\nHot-reloadable plugin system. Built-in: GitHub, MemPalace, Playwright, Brave Search |\nBackground agents |\nHeartbeat (hourly by default — advances goals, proactively messages when something matters) and Dream (memory consolidation + diary) |\nGoals |\nPersistent multi-day objectives the agent commits to in chat; every heartbeat run re-reads them, makes progress, and records what it did |\nSkills |\nAgent-authored reusable scripts (bash/python/node) — procedures worked out once get saved and replayed locally at zero token cost |\nTriggers |\nSelf-authored watcher scripts (bash/python/node) that wake the bot when conditions are met |\nPer-chat settings |\nModel, effort level, and pulse toggle per conversation via inline keyboard |\nModel registry |\nModels discovered from the active backend at startup — new models appear in all pickers automatically |\n\n```\ngit clone https://github.com/dylanneve1/talon.git && cd talon\nnpm install\n\n# Interactive setup (select frontend, configure tokens, pick model)\nnpx talon setup\n\n# Start\nnpx talon start       # configured frontend (daemon mode)\nnpx talon chat        # terminal chat mode\n```\n\n**Prerequisites:**\n\n[Node.js 24+](https://nodejs.org/)- Backend-specific:\n`claude`\n\nbackend:[Claude Code](https://docs.anthropic.com/en/docs/claude-code)installed and authenticated (`claude`\n\nCLI on PATH).`kilo`\n\nbackend: nothing extra —`@kilocode/sdk`\n\nspawns a local server. Free models are accessible without auth; routed models use Kilo's own credentials.`opencode`\n\nbackend: nothing extra —`@opencode-ai/sdk`\n\nspawns a local server.`codex`\n\nbackend: install the`codex`\n\nCLI (`npm i -g @openai/codex`\n\n) and authenticate with`codex login`\n\n,`CODEX_API_KEY`\n\n,`TALON_CODEX_KEY`\n\n, or`codexApiKey`\n\n.`OPENAI_API_KEY`\n\nis used only as a fallback when no Codex login exists.\n\n- Talon runs from a normal source or package install; standalone compiled binaries are not supported.\n\n```\nindex.ts                    Composition root\n  |\n  +-- core/                 Platform-agnostic engine\n  |   +-- agent-runtime/    Backend capability interfaces, events, stores\n  |   +-- models/           Model layer: catalog, per-chat active model,\n  |   |                     reasoning-effort vocabulary\n  |   +-- prompt/           System-prompt assembly + prompts/system templates\n  |   +-- background/       Agents that run without a user message:\n  |   |                     heartbeat, dream, pulse, cron, triggers\n  |   +-- tools/            MCP tool definitions + spawn/env contract\n  |   +-- engine/           Message flow: dispatcher (per-chat serial,\n  |   |                     cross-chat parallel), HTTP gateway for MCP\n  |   |                     tool calls, backend lifecycle controller\n  |   +-- plugin.ts         Plugin loader, registry, hot-reload\n  |\n  +-- backend/\n  |   +-- registry.ts       Bootstrap-decoupled backend lookup\n  |   +-- shared/           Cross-backend helpers (stream state, flow violation,\n  |   |                     delivery contract, metrics, prompt format,\n  |   |                     model retry, system prompt, usage)\n  |   +-- remote-server/    Shared infrastructure for agent-server backends\n  |   |                     (MCP registration, sessions, providers, lifecycle)\n  |   +-- claude-sdk/       Claude Agent SDK (in-process MCP, hooks)\n  |   +-- kilo/             Kilo HTTP server backend (streaming via SSE)\n  |   +-- opencode/         OpenCode HTTP server backend\n  |   +-- codex/            Codex CLI backend (`@openai/codex-sdk`)\n  |   +-- openai-agents/    OpenAI Agents SDK backend (Responses API)\n  |\n  +-- frontend/\n  |   +-- shared/           Cross-frontend presentation helpers\n  |   +-- telegram/         Grammy bot + GramJS userbot\n  |   +-- discord/          discord.js v14\n  |   +-- teams/            Bot Framework + Graph API\n  |   +-- terminal/         Readline CLI with tool call visibility\n  |\n  +-- storage/              Sessions, history, chat settings,\n  |                         cron jobs, media index, daily logs\n  +-- util/                 Config, logging, workspace, paths, time\n```\n\n**Dependency rule:** `core/`\n\nimports nothing from `frontend/`\n\nor `backend/`\n\n. Frontends and backends depend on core types, never on each other. All five backends (Claude SDK, Kilo, OpenCode, Codex, OpenAI Agents) implement the same `Backend`\n\ncapability interface from `core/agent-runtime/capabilities.ts`\n\n. Kilo and OpenCode additionally share the `remote-server/`\n\ninfrastructure because they wrap forks of the same upstream HTTP agent server.\n\n**Prompts:** everything the model reads at session start is assembled by `core/prompt/`\n\nfrom the files in `prompts/`\n\n— see [prompts/README.md](/dylanneve1/talon/blob/main/prompts/README.md) for the assembly order, file ownership (user-editable vs package-owned templates), and the per-backend delivery contracts.\n\nSelect via the `backend`\n\nfield in `~/.talon/config.json`\n\n. All backends implement the same `Backend`\n\ncapability interface — heartbeat, dream, and chat handlers are backend-agnostic.\n\n| Backend | `backend` value |\nTransport | Notes |\n|---|---|---|---|\n| Claude SDK | `\"claude\"` |\nIn-process via `@anthropic-ai/claude-agent-sdk` |\nRequires the `claude` CLI on `PATH` . Hook-based turn termination. |\n| Kilo | `\"kilo\"` |\nLocal HTTP server via `@kilocode/sdk` |\nSSE-streamed turns. Routes to many model providers via Kilo's auth. |\n| OpenCode | `\"opencode\"` |\nLocal HTTP server via `@opencode-ai/sdk` |\nSSE-streamed turns; same MCP and session shape as Kilo (upstream fork). |\n| Codex | `\"codex\"` |\nPer-turn subprocess via `@openai/codex-sdk` |\nRequires the `codex` CLI from `@openai/codex` and Codex auth (`codex login` , `CODEX_API_KEY` , `TALON_CODEX_KEY` , or `codexApiKey` ). MCP servers configured via TOML overrides at thread start. |\n| OpenAI Agents | `\"openai-agents\"` |\nIn-process via `@openai/agents` |\nResponses API (or any OpenAI-compatible endpoint via `TALON_AGENTS_URL` / `openaiBaseUrl` ). Persistent per-chat MCP bundles. |\n\nThe Kilo and OpenCode backends share infrastructure (`backend/remote-server/`\n\n) since the upstream HTTP API is the same; each backend supplies its own SDK client, port, and delivery suffix. Codex is its own integration on top of the Codex CLI's JSONL event stream.\n\nGitHub API access via the official GitHub MCP server. Gives the agent access to repositories, issues, PRs, code search, and more.\n\n**Requirements:** Docker installed and running.\n\n```\n{\n  \"github\": {\n    \"enabled\": true,\n    \"token\": \"ghp_...\"\n  }\n}\n```\n\nThe token is optional --- defaults to the output of `gh auth token`\n\nif the GitHub CLI is authenticated.\n\nStructured long-term memory with vector search. The agent can store, search, and retrieve memories semantically. Integrates with Dream mode for automatic memory consolidation and personal diary entries.\n\n**Requirements:** Python 3.10+ with the `mempalace`\n\npackage.\n\n```\n# Set up a Python environment\npython -m venv ~/.talon/mempalace-venv\n~/.talon/mempalace-venv/bin/pip install mempalace    # Unix\n# or: ~/.talon/mempalace-venv/Scripts/pip install mempalace   # Windows\n{\n  \"mempalace\": {\n    \"enabled\": true,\n    \"palacePath\": \"~/.talon/workspace/palace\",\n    \"pythonPath\": \"~/.talon/mempalace-venv/bin/python\"\n  }\n}\n```\n\nBoth paths are optional --- defaults to `~/.talon/workspace/palace/`\n\nand the venv Python respectively.\n\nHeadless browser automation via the Playwright MCP server. The agent can browse websites, take screenshots, generate PDFs, fill forms, and scrape content.\n\n**Requirements:** None --- `@playwright/mcp`\n\nis bundled with Talon.\n\n```\n{\n  \"playwright\": {\n    \"enabled\": true,\n    \"browser\": \"chromium\",\n    \"headless\": true\n  }\n}\n```\n\nSupported browsers: `chromium`\n\n(default), `chrome`\n\n, `firefox`\n\n, `webkit`\n\n, `msedge`\n\n.\n\nWeb search via the Brave Search MCP server. Replaces the built-in WebSearch/WebFetch tools with higher-quality search results.\n\n```\n{\n  \"braveApiKey\": \"BSA...\"\n}\n```\n\nGet an API key at [brave.com/search/api](https://brave.com/search/api/).\n\nPlugins add MCP tools and gateway actions without modifying core code. SOLID interface --- only `name`\n\nis required.\n\n```\n{\n  \"plugins\": [{ \"path\": \"/path/to/my-plugin\", \"config\": { \"apiKey\": \"...\" } }]\n}\nexport default {\n  name: \"my-plugin\",\n  version: \"1.0.0\",\n  mcpServerPath: resolve(import.meta.dirname, \"tools.ts\"),\n  validateConfig(config) {\n    /* return errors or undefined */\n  },\n  getEnvVars(config) {\n    return { MY_KEY: config.apiKey };\n  },\n  handleAction(body, chatId) {\n    /* gateway action handler */\n  },\n  getSystemPromptAddition(config) {\n    return \"## My Plugin\\n...\";\n  },\n  init(config) {\n    /* one-time setup */\n  },\n  destroy() {\n    /* cleanup */\n  },\n};\n```\n\nPlugins support hot-reload via the `reload_plugins`\n\nMCP tool --- no restart required.\n\n```\ntalon setup     Interactive setup wizard\ntalon start     Start as a background daemon\ntalon stop      Stop the daemon\ntalon chat      Terminal chat mode (always available)\ntalon status    Health, sessions, plugins, disk usage\ntalon config    View or edit configuration\ntalon logs      Tail structured log file\ntalon doctor    Validate environment and dependencies\n```\n\nConfig file: `~/.talon/config.json`\n\n| Field | Default | Description |\n|---|---|---|\n`frontend` |\n`\"telegram\"` |\n`\"telegram\"` , `\"discord\"` , `\"teams\"` , `\"terminal\"` , or an array |\n`backend` |\n`\"claude\"` |\n`\"claude\"` , `\"kilo\"` , `\"opencode\"` , `\"codex\"` , or `\"openai-agents\"` |\n`botToken` |\n--- | Telegram bot token |\n`model` |\n`\"default\"` |\nDefault model. Interpretation depends on the active backend. |\n`codexApiKey` |\n--- | Codex-only OpenAI API key. Prefer this over `openaiApiKey` for Codex API-key auth. `codex login` takes precedence over shared `openaiApiKey` . |\n`concurrency` |\n`1` |\nMax concurrent AI queries (1--20) |\n`pulse` |\n`true` |\nPeriodic group engagement |\n`heartbeat` |\n`false` |\nBackground maintenance agent |\n`heartbeatIntervalMinutes` |\n`60` |\nHeartbeat interval |\n`braveApiKey` |\n--- | Brave Search API key |\n`timezone` |\n--- | IANA timezone (e.g. `\"Europe/London\"` ) |\n`plugins` |\n`[]` |\nExternal plugin packages |\n`disabledToolTags` |\n--- | Hide whole tool groups from the model (e.g. `[\"stickers\", \"web\"]` ) — each registered tool costs context tokens per session |\n`disabledTools` |\n--- | Hide individual tools by name (`end_turn` cannot be disabled) |\n`adminUserId` |\n--- | Telegram user ID for `/admin` commands |\n`allowedUsers` |\n--- | Whitelist of Telegram user IDs |\n`apiId` / `apiHash` |\n--- | Telegram API credentials for full message history |\n`github` |\n--- | GitHub plugin config (see above) |\n`mempalace` |\n--- | MemPalace plugin config (see above) |\n`playwright` |\n--- | Playwright plugin config (see above) |\n\n```\nnpx talon chat\n```\n\nTool calls shown in real-time with parameters. Streaming phase indicators (thinking / responding / using tools). Per-turn stats: duration, tokens, cache hit rate, tool count.\n\nCommands: `/model`\n\n, `/effort`\n\n, `/reset`\n\n, `/status`\n\n, `/help`\n\n**Docker:**\n\n```\ndocker compose up -d\n```\n\n**Systemd:** unit file at `packaging/systemd/talon.service`\n\n— copy to `/etc/systemd/system/`\n\n, set `User=`\n\nand `WorkingDirectory=`\n\n, then `systemctl enable --now talon`\n\n.\n\n**Health endpoint:** `GET http://localhost:19876/health`\n\nreturns JSON with uptime, memory, queue depth, active sessions, and last activity timestamp.\n\n**Logging:** Structured JSON via pino to `~/.talon/talon.log`\n\n. Rotated on startup when the file exceeds 10MB.\n\n**Resilience:** Dynamic model fallback on overload, session auto-retry on expiry, rate limit handling with backoff, atomic file writes, graceful shutdown with 15-second drain timeout.\n\n```\nnpm run dev              # watch mode\nnpm test                 # 2300+ tests across unit / SDK-stub / MCP-functional / integration tiers\nnpm run test:coverage    # with coverage report\nnpm run typecheck        # tsc --noEmit\nnpm run lint             # oxlint\nnpm run format           # prettier --write\n```\n\nMIT", "url": "https://wpnews.pro/news/talon-open-source-agentic-ai-harness-for-telegram-discord-teams-and-terminal", "canonical_source": "https://github.com/dylanneve1/talon", "published_at": "2026-06-29 13:12:44+00:00", "updated_at": "2026-06-29 13:20:19.779214+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools"], "entities": ["Talon", "Telegram", "Discord", "Microsoft Teams", "Claude Agent SDK", "Kilo", "OpenCode", "Codex"], "alternates": {"html": "https://wpnews.pro/news/talon-open-source-agentic-ai-harness-for-telegram-discord-teams-and-terminal", "markdown": "https://wpnews.pro/news/talon-open-source-agentic-ai-harness-for-telegram-discord-teams-and-terminal.md", "text": "https://wpnews.pro/news/talon-open-source-agentic-ai-harness-for-telegram-discord-teams-and-terminal.txt", "jsonld": "https://wpnews.pro/news/talon-open-source-agentic-ai-harness-for-telegram-discord-teams-and-terminal.jsonld"}}