decomp-evaluator
Evaluate whether a dependency should be kept or decomposed. Use during dependency decomposition (phase 3) to assess each library in the queue.
Implement or replace a dependency in the yoink package directory based on a decomposition evaluation. Use during dependency decomposition (phase 3) after evaluation.
> /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.
Implement or replace a dependency in the yoink package directory based on a decomposition evaluation. Use during dependency decomposition (phase 3) after evaluation.
name: decomp-implementer description: "Implement or replace a dependency in the yoink package directory based on a decomposition evaluation. Use during dependency decomposition (phase 3) after evaluation."
Read `.claude/inner-yoink-loop.local.md` for your runtime input variables. Your goal is to build `yoink_{sub_package}/` — a from-scratch replacement for `{sub_package}`. Success means the `yoink_{top_package}/` test suite passes entirely against your implementation.
Read from `.claude/inner-yoink-loop.local.md` (JSON code block after YAML frontmatter):
> **Note:** This schema is for reference only — input may arrive in varying formats.
{
"top_package": { "type": "string", "description": "The top-level package being decomposed" },
"sub_package": { "type": "string", "description": "The sub-package to build a replacement for" },
"category": { "type": "string", "enum": ["API wrapper", "orchestration layer", "utility", "framework"], "description": "Classification of the library" },
"strategy": { "type": "string", "description": "What to replace it with and how" },
"functions_to_replace": { "type": "array", "items": { "type": "string" }, "description": "Specific functions/classes used by yoink_{top_package}/" },
"reference_material": { "type": "string", "description": "API docs URL or library source path" },
"acceptable_sub_dependencies": { "type": "array", "items": { "type": "string" }, "description": "What lower-level deps are OK to introduce" },
"max_iterations": { "type": "integer", "description": "Maximum loop iterations before auto-stop" }
}Repeat steps 1–3 until all tests pass or you hit the max iteration limit.
uv run ${CLAUDE_PLUGIN_ROOT}/scripts/run_tests.py --project-dir . 2>&1 uv run ruff check --fix yoink_{sub_package}/
uv run ruff format yoink_{sub_package}/
uv run ty check yoink_{sub_package}/Run the test suite and check score:
uv run ${CLAUDE_PLUGIN_ROOT}/scripts/run_tests.py --project-dir . > .claude/decomp-implementer-loop/{sub_package}-iteration-<N>-run.log 2>&1
grep "^score:" .claude/decomp-implementer-loop/{sub_package}-iteration-<N>-run.log | tee -a .claude/decomp-implementer-loop/{sub_package}-scores.log---
**CRITICAL: After committing your final passing state, you MUST emit a completion signal. Do NOT exit the loop silently.**
Emit your output as a JSON code block matching this schema:
{
"completion_promise": { "type": "string", "enum": ["DONE", "MAX_ITERATIONS_REACHED"], "description": "Whether the implementation completed successfully or hit the iteration limit" },
"what_was_done": { "type": "string", "description": "Summary of changes made" },
"new_imports": { "type": "array", "items": { "type": "string" }, "description": "External libraries that yoink_{sub_package}/ now imports" }
}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
Evaluate whether a dependency should be kept or decomposed. Use during dependency decomposition (phase 3) to assess each library in the queue.
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.