cloveric/tarocub

tarocub

Feishu/Lark-first local AI agent gateway and native DeepSeek Harness plugin for Codex, Claude Code, Kimi Code, DeepSeek Harness, and Antigravity; Telegram optional.

Uncategorizedagent-busagentic-aiai-agents

English  |  中文文档  |  📖 飞书图文版 (Feishu Doc)  |  Full Reference

TaroCub: your own AI bot, living in Feishu/Lark, running on your own machine

TaroCub

Always-on personal AI bots like Grok Bot, OpenAI dots, and Meta Muse, but running on your own machine and living in Feishu/Lark.
They give every agent its own cloud computer. TaroCub gives it yours.
Each TaroCub bot is a real Codex, Claude Code, Kimi Code, DeepSeek Harness, or Antigravity agent running locally, with a Feishu identity of its own.
Message it like a teammate: send voice notes, files, and screenshots; get back documents, images, and finished work.
Feishu is the face. Mix engines freely and run as many bots as you want, with no per-bot fee.

📖 Feishu Doc (飞书图文)  |   Quick Start  |   Surfaces  |   File Center  |   Core Highlights  |   Lark Setup  |   Commands  |   Docs

What This Is

TaroCub turns the coding agents already on your computer into personal bots you talk to in Feishu/Lark. It is not a hosted agent product: every bot runs the real Codex, Claude Code, Kimi Code, DeepSeek Harness, or Antigravity CLI on your own machine, with your files, tools, and logins. TaroCub gives each one a durable chat identity: sessions you can resume from your phone, two-way file delivery, voice transcription, scheduled tasks, multi-bot routing, and audit logs. Telegram is retained as an optional compatibility channel.

Feishu/Lark is the primary platform. The maintainer has not used Telegram as a day-to-day control surface for a long time. Telegram remains available for existing deployments, but new installations should start with Feishu/Lark.

This project was formerly named cc-telegram-bridge. The canonical repository is now cloveric/tarocub; GitHub redirects the old URL, and existing state directories plus the cctb shorthand remain supported for compatibility.

Grok Bot, OpenAI dots, Meta Muse vs. TaroCub

Cloud agents: Grok Bot, OpenAI dots, Meta MuseTaroCub
Where it runsThe vendor's cloud computerYour own computer
Your files and dataUploaded to the vendorStay on your machine
ModelsThe vendor's own modelsCodex, Claude Code, Kimi Code, DeepSeek Harness, and Antigravity side by side; pick one engine per bot
How many botsTied to the vendor's subscription plansAs many as you like, one Feishu app per bot. TaroCub is MIT-licensed and charges nothing per bot; you only use the model plans you already have
What it can doWhatever the vendor exposesAnything your machine can do: local tools, scripts, and logged-in accounts
Where you chatThe vendor's own appFeishu/Lark, with Telegram optional

Grok Bot, dots, and Muse are products of SpaceXAI (xAI), OpenAI, and Meta. TaroCub is an independent open-source project and is not affiliated with or endorsed by them.

Meet the crew

The lion cub is TaroCub's mascot. Give every bot its own face: these hand-drawn avatars are transparent 512×512 PNGs in assets/avatars/ and work well as Feishu app icons.

Lion
Lion
Fox
Fox
Raccoon
Raccoon
Panda
Panda
Rabbit
Rabbit
Cat
Cat
Tiger
Tiger
Taro Bear
Taro Bear
Penguin
Penguin

It is built for people who already use CLI agents heavily and want:

  • Feishu/Lark-native operation with cards, Docs comments, Sheets, Drive, and group/thread workflows;
  • optional phone-first Telegram operation for existing personal-bot deployments;
  • durable state for sessions, cron jobs, file delivery, usage, timelines, audit logs, and multi-agent routing.

The intended setup flow is agent-assisted: clone the repo, open it in Codex, Claude Code, Kimi Code, DeepSeek Harness, or Antigravity, and ask the agent to configure the bridge for you. The CLI exists so your local agent can do the boring setup work instead of making you hand-edit every file.

The old long README is preserved as Full Reference. This landing page is intentionally short.

Quick Start

Open this repository in Codex, Claude Code, Kimi Code, DeepSeek Harness, or Antigravity and say:

Read the README and configure TaroCub for me.
Run the Lark wizard, check permissions, install/bind lark-cli, and tell me what I need to scan or approve.

That is the preferred path. Manual commands are still below for operators who want to see each step. If you explicitly need the legacy-compatible Telegram channel, ask the agent to configure it with a BotFather token instead.

git clone https://github.com/cloveric/tarocub.git
cd tarocub
npm install
npm run build

node dist/src/index.js lark setup --detached --install-cli --identity bot-only
node dist/src/index.js lark yolo unsafe

