HN 표시: 종속성에서 기능을 Yoink하고 공급망 공격을 방지합니다.
hackernews
|
|
📦 오픈소스
#ai 딜
#ai 에이전트
#claude
#command r
#openai
#보안
#오픈소스
#의존성
원문 출처: hackernews · Genesis Park에서 요약 및 분석
요약
YOINK(You Only Implement Native Knowledge)은 서드파티 라이브러리 의존성을 분석해 프로젝트에 실제로 필요한 기능만 내부 코드로 재구현해주는 AI 에이전트로, 현재 클라우드 코드(Claude Code) 플러그인 형태로 제공됩니다. 이 도구는 대상 저장소를 클론하고 테스트를 수립한 뒤 의존성을 분해하는 세 단계 작업을 통해, 거대한 SDK를 가져오지 않고도 필요한 기능만 가볍게 대체할 수 있게 해줍니다. 특히 공급망 공격(Supply Chain Attack) 위험을 줄이고 보안성을 높이는 데 효과적이며, 안드레이 카파시와 오픈AI 엔지니어들도 복잡한 외부 의존성 대신 LLM을 활용해 필수 기능만 직접 구현하는 방식의 장점을 강장한 바 있습니다. 현재는 파이썬 패키지에 한해 지원하지만 향후 자바스크립트 패키지 지원도 계획 중이며, 장고 같은 복잡한 프레임워크나 암호화 구현에는 적합하지 않습니다.
본문
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? 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. - uv — used for Python dependency management and script execution Add the yoink marketplace and install the plugin from within Claude Code: /plugin marketplace add theogbrand/yoink /plugin install yoink@yoink-marketplace /reload-plugins Navigate to any project and run /yoink:yoink : /yoink:yoink "Replace usage of litellm with my own implementation" --url "https://github.com/BerriAI/litellm" 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. 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 "" --url "" [--package ""] [--skip-test-discoverer] Options: --url - GitHub repository URL to clone and decompose (required)--package - 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: 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 repository URL to clone (required)--package - Override the package name (defaults to the repo name from the URL) 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 - The target package name (required) 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 - The target package name (required) 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) - YOINK currently only supports re-implementing Python packages, but we plan to support JavaScript packages next. 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 c
Genesis Park 편집팀이 AI를 활용하여 작성한 분석입니다. 원문은 출처 링크를 통해 확인할 수 있습니다.
공유