cat-claws
Agent-SDK backends for the CatLLM ecosystem: classify text through a Claude subscription (Claude Agent SDK) or a ChatGPT subscription (openai-codex SDK) instead of per-token API billing.
(Distribution name cat-claws; imports as catclaws. Source repo:
cat-agent.)
Status: alpha, under active development. See MASTERPLAN.md for the
design and step tracker, and OPENAI_MASTERPLAN.md for the Codex backend's
execution record.
Install
Each backend's SDK is an extra — install the one(s) you use:
pip install "cat-claws[claude]" # Claude backend (claude-agent-sdk)
pip install "cat-claws[codex]" # Codex backend (openai-codex, bundles the codex binary)
pip install "cat-claws[claude,codex]" # both
A bare pip install cat-claws installs neither SDK; calls then return a
clear per-row install hint instead of classifying.
Design in one paragraph
One row = one sealed, fresh-context agent call (no tools, single turn, no settings/AGENTS.md/CLAUDE.md loading), using cat-stack's validated classification prompt byte-for-byte. The model answers in JSON; parsing and the wide 0/1 output matrix reuse cat-stack's existing machinery. Throughput comes from concurrent one-shot calls, never from shared conversations or corpus-in-one-prompt (which would contaminate rows and break research validity).
Quick start
import catclaws
# Claude subscription (requires Claude Code installed and logged in):
df = catclaws.classify(
input_data=["I moved for a new job", "Rent got too expensive"],
categories=["Employment", "Cost of living", "Other"],
description="Why did you move?",
agent="claude", # default; user_model=None -> claude-sonnet-5
)
# ChatGPT subscription (requires `codex login`; the SDK bundles the binary):
df = catclaws.classify(
input_data=["I moved for a new job", "Rent got too expensive"],
categories=["Employment", "Cost of living", "Other"],
description="Why did you move?",
agent="codex", # user_model=None -> gpt-5.5
)
No API key needed for either backend. Engine users reach the same adapters
via catstack.classify(..., model_source="claude-agent") /
model_source="codex-agent".
Notes for agent="codex": reasoning is explicitly set per call
(thinking_budget=0 → effort "none"), so your ~/.codex/config.toml
defaults are never silently inherited; image/PDF input is not yet supported
on the codex backend (use agent="claude" or an API provider).
Methodology note
The two backends answer the same frozen prompt. On the 24-row synthetic
parity run (2026-07-11, benchmarks/parity_run.py) claude-sonnet-5 and
gpt-5.5 agreed on 96/96 cells (Cohen's kappa 1.000, 0 errors). Synthetic
one-liners are easy; expect some divergence on real survey text — measure
and disclose per study (benchmarks/RESULTS.md holds the running record),
and never tune the prompt to force agreement.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cat_claws-0.3.0.tar.gz.
File metadata
- Download URL: cat_claws-0.3.0.tar.gz
- Upload date:
- Size: 61.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ceef3a73ed6aa5fb4a7e783a8ed1fa47411085f08692df69f46a152f9212f2f
|
|
| MD5 |
d87fadbd90a293cb6bcfd2f4a7f151bb
|
|
| BLAKE2b-256 |
73b3408a4826c560834c042dc78dbc3a3ed7cfd2fe600f607f0b2555619e1c47
|
File details
Details for the file cat_claws-0.3.0-py3-none-any.whl.
File metadata
- Download URL: cat_claws-0.3.0-py3-none-any.whl
- Upload date:
- Size: 16.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffd9547ec30dcaa1e4aa87ca73e8d208633257a8f1707f3b7ab8a0db969c22a5
|
|
| MD5 |
979cd9f8e0be227bcd226de2f8d2dc6f
|
|
| BLAKE2b-256 |
d9363e0f871c9109b5e94dba3772565b19aecc17ae54c80c7394aba529f9e169
|