--detached keeps QR registration alive in tmux, prints one durable registration link, writes progress to ~/.cctb/<lark-instance>/lark-setup.log, and starts the Lark service when setup completes. Use --no-start-service only when you explicitly want to prepare the app without listening yet.

If lark doctor reports missing app scopes, open the permission page URL it prints and grant the JSON it prints. PersonalAgent apps activate the grant immediately after confirmation; enterprise custom apps may still require a version publish. Then run:

node dist/src/index.js lark provision
node dist/src/index.js lark doctor
node dist/src/index.js lark slash sync

DeepSeek Harness web search plugin (native bundle)

Install the standalone native plugin into the web profile used by ordinary Harness and by TaroCub's private Harness hosts:

dsh plugin --profile web add github:cloveric/deepseek-harness-web-search-plugin

The plugin adds source-traceable Brave/Tavily live search and URL extraction. TaroCub integration and /tarocub guidance are optional. Installing it does not create a Feishu/Lark app or start the bridge. The canonical TaroCub subdirectory source remains compatible. Check, update, or remove it with:

dsh --profile web --dump-config | grep -A18 -B2 mcp-cctb-search
dsh plugin --profile web update deepseek-harness-web-search-plugin
dsh plugin --profile web remove deepseek-harness-web-search-plugin

TaroCub still recognizes installations made under the former tarocub-deepseek-harness-plugin package name so they can be migrated without breaking managed bots.

Telegram (optional compatibility channel)

Create a Telegram bot with @BotFather, then run:

npm run dev -- telegram configure <telegram-bot-token>
npm run dev -- telegram yolo unsafe
npm run dev -- telegram service start

telegram yolo unsafe maps to approvalMode: "bypass": Codex uses its bypass sandbox mode, Claude Code/Antigravity use their unsafe skip-permissions modes, Kimi selects ACP auto, and DeepSeek selects Harness danger-full-access. Treat it as equivalent to bypassing normal approval prompts and local sandbox controls.

Send any message to the bot. It will reply with a pairing code:

npm run dev -- telegram access pair <pairing-code>

Surfaces

SurfaceBest forStatus
Feishu/LarkTeam chat, interactive cards, Docs comments, Sheets/Docs/Drive workflows, group/thread workflowsRecommended — the primary, actively-developed channel
TelegramMobile control, voice input, file delivery, multi-bot operations, cron, Agent BusFully supported; longest-tested, but no longer the day-to-day focus
Local CLIOperations, setup, debugging, status, backups, direct sendsFirst-class operator interface
Local web consoleInstance settings and a read-only inventory of bot-created, downloaded, and workspace filesLoopback-only and token-gated

Web Console and File Center

Start the local console from the repository checkout:

npm run dev -- ui

The command prints a one-time, token-bearing loopback URL such as http://127.0.0.1:<port>/?token=.... Open the complete URL in a browser, then select File Center. Keep the terminal process running while the page is in use; press Ctrl-C to stop it. The private package does not install a global cctb executable, so cctb ui is not a supported launch command.

The console has two views:

  • Bot Config lists every local instance and edits the safe configuration subset with next-restart semantics.
  • File Center scans configured bot state and workspaces, groups storage units by bot, type, status, size, and age, and supports search, filters, labels, notes, importance marking, and Finder reveal on macOS.

File Center is deliberately non-destructive. It highlights protected browser profiles, recently active paths, rebuildable environments, temporary content, and items that still need human judgment, but it never deletes, moves, archives, deduplicates, or automatically cleans files.

Core Highlights

