• v3.5.0 54fcea724e

    v3.5.0
    All checks were successful
    CI / build-and-test (push) Successful in 3m15s
    CI / docker-build (push) Successful in 42s
    Stable

    joeyr released this 2026-09-30 00:52:14 -05:00 | 25 commits to main since this release

    Added

    • A fantasy matchup shows as a table. With mcp-gateway 0.66.0, each box
      score comes with its starters already laid out in fixed-width columns:
      your team on the left, projected and actual points, the position in the
      middle, and the other team on the right. The prompt tells Claude to show
      that table in a code block exactly as given, with its notes underneath,
      instead of listing every starter. Discord still gets lists for anything
      else, since it draws no tables of its own.
    Downloads
  • v3.4.3 9373f47b9f

    v3.4.3
    All checks were successful
    CI / build-and-test (push) Successful in 2m21s
    CI / docker-build (push) Successful in 25s
    Stable

    joeyr released this 2026-09-29 21:42:35 -05:00 | 26 commits to main since this release

    Fixed

    • A private answer shows the question it answers. The <@id> asked:
      header was added only when an answer was made public, so the private copy
      was an answer with nothing above it. Discord's own "used /aufhocker
      query-chat" line names the command, not what was typed. The private copy
      now carries the same header and is split exactly as the public post will
      be, so what you see is what Make Public posts. Both commands get it.

    Changed

    • Chat answers aim to fit in one Discord message. A message holds 2,000
      characters, and nothing told Claude so. A longer answer arrived as several
      messages, with Make Public partway down. The query-chat system prompt
      now asks for about 1,800 characters (roughly 300 words) unless the
      question needs more. espnff already asks for short answers and is
      unchanged. The new prompt costs each open conversation one uncached
      request.
    Downloads
  • v3.4.2 3fafd901e6

    v3.4.2
    All checks were successful
    CI / build-and-test (push) Successful in 2m34s
    CI / docker-build (push) Successful in 25s
    Stable

    joeyr released this 2026-09-29 20:32:25 -05:00 | 27 commits to main since this release

    Changed

    • The fantasy prompt knows about the rehearsals in mcp-gateway 0.65.0.
      That server adds a free-agent pickup, a claim with a FAAB bid and
      cancelling a claim. None was ever tested against ESPN, so they only
      rehearse. The prompt used to say those could not be done from here, which
      kept Claude from trying them. It now says their tools only rehearse, and
      that Claude must tell the owner the change was not made. They need
      Confirm like every change outside ESPNFF_UNCONFIRMED_TOOLS, so no
      setting changes.
    • A change waiting for Confirm that will not be sent says why. The note
      Claude gets used to blame dry-run mode alone. It now names the other
      reason too: a change that isn't live yet.
    Downloads
  • v3.4.1 52bafdbdb1

    v3.4.1
    All checks were successful
    CI / build-and-test (push) Successful in 2m21s
    CI / docker-build (push) Successful in 24s
    Stable

    joeyr released this 2026-09-29 20:03:22 -05:00 | 28 commits to main since this release

    Changed

    • Terror Zone messages stay up until 15 minutes after their zone ends.
      The alert posted as a zone starts used to be deleted the moment the zone
      rotated out, and a 5 to 20 minute warning was deleted as its zone
      started, just when it was most useful. Both now stay through the zone
      and go 15 minutes after it ends. Messages already up when this version
      starts keep the delete time they were given.

    Fixed

    • Terror Zones rotate every 30 minutes, not every hour. The bot's own
      rotation length said an hour. It was only used when the API gave no next
      rotation time, and then an alert could stay up 30 minutes too long. The
      warnings' new delete time is worked out from it, so it's corrected now.
    Downloads
  • v3.4.0 4545bf2cd8

    v3.4.0
    All checks were successful
    CI / build-and-test (push) Successful in 2m21s
    CI / docker-build (push) Successful in 26s
    Stable

    joeyr released this 2026-09-29 19:30:24 -05:00 | 29 commits to main since this release

    The fantasy team's manager can change it from Discord. With mcp-gateway
    0.64.0 and ESPN_WRITES on, /aufhocker espnff mcp can set the lineup, put
    in waiver claims and reorder them, for the people in ESPNFF_OWNER_IDS and
    nobody else. Deploy mcp-gateway 0.64.0 or later first: this version
    gives non-owners only tools the fantasy server labels read-only, and an
    older server labels none.

    Added

    • ESPNFF_OWNER_IDS (.env): the Discord ids offered the fantasy
      server's owner-only tools, which change the team and read its private
      pending claims. Empty means nobody. Everyone else keeps the read-only
      tools and is never shown the others.
    • Confirm buttons. A change not listed in ESPNFF_UNCONFIRMED_TOOLS
      does not run when Claude asks for it. The bot previews it with the server
      and posts a private message under the answer, with one Confirm button
      per change and the change described in ESPN's names for the players.
      Nothing is sent until the asker presses it. A button works once, only for
      the asker while they are still an owner, and only for 15 minutes. Its
      result replaces it: done and read back, accepted but not showing yet, dry
      run, or refused.
    • ESPNFF_UNCONFIRMED_TOOLS (.env.config): owner changes that run
      straight away. It ships as update_lineup, because a lineup move is
      undone by making it again and a waiver drop is not. Empty, the default in
      code, confirms everything.
    • /aufhocker espnff help tells an owner which changes happen straight
      away and which wait for Confirm, and tells nobody else anything about
      changes.
    • The fantasy system prompt, for an owner, names which change tools run at
      once and which wait, and says a dry_run result means nothing reached
      ESPN. Everyone else's prompt is unchanged, byte for byte.

    Changed

    • Borrowed tools carry what their server says about them.
      McpToolSource reads each tool's readOnlyHint and _meta.owner_only. A
      tool that says nothing counts as owner-only, so an unlabelled change tool
      is hidden rather than shared. The claude/mcp connect line names the
      owner-only tools.
    • Claude can only run a tool the request offered. The tool executor
      holds every tool the bot knows, change tools included, and it used to run
      whatever name it was given. A call for an unoffered tool is now refused.
    • When a non-owner is offered no fantasy tools because all of them are
      owner-only, the answer says the server offers nothing they can use. It no
      longer says the server is not connected.
    • A plugin can own more than one button prefix. The query plugin owns
      make_public_ and espnff_confirm_.
    Downloads
  • v3.3.0 6542eaa2c1

    v3.3.0
    All checks were successful
    CI / build-and-test (push) Successful in 2m20s
    CI / docker-build (push) Successful in 25s
    Stable

    joeyr released this 2026-09-29 13:58:18 -05:00 | 30 commits to main since this release

    Changed

    • Answers show their formatting. Headers, bold, italics, quotes and
      small grey text in an answer now render in Discord. The bot used to
      escape every formatting character before sending, so they showed up as
      a literal # or **, and a mention showed up as raw <@id> text. This
      covers query-chat answers as well as fantasy ones. Pings are still
      blocked for all bot output, as before.
    • A published answer says who asked. The line above it reads
      @name asked: instead of Query:. The name is a mention, so it
      shows the asker's name in that server, and it doesn't notify them.
    • The fantasy prompt tells Claude what Discord can show, including
      that Discord has no tables, so it uses a list instead.
    Downloads
  • v3.2.2 50e0244863

    v3.2.2
    All checks were successful
    CI / build-and-test (push) Successful in 2m19s
    CI / docker-build (push) Successful in 32s
    Stable

    joeyr released this 2026-09-28 20:52:10 -05:00 | 31 commits to main since this release

    Changed

    • The DClone status message has more room. A blank line separates the
      four modes, and each region's flag, bar and level are spaced further
      apart, like 🇺🇸 ▰▰▱▱▱▱ 2/6.
    Downloads
  • v3.2.1 a7bc1cdc76

    v3.2.1
    Some checks failed
    CI / build-and-test (push) Failing after 5m1s
    CI / docker-build (push) Has been skipped
    Stable

    joeyr released this 2026-09-28 20:43:11 -05:00 | 32 commits to main since this release

    Changed

    • The Docker build keeps npm's downloads between builds. Both npm ci
      runs in the Dockerfile share a BuildKit cache on the build host, so a build
      only downloads the packages that host hasn't fetched before.
    • A stuck npm download is retried after a minute. npm's default is to
      wait 5 minutes per attempt, so one download that stalls without erroring
      could run past CI's 15-minute job limit without printing anything. Both
      installs now drop it after 60 seconds and try again.
    Downloads
  • v3.2.0 561f6a2a5c

    v3.2.0
    Some checks failed
    CI / build-and-test (push) Successful in 2m19s
    CI / docker-build (push) Has been cancelled
    Stable

    joeyr released this 2026-09-28 20:22:28 -05:00 | 33 commits to main since this release

    Changed

    • The bot runs on Claude Sonnet 5.5. CLAUDE_MODEL (the chat command)
      and LOL_PREDICTION_MODEL (live-game predictions and lane detection) move
      from claude-sonnet-5 to claude-sonnet-5-5 in .env.config, and the
      code's fallback for CLAUDE_MODEL follows. The price per token is the
      same as Sonnet 5.
    • Lane detection works on Sonnet 5.5. It turns thinking off so a
      thinking block can't use up its 150-token answer, and Sonnet 5.5 refuses
      the old way of doing that (disabled) with a 400. On Sonnet 5.5 it now
      sends between_tools, the new lowest setting. Other models still get
      disabled.
    Downloads
  • v3.1.1 6853166f20

    v3.1.1
    All checks were successful
    CI / build-and-test (push) Successful in 2m24s
    CI / docker-build (push) Successful in 31s
    Stable

    joeyr released this 2026-09-28 18:44:47 -05:00 | 34 commits to main since this release

    Changed

    • The DClone status message puts each region on its own line. Three to
      a line didn't fit on a phone, so the last flag ended one line and its bar
      started the next. Now each mode is in bold over three short lines, like
      🇺🇸 ▰▰▱▱▱▱ 2/6. It's longer, but nothing wraps.
    Downloads