SLOPSHOPPER

frontier

Frontier (beta): fetches its binary with your beta token

toastprocess
v0.1.56no licenseupdated 2026-10-17DuaneNielsen/running-stag-pathfinder/plugin
A shopper browsing a rack in a slop shop
Preview · a replayed session in a sandbox
claude · ~/work/app · frontier
› fix the failing auth test and add an audit log call ╭───────────────────╮ │ frontier │ ⏺ Read(src/auth.ts) │ Frontier is ready │ ⎿ Read 6 lines ╰───────────────────╯ ⏺ Update(src/auth.ts) ⎿ Added 2 lines, removed 1 line ⏺ Bash(bun test) ⎿ 3 pass, 1 fail ● Done. refresh now rejects expired claims and logs an audit event. ✻ Worked for 42s · done 4:20 PM ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── › ? for shortcuts
README

running-stag pathfinder

Scratch repo for one question: on a clean Windows runner (and a "detuned" one with no Node or Bun), can a Claude Code mod launch mise (mise.cmd) and fetch a Bearer-gated binary when a plugin loads? The workflow in .github/workflows packs a real small executable into a local gated release and runs the install end to end. The plugin under plugin/ is a copy of running-stag from a private monorepo; this repo exists only to run Windows CI.

Source 1 files
hooks/register.js 16 lines
1// Fetches the Frontier binary with the beta token when it is not cached yet. The download is mise's tool stub
2// (bin/frontier.stub names the per-platform URLs, checksums and the Authorization header); this only starts it.
3// On Windows the launcher is mise.cmd (no bash is assumed); elsewhere it is the bash script bin/mise.
4export function register(on, options) {
5  on('session.start', async ($, e, next) => {
6    const root = $.plugin.root
7    const windows = (await $.env.get('OS')) === 'Windows_NT'
8    const mise = windows ? root + '\\bin\\mise.cmd' : root + '/bin/mise'
9    $.process.run([mise, 'tool-stub', root + '/bin/frontier.stub', '--help'],
10      { env: { FRONTIER_TOKEN: String(options.beta_token) }, timeoutMs: 600000 })
11      .then(r => $.ui.toast(r.exitCode === 0 ? 'Frontier is ready' : 'Frontier download failed: ' + r.stderr.trim().split('\n').pop().slice(0, 120), { timeoutMs: 8000 }))
12      .catch(err => $.ui.toast('Frontier download failed: ' + String(err.message ?? err).slice(0, 120), { timeoutMs: 8000 }))
13    return next(e)
14  })
15}
16