HighlightWhy it matters
Real CLI engines, not a fake chat backendCodex, Claude Code, Kimi Code, DeepSeek Harness, and Antigravity run as their native local CLIs, so your real auth, local files, project instructions, MCP/plugins, and engine behavior stay intact.
DeepSeek Harness web search pluginInstall github:cloveric/deepseek-harness-web-search-plugin; its self-contained runtime adds Brave/Tavily live search and URL extraction, while TaroCub integration remains optional.
DeepSeek Search MCPPlain Harness gets Search MCP from the plugin. Managed DeepSeek bots use that registration when valid and otherwise retain TaroCub's private fallback, so exactly one mcp-cctb-search client is active while native Harness search remains available.
Engine-neutral Lark intakeAudio routing, video preparation, and group/topic session boundaries are resolved before dispatch, so Claude, Codex, Kimi, DeepSeek, and Antigravity receive the same media behavior and chat/thread isolation rules.
Session ResumeContinue existing work instead of starting over: Claude local sessions, Codex threads, Kimi ACP sessions, DeepSeek Harness sessions, and Antigravity conversations can be attached from chat and detached later. Bindings and resumed workspace roots are scoped to the private chat, group, or topic that created them, so another conversation cannot silently switch projects.
Mid-turn steeringWhile a Codex or DeepSeek turn is running on Lark, a plain-text follow-up sent within the steer eligibility window (default 30s, /steer to tune/disable/unlimit) is injected straight into it so the engine course-corrects without a second turn — acked with an OK reaction. Past the window (or with /q <message>) it queues as its own turn. Files, quoted replies, and queued backlogs keep normal FIFO order automatically.
Feishu/Lark as a native work surfaceLark adds what Telegram cannot: Card 2.0 choices, approval cards, Docs comment @mentions, Sheets/Docs/Drive workflows through lark-cli, /newgroup, and thread-aware group work.
Optional Telegram control planeExisting deployments can still send files and screenshots, record voice messages, approve work, stop turns, inspect status, and operate multiple personal bots.
Engine-native progress and diagnosticsCodex consumes authoritative turn/completed summaries before any read fallback. Claude forwards child-agent text into the matching live tool panel without contaminating the parent answer. Kimi preserves ACP task/review lifecycles, DeepSeek replays ordered Harness history/projections, and Antigravity maps native structured session/text/tool/result events without posting protocol or thinking output as an answer.
Voice/audio ASR and video intakeTelegram voice/audio/video and Lark voice/audio resources are downloaded and transcribed before engine dispatch. Short audio uses local Qwen ASR; media entering automatic ASR at ≥ 15 minutes uses Aliyun Tingwu when configured, with chunked local fallback. Lark video is visual-first: clips ≤ 10 seconds include one chronological frame per second (up to 10), the original video path, and a best-effort audio transcript; longer or unprobeable clips skip automatic framing/ASR and pass the original path directly to the selected engine. Silent video or ASR failure never blocks visual delivery. This shared Lark preprocessing applies to Claude, Codex, Kimi, DeepSeek, and Antigravity. /stop cancels active probing, extraction, and transcription. See Long-audio cloud ASR for configuration.
File and artifact deliveryAgents can return generated images, PDFs, reports, decks, source bundles, and other files through structured send.file, send.image, send.batch, audio, and video tags. Structured/legacy aliases are deduplicated by real file identity; image batches split only on an explicit size rejection, while ambiguous acknowledgements stop without an immediate duplicate retry.
Scheduled work and reminders/cron and cron.add persist one-shot reminders, recurring jobs, and agent-run scheduled tasks outside model memory, with chat/thread routing preserved.
Agent BusMultiple bot instances can call each other as local workers for delegation, fan-out, chain, verifier, and coordinator-led crew workflows.
Mini BusTelegram topics or Lark threads can become lightweight named peers, so one group can run planner/writer/reviewer-style workflows without separate bots.
BoardDurable Kanban state for tasks, model-assisted planning, dependencies, WIP, review gates, workspaces, heartbeats, stale-run recovery, Lark task cards, and execution history.
Search MCPOptional Brave/Tavily MCP gives source-traceable web_search, web_extract, provider status, fallback notices, and source logs.
Operational visibilitystatus, doctor, timeline, audit, dashboard, usage tracking, service locks, and backups make failures inspectable instead of mysterious.
Web console and File Centernpm run dev -- ui starts a loopback-only, token-gated console for safe instance configuration and a read-only, filterable inventory of bot files and storage usage.
VC meeting attendance (experimental)On Feishu/Lark, the bot can join a video meeting, follow the live transcript, answer when addressed, invite participants, and explicitly end a hosted meeting (/meeting join/status/ask/leave/invite/end). Off by default; requires Feishu's bot-join beta allowlist.

Feature Map

FeatureFeishu/LarkTelegramLocal CLI
Codex / Claude Code / Kimi Code / DeepSeek Harness / Antigravity enginesYesYesYes
Session resume / detachYesYesYes
Voice/audio ASR and video intakeFrames/direct path by durationASRInspect/debug
File and image deliveryYesYeslark send / telegram send
Stop and approvalsInteractive cardsInline buttonsService controls
Mid-turn steering + /q queue escapeYes (Codex and DeepSeek)PlannedNative in the corresponding CLI
Plan Mode-style choicesRich choice cardsSequential buttons, including multi-selectTool/debug path
Cron reminders and agent jobsYesYesManage/list/run
Board durable tasksYesYesInspect/export
Agent Bus fan/chain/verifyYesYesConfigure peers
Mini Bus topic/thread workflowsLark threadsTelegram topicsInspect state
Docs comments and Sheets workflowsYes, with lark-cliNot applicableProvision/auth/doctor
VC meeting attendance (gated beta)/meeting commandsNot applicableConfig + preflight
Web console and File Center——npm run dev -- ui (loopback + token)
Timeline, audit, dashboard, usageYesYesPrimary ops surface

