by BalianWang
Task-level model routing through persistent subagents, with local-first GUI and CLI orchestration
# Add to your Claude Code skills
git clone https://github.com/BalianWang/busytokLast scanned: 6/29/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-06-29T08:59:16.357Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}busytok is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by BalianWang. Task-level model routing through persistent subagents, with local-first GUI and CLI orchestration. It has 108 GitHub stars.
Yes. busytok passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/BalianWang/busytok" and add it to your Claude Code skills directory (see the Installation section above).
busytok is primarily written in Rust. It is open-source under BalianWang on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh busytok against similar tools.
No comments yet. Be the first to share your thoughts!
简体中文 | English
Busytok routes delegated tasks to an explicit provider/model binding through a persistent logical subagent identity. It is local-first: the desktop app and busytok CLI coordinate task execution, queueing, and diagnostics on your machine while the existing audit dashboard remains available for local agent usage metadata.

Different tasks need different models, and a stable role should keep using the same routing decision until you intentionally change it. Busytok lets a caller choose a provider and model for a logical subagent, delegate one task, then wait, poll, cancel, or inspect the result without silently rebinding that role.
create, reuse, and fail reuse policies with no silent rebinding--wait completion or asynchronous JSON submission and pollingDownload the latest universal DMG from Releases, open it, and drag Busytok.app to /Applications. Apple Silicon and Intel are both supported.
Start the app, then verify that the local service is ready and inspect the enabled provider/model catalog:
busytok status
busytok models --json
Configure at least one provider and enabled model in the GUI or with the CLI.
Use the provider_id and model_id returned by busytok models --json; do not
assume a fixed provider or catalog order.
Replace <PROVIDER_ID> and <MODEL_ID> with IDs from the live catalog:
busytok delegate \
--subagent "reviewer-001" \
--profile "pi/review-cheap" \
--bind-provider "<PROVIDER_ID>" \
--bind-model "<MODEL_ID>" \
--reuse-policy create \
--output json \
--wait \
--wait-timeout 120 \
"Review the repository's open TODOs and return the three highest-impact items."
The response is machine-readable JSON on stdout. Keep stderr separate for diagnostics; do not merge the streams in automation.
For longer work, submit without --wait, read the returned task_id, and poll
the task until its status is terminal:
busytok delegate \
--subagent "reviewer-async-001" \
--profile "pi/review-cheap" \
--bind-provider "<PROVIDER_ID>" \
--bind-model "<MODEL_ID>" \
--reuse-policy create \
--output json \
"Review the repository's open TODOs and return the three highest-impact items."
busytok subagent task --task-id "<TASK_ID>" --output json
completed is success; queued and running are still in progress; failed
and cancelled should be surfaced with their structured error or cancellation
context. See the integration guide for deterministic catalog selection, prompt channels, and cancellation flows.
Each logical subagent can be bound to a provider UUID (--bind-provider) and a
model ID (--bind-model). The live catalog from busytok models --json is the
source of truth. A one-task --model override is distinct from a persistent
binding.
--subagent is a stable, role-oriented identity. Use:
--reuse-policy create to create a new routing identity--reuse-policy reuse to intentionally use the existing binding--reuse-policy fail to reject a name collisionReusing a name never silently rebinds it. To route the role to a different provider/model, create a new logical subagent name.
The runtime serializes work for one logical subagent, queues tasks when needed, and can reuse its sidecar session. Use task polling, cancellation, and history commands to manage work after submission; structured queue reasons and errors make failures diagnosable.
Busytok is local-first and stores application data in local SQLite. Providers and models are configured by you in the GUI or CLI, and delegation is explicit. It is not a transparent proxy for all Claude/Codex traffic, does not intercept TLS, and does not manage external agent OAuth/API sessions. It does not promise cloud hosting, automatic routing of every external agent request, or a fixed provider catalog.
For imported Claude Code and Codex usage logs, the desktop app keeps
token/usage metadata rather than prompt/response bodies. Delegated task
prompts/results and prompt-palette templates are separate local app data. The
desktop UI exposes Overview, Usage, Prompt Palette, Providers, Subagents, and
Settings views.
Press Cmd+Option+K to open the optional prompt palette for saving and
reusing local prompt templates.

| Topic | Guide |
|---|---|
| Agent integration and CLI contract | Subagent delegation guide |
| Subagent testing and isolation | Subagent testing guide |
| Product design | Design · Design system |
| Releases | Release workflow |
| Development and contribution | Contributing |
| Security reporting | Security policy |
| License | Apache-2.0 |
apps/gui: React + Tauri desktop applicationapps/gui/src-tauri: Tauri Rust host crate and bundle configurationapps/service: Rust background serviceapps/cli: Rust administrative CLIcrates/busytok-*: Rust workspace cratesRun the local acceptance gate before a pull request:
./scripts/verify_acceptance.sh
For a release rehearsal on macOS:
DEVELOPER_ID_APPLICATION="Developer ID Application: ..." ./scripts/verify_release.sh
The naming check is:
bash scripts/check-busytok-naming.sh
Busytok is 0.x: real and usable, but minor releases may break. macOS
releases use the universal DMG and may auto-update; reinstall manually from
Releases when needed.
See CONTRIBUTING.md for the toolchain, branch model, and
required CI checks. Pull requests target main and should use Conventional
Commit titles.
See SECURITY.md. Report vulnerabilities through GitHub Private
Vulnerability Reporting;
do not open a public issue for a security report.