Skip to content

v0.5.1 β€” the agent-experience release

Choose a tag to compare

@Stupidoodle Stupidoodle released this 25 Aug 11:40
· 34 commits to main since this release

v0.5.1 β€” the agent-experience release

Two independent review passes over the MCP server and CLI β€” one measuring
real token costs, one auditing against the MCP spec (2025-06-18) and the
Claude Code plugin docs β€” and everything they flagged for this cycle, fixed.

Naming: --board

--country jobsch stopped making sense the moment Switzerland held three
boards. The selector flag is now --board (a board id, or a country
code that expands to every board there); --source and --country keep
working as aliases, sdj config --boards persists SDJ_BOARDS
(SDJ_COUNTRIES still read), and MCP search_jobs gains a board param
with country kept as a deprecated alias.

Token economy (measured)

  • MCP results ship compact JSON β€” ~19% fewer tokens on every tool call
  • refusal payloads no longer duplicate the (sometimes 1KB) tracking URL
  • search_jobs/list_applications declare
    _meta["anthropic/maxResultSizeChars"], keeping max-limit results under
    Claude Code's output warning
  • the skills now mandate --limit on sdj list --json (raw wire rows are
    ~470 tokens each; uncapped worst case measured at ~10MB)

Spec compliance

  • a valid-JSON non-object line (stray array, legacy batch) crashed the
    server process β€” now a proper -32600
  • tool arguments are validated against each tool's declared schema: a
    typoed enum value used to silently return "0 matches" (which an agent
    reads as "no jobs exist"); now it's a loud invalid_arguments error
    naming the valid values
  • apply_to_job no longer claims destructiveHint: false β€” the spec
    default applies, so clients keep every confirmation layer in front of an
    irreversible submission
  • protocol-version negotiation, tools/list cursor handling, and the
    resources/prompts stubs now match the spec exactly

Steering fixes

  • refusal messages are tool-neutral, reference apply_url instead of
    repeating it, spell the override per entrypoint, and never render
    "visit None" again
  • sdj apply prints the posting's real mode (was hardcoded DIRECT β€”
    wrong for jobs.ch/jobup.ch)
  • skills document syndicated_posting β€” the majority refusal outside CH
  • board/country counts in tool titles and instructions derive from the
    registry, so prose can't drift when board #9 lands
  • README previews are captured from real runs
  • release-pin guard tests force plugin pin and package version to move in
    the same commit

Full Changelog: v0.5.0...v0.5.1