Kimi Code engine

Select Kimi in either chat channel with /engine kimi (or use telegram engine kimi --instance <name> for a Telegram instance). The service resolves KIMI_EXECUTABLE first and otherwise falls back to ~/.kimi-code/bin/kimi; Kimi Code must already be authenticated locally. TaroCub uses the persistent kimi acp protocol, not prompt-mode text scraping.

Kimi supports streamed text/thought/tool events, /stop, tool approvals, multi-question and multi-select Lark/Telegram forms, /compact, model/effort/mode options, and /resume session scanning/selection. TaroCub loads instance and channel guidance through a workspace .kimi-code/agents/agent.md main-agent override that retains Kimi's ${base_prompt} and ${plugin_sections}. It also exposes local Codex skills to bridge-owned Kimi workspaces and injects the built-in Search MCP alongside Kimi's native MCP/plugins.

The current compatibility baseline is Kimi Code 2.1.1 with @agentclientprotocol/sdk 1.4.0. The public packages/acp-server tree and Hook event surface consumed by TaroCub remain unchanged. TaroCub's real adapter re-verified new/list/load plus a resumed turn, cancellation followed by worker reuse, exactly one Hook start and terminal event for a background Bash task, Search MCP discovery, a two-field multi-select form, and external symlinked Skills. Kimi 2.1.1 rolls back 2.1.0's post-trust realpath restrictions, so the bridge-owned .kimi-code/skills link remains supported. Its restored default filesystem watchers are left enabled so native config, Skill, MCP, and instruction changes can reload while a persistent worker is alive. No compatibility shim is required. Kimi 0.43's standard ACP form elicitation was verified end to end with two questions, including multi-select and distinct display labels/wire values. Older permission-style single-choice requests remain supported as a compatibility fallback. TaroCub always supplies the complete configured MCP list and fails closed if Kimi rejects session initialization; it does not retry by silently removing stdio search. Native Kimi user/project MCP files and plugins remain independent. Kimi 0.43 can defer MCP tool definitions, but the built-in Search MCP deliberately remains immediately discoverable rather than being deferred. Kimi 0.42 always enables its secondary-model pool, but without a [secondary_model] section subagents inherit the caller's model, so existing TaroCub instances do not need a new model setting. Kimi full-auto maps to ACP yolo; delegated terminal working directories are kept inside the real workspace, but this is not an OS sandbox. Explicit bypass maps to ACP auto. Starting with Kimi 0.41.0, auto is true Never Ask mode: dangerous and unanalyzable commands execute without interruption. New Kimi configurations therefore default to bridge full-auto / ACP yolo; use telegram yolo unsafe or /yolo unsafe only when fully unattended execution is intentional. Pre-0.41 Kimi bypass values without the new explicit Never Ask acknowledgement are also resolved as yolo; re-run the unsafe command to opt in under the new semantics.

Kimi 0.41.0 also allows AskUserQuestion(background=true) to outlive the foreground turn. TaroCub keeps those approval cards attached to the retained background task instead of aborting them with the completed turn, routes a late request through the hook-recorded question task even across a newer foreground turn, and aborts it on TaskStop, terminal WaitFor, worker teardown, or bounded expiry.

TaroCub implements the ACP terminal lifecycle used by Kimi for delegated Bash/process work (create, bounded UTF-8 output, wait, kill, and release), and cleans up unreleased terminals when a worker exits. KIMI_CODE_LEGACY_FLAG=1 remains a rollback escape hatch, not the recommended Bot configuration.

Kimi's plugin manager is not part of the ACP surface used by TaroCub. Optional official capabilities such as Kimi Computer Use and Kimi WebBridge must be installed or updated once in the local interactive Kimi TUI, then activated for the Bot with a fresh TaroCub session (/reset). Plugins are user-wide and may add browser/computer-control MCP servers, so TaroCub deliberately does not auto-install them.

With Kimi Code 0.32 or newer, TaroCub also installs an inert local hook plugin under KIMI_CODE_HOME and activates it only for bridge-owned ACP subprocesses. TaskStarted, background-task Notification, SubagentStop, TurnStarted, Stop, StopFailure, and Interrupt feed the existing run cards, worker retention, and restart guard. Kimi 0.33 introduced a completed-process review flow in a synthetic task-origin turn where it may inspect bad output and retry. TaroCub retains that autonomous ACP stream after the original user turn has ended, keeps intermediate process failures in the audit timeline without sending misleading failure cards, and delivers only Kimi's final reviewed conclusion. If no review turn arrives, a bounded fallback delivers the real task output; accepted relay events are drained before that fallback decides no review exists, and lost reviews