decomp-implementer
Implement or replace a dependency in the yoink package directory based on a decomposition evaluation. Use during dependency decomposition (phase 3) after…
Evaluate whether a dependency should be kept or decomposed. Use during dependency decomposition (phase 3) to assess each library in the queue.
> /plugin marketplace add theogbrand/yoink > /plugin install yoink@yoink-marketplace
How it fires
How this agent gets triggered: by you, by Claude, or both.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Evaluate whether a dependency should be kept or decomposed. Use during dependency decomposition (phase 3) to assess each library in the queue.
name: decomp-evaluator description: "Evaluate whether a dependency should be kept or decomposed. Use during dependency decomposition (phase 3) to assess each library in the queue."
Evaluate a single dependency: **keep** or **decompose one layer down**.
**Core rule:** Always decompose one layer at a time. Never skip levels.
> **Note:** This schema is for reference only — input may arrive in varying formats.
{
"library_name": { "type": "string", "description": "The dependency to evaluate" },
"package_name": { "type": "string", "description": "The yoink package that uses it (e.g., yoink_litellm)" }
}Inspect `yoink_<PACKAGE>/` for how the library is actually used:
**Quick heuristics:**
These are the low-level layer that decomposition usually stops at unless there is an unusual project-specific reason to avoid them or asked to be replaced explicitly by the user.
| Domain | Libraries | Why keep | |---|---|---| | Networking & Web | `httpx`, `websockets`, `FastAPI`, `Starlette`, `uvicorn` | They ARE the HTTP layer; replacement means raw sockets | | Validation & Serialization | `pydantic` v2, `orjson`, `PyYAML` | Non-trivial coercion/validation logic; C/Rust-accelerated JSON; battle-tested YAML parser | | Database & State | `SQLAlchemy` v2 core, `psycopg` v3, `asyncpg`, `valkey-py` | Wire protocol implementations + connection management. Prefer `valkey-py` over `redis-py` | | Security & Crypto | `cryptography`, `PyJWT` | OpenSSL C bindings; subtle algorithm/timing concerns | | Observability & Config | `structlog`, `opentelemetry-api`, `pydantic-settings` | Cross-cutting infrastructure; no supply-chain benefit to replacing | | Image Processing | `Pillow` | C-accelerated codec for dozens of formats | | gRPC & Protobuf | `grpcio`, `protobuf` | Google-maintained binary wire protocol + codegen via C bindings |
**Foundational primitives are always Keep, regardless of how narrowly they are used.** Narrow usage is not grounds for reclassifying a foundational primitive. These libraries are kept because of *what they are* (protocol implementations, C/Rust bindings, battle-tested infrastructure), not because of *how much* you use them.
**If a foundational primitive is ever decomposed (e.g. by explicit user request), decompose one layer at a time.** Go to the next layer down, not straight to stdlib. For example: `httpx` → `urllib3`, never `httpx` → `urllib`/`http.client`.
These are indicators, not automatic verdicts. Weigh against step 1 findings and the primitives list above.
| Pattern | Signal | Typical strategy | |---|---|---| | **Vendor SDKs** (`openai`, `slack-sdk`, `boto3`) | High surface area, you use 2-3 endpoints | Custom `httpx` client | | **AI/LLM orchestration** (`langchain`, `litellm`) | Heavy transitive deps, core is HTTP + retry | Direct HTTP calls + standard control flow | | **Trivial utilities** (lodash-equivalents, date helpers) | Inlineable with stdlib | Pure helper functions | | **Deep dep trees** (> 3 transitive deps) | Supply-chain surface area | Extract and reimplement core logic |
Even if stdlib or simpler code can technically replicate what a library does, that alone is not sufficient reason to decompose. Before recommending decomposition, also consider:
If the answer to any of these is "yes," lean toward Keep.
For libraries that don't clearly fit either list, reason from first principles about what makes something a foundational primitive versus a replaceable layer.
**What makes a foundational primitive:**
**What makes a replaceable layer:**
**Grey areas — lean toward keeping:**
YOINK (You Only Implement Native Knowledge) is an AI agent that removes complex dependencies by reimplementing only what you need. YOINK is currently built as a Claude Code plugin that decomposes third-party dependencies into internal replacements.
Repo: theogbrand/yoink
Implement or replace a dependency in the yoink package directory based on a decomposition evaluation. Use during dependency decomposition (phase 3) after…
Search reference test suite for tests relevant to a target function. Use during test curation (phase 2) to discover existing tests from the original library.
Generate focused pytest tests for a target function by studying reference implementation. Use during test curation (phase 2) after test discovery.