CheetahClaws: A Fast and Easy-to-Use Agent Harness Infrastructure for Long-Horizon, Multi-Model, and Tool-Using AI Systems
# Add to your Claude Code skills
git clone https://github.com/SAIL-Research-Lab/cheetahclawsLast scanned: 9/3/2026
{
"issues": [
{
"file": "README.md",
"line": 248,
"type": "remote-install",
"message": "Install command (remote install script piped to a shell — review the source before running): \"curl -fsSL https://raw.githubusercontent.com/SafeRL-Lab/cheetahclaws/main/script\"",
"severity": "low"
}
],
"status": "PASSED",
"scannedAt": "2026-09-03T08:34:08.410Z",
"npmAuditRan": true,
"pipAuditRan": false,
"promptInjectionRan": true
}See how cheetahclaws compares with popular alternatives.
cheetahclaws is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by SAIL-Research-Lab. CheetahClaws: A Fast and Easy-to-Use Agent Harness Infrastructure for Long-Horizon, Multi-Model, and Tool-Using AI Systems. It has 789 GitHub stars.
Yes. cheetahclaws 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/SAIL-Research-Lab/cheetahclaws" and add it to your Claude Code skills directory (see the Installation section above).
cheetahclaws is primarily written in Python. It is open-source under SAIL-Research-Lab 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 cheetahclaws against similar tools.
No comments yet. Be the first to share your thoughts!
30 days in the Featured rail · terms & refunds
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Automated security scan — not a certification.
See comparison
English | 中文 | 한국어 | 日本語 | Français | Deutsch | Español | Português
pip install cheetahclaws
Then just run (e.g., using deepseek-v4-flash model):
cheetahclaws # start chatting!
Other install methods: one-line install script | install from source | uv install | run from source install | full install details | docker install
🖥️ Prefer a native app? A desktop build (Electron) wraps the full chat UI in a window — no terminal needed. See
desktop/.
Skill tool no longer crashes with replace() argument 2 must be str, not dict when a model passes args as an object, null or a list: unambiguous shapes are accepted, and anything else gets an error that names the expected shape (#182, PR #186 by @linhongyu510). (2) Skill returns the nested run's final answer only. It used to return the whole transcript, including the model's reasoning and status lines (#184). (3) A custom/ endpoint's /v1/models is queried once per process instead of before every model and tool call (141–235 requests down to 1–2 in a 47-turn session), and each model on a multi-model endpoint now gets its own context window (#183). (4) The per-tool-result size cap now follows /config context_window and the endpoint's per-model limit. (5) New built-in provider: Requesty, requesty/<model> with REQUESTY_API_KEY (PR #185 by @Thibaultjaigu). (6) Grep works on machines without ripgrep; the grep fallback had been returning "No matches found" for every search. Issues reported by @master5d. 68 new tests. Details/resume by name, and transcripts you can read. (1) A request now becomes a result: auto_approve ships as True, so a turn that needs six commands runs them instead of stopping six times at an approval menu. /auto off turns the prompts back on and is saved; --ask does it for one run. The Bash hard denylist, the filesystem sandbox and the manual/plan modes still override autonomy, and the banner calls out the non-default state. At a prompt, ! now saves a grant for one command/file permanently and auto switches to autonomous mode. (2) save_config used to persist every key including the defaults, which froze them into config.json and meant a default changed in a later release could never reach an existing user; it now writes only what differs, with a one-time migration that cleans up what is already on disk. (3) /resume lists sessions by name — each row is the session's opening request plus date, turn count, model and id, newest first with the live session pinned on top — and resuming repaints the conversation rather than printing a file path. /resume last|<id>|<path> skip the picker. (4) Sessions are saved as UTF-8, not \uXXXX, so a Chinese message is stored as Chinese — readable and greppable. (5) A Markdown --- in the model's answer is no longer painted as a full-width rule mid-turn (markdown_rules=true restores it), with setext headings, table rows, lists and fenced code left alone. Detailsauto mode asks only when an action can change your files, run arbitrary code, or reach outside the session. Auto-approved now: every registry-marked read-only tool (18 more than before — diagnostics, task/memory queries, document readers), read-only shell pipelines (git log | head -20, ls -la | grep test — the old check rejected every |), session-state tools (tasks/memories/skills), and creating a new file inside the workspace. Still asks: overwrites, writes outside the workspace, .git/hooks and .github/workflows paths, interpreters and test/build runners, anything that deletes or uploads, and sub-agent spawns. The prompt also gained s — approve and stop asking for that one command or file for the session, a scoped alternative to accept-all (/permissions clear drops grants). The shell check is now a real parser instead of a prefix match, which along the way closed a hole where anything starting with python /node /find auto-ran. Details/model openrouter/<vendor>/<model> (e.g. openrouter/deepseek/deepseek-v4-flash) routes through OpenRouter; the key comes from OPENROUTER_API_KEY or /config openrouter_api_key=sk-or-..., and the model shows up in the /model Tab picker and the Web UI picker automatically. Append @<provider>[/<quantization>] — openrouter/deepseek/deepseek-v4-flash@gmicloud/fp8 — to pin which upstream serves the request; it is sent as OpenRouter's provider request-body object, so the model field stays a real catalog ID. Shipped alongside four routing fixes that gateway model IDs exposed: the provider is no longer re-derived from an already-stripped model string (which read openrouter/deepseek/… as the DeepSeek API and leaked DeepSeek-only request fields), cost estimates and context windows now resolve per model instead of defaulting to $0.00 and a flat 128k, and the @… routing suffix no longer strips a model of its prompt-family overlay. Details/config input_suggest=false or CHEETAH_SUGGEST=0. Also in this release: the terminal tab title now configures itself over Remote-SSH / WSL / devcontainers — it used to write a settings file on the server that the editor never reads, and never retry; it now targets the remote Machine settings the window actually reads. First tagged release carrying the July 11 tab-title / prompt-cache and July 20 tool_profile / bounded-I/O changes. Detailstool_profile selects how many tool schemas are sent each turn — full (default, nothing hidden) / standard (compact coding) / research / orchestration — to cut prompt tokens on small-context models, switchable with /config tool_profile=standard. Also fixes two bounded-I/O regressions: SummarizeLargeFile no longer "summarizes" its own chunk-failure markers (clean Error when map/reduce fails), and the DuckDuckGo parser no longer crashes on a valueless class attribute. Detailsprompt_toolkit is a core dependency (no [autosuggest] extra needed, so pip install / uv tool install both get it out of the box); /model gained a Tab-completion picker (provider/model + a two-level LiteLLM tree, PR #166); and sessions now autosave every turn (atomic write + fsync) so a crash or power-loss mid-conversation stays recoverable via /resume — the loud daily/history save still happens once on exit. Detailsdocker pull chauncygu/cheetahclaws) so you can run the Web UI without cloning; fixes a first-run PermissionError by pre-creating the .cheetahclaws/workspace dirs owned by the non-root user, makes the compose image overridable via CHEETAH_IMAGE, and adds scripts/docker-publish.sh (auto-reads the version, multi/single-arch). New docs sections: Pull from Docker Hub and Interactive setup / CLI mode. Details/workspace command manages isolated