Yoink
Remote context for GitHub Copilot — no MCP server required.
Index any GitHub repository into a local vector database and expose it as a Copilot Chat tool. Point it at a repo, ask Copilot a question, and it retrieves the most relevant code, docs, or workflows to ground the answer — all from inside VS Code.
Use Cases
- Org documentation RAG — index your team's wikis, runbooks, and ADRs so Copilot can answer questions grounded in your actual docs rather than hallucinating
- Reusable workflow library — index a shared GitHub Actions library repo so Copilot can find and adapt existing workflows instead of writing from scratch
- GitHub Actions setup automation — index your CI/CD patterns and let Copilot generate on-brand pipeline configs for new repos
- Cross-repo code search — give Copilot access to a shared component library, SDK, or internal tool without cloning it locally
Features
- Index any public or private GitHub repository as a searchable data source
- Per-file chunking — markdown is split on headings, source code is split on
functions/methods/classes via Tree-sitter (TS/TSX, JS/JSX, Python, Go, Java,
C#, Rust, Ruby),
action.yml and workflow files are kept whole, and
everything else falls back to fixed-size token windows
- Vector search via
sqlite-vec (brute-force KNN, fully local)
- Automatic delta sync — only re-indexes changed files since last sync
- Multiple tools, each scoped to a subset of data sources
- OpenAI-compatible embedding API (defaults to
text-embedding-3-small)
Repo types
When you add a repository, you pick a type that drives the include filter —
i.e. which files get indexed. The chunking strategy is chosen per file by
the chunker based on path/extension, not per data source, so a single
source-code data source can mix TypeScript code and Markdown docs and each
file is chunked appropriately.
| Type |
Indexes |
general |
everything (no filter) |
documentation |
**/*.md, **/*.mdx, docs/**, wiki/** |
source-code |
TS/TSX, JS/JSX, Python, Go, Java, C#, Rust, Ruby — plus .md/.mdx |
github-actions-library |
action.yml / action.yaml and README.md at any depth |
cicd-workflows |
.github/workflows/** |
openapi-specs |
YAML/JSON spec files, openapi/**, swagger/** |
Chunking
Strategy is chosen per file:
| File pattern |
Strategy |
*.md, *.mdx |
split on # headings (oversized sections fall back to tokens) |
.github/workflows/*.{yml,yaml} |
one chunk per file |
action.yml / action.yaml (any depth) |
one chunk per file |
| Supported source languages (see above) |
one chunk per function / method / class (Tree-sitter AST) |
| Everything else |
fixed-size token windows with overlap |
AST method chunks are prefixed with their enclosing class (e.g.
// Class: UserService) so the embedded text carries context. Parse failures
or files with no definitions fall back to token-split, so polyglot repos
work without manual configuration.
Requirements
- VS Code 1.99+
- GitHub Copilot Chat
- An OpenAI API key (or compatible endpoint)
Setup
- Install the extension (see Installing Locally or grab a release VSIX from Releases)
- Run Yoink: Set OpenAI API Key from the command palette
- Open the Yoink sidebar and add a repository
- Wait for indexing to complete, then ask Copilot about it
Installing Locally
From a release VSIX
Download the .vsix file from the Releases page, then:
code --install-extension yoink-0.0.1.vsix
Or via the VS Code UI: Extensions panel → ... menu → Install from VSIX...
Build and install from source
git clone https://github.com/colbymk97/yoink.git
cd Lens
npm install
npm run build
npm run package # produces yoink-0.0.1.vsix in the project root
code --install-extension yoink-0.0.1.vsix
To uninstall:
code --uninstall-extension yoink.yoink
Extension Settings
| Setting |
Default |
Description |
yoink.embedding.provider |
openai |
Embedding provider |
yoink.embedding.openai.model |
text-embedding-3-small |
OpenAI embedding model |
yoink.embedding.openai.baseUrl |
https://api.openai.com/v1 |
Base URL (supports compatible proxies) |
yoink.search.topK |
10 |
Chunks returned per query |
yoink.sync.onStartup |
true |
Auto-sync on VS Code launch |
yoink.log.level |
info |
Log verbosity (debug / info / warn / error) |
Development
npm run build # TypeScript compile → dist/
npm run watch # Incremental compile on save
npm run lint # ESLint
npm test # Vitest unit tests
npm run package # Build VSIX (runs vsce package)
npm run dev:install # Build, install, and open a new VS Code window
Apple Silicon note: Storage tests (test/unit/storage/) crash locally when Node runs as x64 under Rosetta 2 — sqlite-vec uses AVX instructions Rosetta doesn't support. These tests pass on native x86_64 / GitHub CI. Embedding tests always pass.
Viewing logs
Yoink writes to a VS Code Output Channel. To open it:
View → Output, then select Yoink from the dropdown in the top-right of the panel.
To enable verbose logging, set yoink.log.level to "debug" in your VS Code settings — this surfaces chunking, embedding, and sync details.
CI and Releases
Workflows
| Workflow |
Trigger |
What it does |
ci.yml |
Push to main / claude/**, any PR |
Lint, test, build + package VSIX |
prerelease.yml |
Manual (workflow_dispatch) |
Creates tag, builds VSIX, publishes GitHub prerelease |
release.yml |
Tag v* without hyphen (e.g. v0.1.0) |
Validates tag/version match, builds VSIXs, creates the stable GitHub release, then publishes those same VSIXs to Visual Studio Marketplace |
Build logic (checkout → npm ci → npm run build → vsce package) lives in a shared reusable workflow (_build.yml) called by all three.
Stable releases currently publish these platform-specific VSIXs:
linux-x64
darwin-arm64
win32-x64
Publishing a prerelease
Trigger the Prerelease workflow manually from the Actions tab — or via CLI:
gh workflow run prerelease.yml --ref main -f version=0.1.0-alpha.1
The workflow creates the tag, builds platform-specific VSIXs, and attaches them to a GitHub prerelease automatically. Prereleases do not publish to Visual Studio Marketplace.
Publishing a stable release
- Update
version in package.json
- Commit and push to
main
- Create and push the matching stable tag:
git tag v0.1.0
git push origin v0.1.0
The release.yml workflow will then:
- Verify that the pushed tag matches
package.json exactly (v${version})
- Build the supported platform VSIXs in CI
- Attach those VSIXs to a stable GitHub release
- Publish those same VSIX files to Visual Studio Marketplace
Before the first stable publish, create a Visual Studio Marketplace publisher that matches package.json.publisher, then store a Marketplace PAT as the VSCE_PAT secret in the GitHub Actions production environment. The PAT should be created in Azure DevOps with organization access set to All accessible organizations and scope Marketplace (Manage).
License
MIT