worklink-tool-pins — Worklink external-tool drift poller
This is an opt-in poller skill that ships under
mimir/optional-skills/ but is NOT auto-installed. It watches the
tool_pins: section of <home>/worklink.yaml and files or reuses
low-priority Chainlink bump issues when an upstream version differs
from the configured pin.
What it does
- Loads the documented
tool_pins:section from<home>/worklink.yamlwith a standalone stdlib parser. Poller subprocesses run outside mimir's venv/import path, so this skill intentionally does not importmimir.*or PyYAML at runtime. - Inventories configured
tool_pins:against supported upstream sources (npmand GitHub release sources). - Files or reuses low-priority Chainlink issues carrying the stable
Dedupe-Key: worklink-tool-pin:<category>:<name>:<old>-><new>. - Emits JSONL only when at least one bump issue was filed or reused.
What it does not do
- It does not auto-edit
worklink.yaml. - It does not run smoke commands. Smoke commands are copied into the Chainlink issue as the suggested validation command for the eventual bump PR.
- It does not alert on missing config or no drift; silence is the expected healthy path.
Installation
cp -r mimir/optional-skills/worklink-tool-pins <home>/skills/
# Ensure MIMIR_HOME points at the home containing worklink.yaml.
reload_pollers
The shipped cadence is weekly Sunday 08:00 UTC with low priority so it is shed before interactive or high-value pollers under resource pressure.
worklink.yaml shape
tool_pins:
- name: opencode
category: coding-cli
pin: "1.18.9"
smoke: "opencode --version"
source: npm
package: "opencode-ai"
- name: chainlink
category: tracker
pin: "chainlink-1.6.0"
smoke: "chainlink --version"
source: github-release
repo: dollspace-gay/chainlink
Supported source values:
npm— resolvespackage(orname) vianpm view <package> version.github-release,github, orgithub-tag— resolvesrepoviagh release view --repo <owner/repo> --json tagName.
Pins with source: manual / local, missing resolvers, or resolver
failures are skipped as diagnostics on stderr; they do not make the
poller non-zero.
The parser is intentionally narrow rather than a full YAML interpreter:
it supports the documented top-level tool_pins: list of scalar
mappings. If the Worklink config format grows nested tool-pin fields,
update this poller parser and its subprocess smoke test in the same PR.