YOINK
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. Instead of importing a 50k-line SDK
for three function calls, point yoink at the package, describe what you need,
and it reimplements only the functionality you actually use, verified against
the expectations of the original library's tests.
They say "don't reinvent the wheel" but what if you could?
Why now?
AI agents are getting good enough to own code end-to-end, and with supply chain
attacks accelerating, fewer dependencies means less attack surface.
Classical software engineering would have you believe that dependencies are
good (we're building pyramids from bricks), but imo this has to be
re-evaluated, and it's why I've been so growingly averse to them, preferring
to use LLMs to "yoink" functionality when it's simple enough and possible. -
Andrej Karpathy
OpenAI's harness engineering
article echoed this: agents reason better from reimplemented functionality they
have full visibility into, over opaque third-party libraries.
In some cases, it was cheaper to have the agent reimplement subsets of
functionality than to work around opaque upstream behavior from public
libraries. For example, rather than pulling in a generic p-limit-style
package, we implemented our own map-with-concurrency helper: it’s tightly
integrated with our OpenTelemetry instrumentation, has 100% test coverage, and
behaves exactly the way our runtime expects. - Ryan Lopopolo (OpenAI)
We are making this capability accessible to anyone.
Getting Started
Prerequisites
- uv — used for Python dependency management and script execution
Install
Add the yoink marketplace and install the plugin from within Claude Code:
/plugin marketplace add theogbrand/yoink
/plugin install yoink@yoink-marketplace
/reload-plugins
Usage
Navigate to any project and run /yoink:yoink:
/yoink:yoink "Replace usage of litellm with my own implementation" --url "https://github.com/BerriAI/litellm"
Skills
yoink runs three skills sequentially:
/yoink:setup clones the target repo and scaffolds a local replacement package.
/yoink:curate-tests studies the reference implementation and generates new tests, verified against the expectations of the original test suite.
/yoink:decompose determines dependencies to keep or decompose, based on a set of principles we defined, such as "keeping foundational primitives regardless of how narrow they are used".
The /yoink:yoink command runs all three in sequence.
/yoink:yoink
Curate tests from a target package, then decompose its dependencies into a
local, dependency-free replacement. Runs in three phases: setup (Phase 1), test
curation (Phase 2), and dependency decomposition (Phase 3).
Usage:
/yoink:yoink "<prompt>" --url "<github_url>" [--package "<package_name>"] [--skip-test-discoverer]
Options:
--url <github_url> - GitHub repository URL to clone and decompose (required)
--package <package_name> - Override the package name (defaults to the repo name from the URL)
--skip-test-discoverer - Skip the test discovery step (test generation still works without discovered tests)
The individual phases of /yoink:yoink are also available as separate skills, useful if a run fails midway and you need to resume from a specific phase:
/yoink:setup
Scaffold the project: clone the target repo and install the real library for test validation.
Usage:
/yoink:setup --url "https://github.com/BerriAI/litellm"
Options:
--url <github_url> - GitHub repository URL to clone (required)
--package <package_name> - Override the package name (defaults to the repo name from the URL)
/yoink:curate-tests
Phase 2: Generate and discover tests, then validate them against the real library. Requires /yoink:setup to have been run first.
Usage:
/yoink:curate-tests "I want to replace the usage of litellm in @sample.md with my own implementation" --package litellm
Options:
--package <package_name> - The target package name (required)
/yoink:decompose
Phase 3: Dependency decomposition. Seeds the queue with the target package and iteratively decomposes each dependency. Requires /yoink:curate-tests to have been completed first.
Usage:
/yoink:decompose --package litellm
Options:
--package <package_name> - The target package name (required)
When to use this?
What is this good for?
- Replacing small-to-medium utility packages with internal replacements
- Packages with unclear maintenance or security posture
- Reducing supply chain attack surface
- Cases where you only need a subset of a package's features
What is this not good for?
- Large, complex frameworks (Django, Flask, etc.)
- Packages with deep platform-specific bindings
- Cryptographic implementations (use audited libraries)
Limitations
- YOINK currently only supports re-implementing Python packages, but we plan to support JavaScript packages next.
Development
To run yoink from a local clone instead of the marketplace:
claude --plugin-dir ./plugins/yoink
An example prompt is included in examples/litellm-sample.md to try locally:
git clone https://github.com/theogbrand/yoink.git
mkdir litellm-lite
cp ./yoink/examples/litellm-sample.md ./litellm-lite/
cd litellm-lite
claude --plugin-dir ../yoink/plugins/yoink
/yoink:yoink "Replace the usage of litellm in @litellm-sample.md with my own implementation" --url "https://github.com/BerriAI/litellm"
Orchestration Linter
After editing skill or agent files, run the linter to validate conventions and
regenerate the flow visualization in
ORCHESTRATION_FLOW.md:
uv run python scripts/orchestration-linter.py --write
See CONTRIBUTING.md for more.