Skip to content

Taps

A tap is a data source wdpkr indexes. The default tap is files: it walks your repository, chunks code with tree-sitter, and summarizes each symbol. But the index isn’t limited to code — any tap feeds the same summarize → embed → search pipeline.

The motivating case: give an AI agent the why behind the code, not just the what. Indexing your Linear issues — their descriptions and the discussion in comments — lets an agent ask “why did we change the rate table?” and get the decision, not just the diff.

Each non-files tap is indexed into its own namespace (<namespace>--<tap>) and its results are tagged with a source field, so a single wdpkr search can span code and issues while keeping them distinguishable.

Taps live under a taps: list in ~/.config/wdpkr/config.yaml. Omit the list entirely and you get the default files tap. List taps explicitly to add more:

taps:
- name: files # repository code
- name: linear # Linear issues
settings:
amount: 100 # ingest the newest N issues (default 50)
order_by: updatedAt # 'updatedAt' (default) or 'createdAt'
# team: ENG # optional team-key filter
include_comments: true
# api_key_env: LINEAR_API_KEY # env var holding the key (default)

Fetches the newest issues from the Linear GraphQL API and indexes one document per issue: identifier, title, state, priority, labels, project, assignee, URL, the description, and — when include_comments is on — the full comment thread, all captured by a single summary.

Set your key in the environment, not the config file:

Terminal window
export LINEAR_API_KEY=lin_api_...
wdpkr index --tap linear
SettingDefaultDescription
amount50How many of the newest issues to ingest
order_byupdatedAtupdatedAt or createdAt — both return most-recent-first
teamOptional team-key filter (e.g. ENG)
include_commentstrueFold each issue’s comment thread into its document
api_key_envLINEAR_API_KEYName of the env var holding the API key

Every run fetches the newest amount issues — that complete set is the desired index state. Anything previously indexed that isn’t in that set is pruned: archived, deleted (trashed), permanently removed, and issues that aged out of the newest-amount window are all deleted from the index. (A failed fetch deletes nothing, so a transient API error can’t wipe the index.)

wdpkr index --dry-run includes the Linear tap: it does a free metadata read (no LLM calls) and reports a Linear issues: N line plus the estimated summarization cost — one summary per issue. With no LINEAR_API_KEY set, the Linear estimate is skipped and the code estimate still runs.

By default wdpkr search queries every configured tap and merges results by score. Use --provider to narrow:

Terminal window
wdpkr search "why did we change the rate table" --provider linear --pretty
wdpkr search "rate table lookup" --provider files # code only
wdpkr search "rate table" # code + Linear, merged

Linear results look like:

{
"path": "linear://ENG-123",
"source": "linear",
"score": 0.82,
"summary": "Decision to switch the rate table to monthly buckets…"
}

The tap system is source-agnostic. Notion (via notion-mg) is a natural next source for documents that change less often than issues — same pattern: a namespace suffix, a source tag, and a --provider to scope search.