Skip to content

Changelog ​

What changed in Standcast. Versions match the GitHub releases. The API section follows the versioning policy.

Product ​

Unreleased ​

0.7.0 — 2026-11-06 ​

0.6.0 — 2026-11-06 ​

0.5.0 — 2026-11-06 ​

  • Google Chat: a team with chat.provider: google-chat gets the digest in a Google Chat space, late dailies in its thread, and reminders, routed blockers and suggested blockers by direct message, through the Standcast app for Google Chat. Add the app to a space, and an admin pastes the link code it posts in the web app (Settings → Google Chat) or on the setup page. People link themselves by sending the app a direct message once, or with members.<login>.google_chat: users/<digits> in standcast.yml. One organization can use Slack for one team and Google Chat for another. The app works in Google Workspace domains where it is available; a Google Workspace Marketplace listing is coming. See Google Chat.
  • The standcast.yml template on the setup page has one team on Slack and one on Google Chat. Delete the one you do not use.
  • In the web app, failed deliveries that any chat can cause no longer name Slack.
  • A team with chat.provider: google-chat needs a space name (spaces/...) in chat.channel. Before, any text passed the standcast.yml check and the digest failed later with space_not_linked. When the value is the space link, the error tells you the name to use.
  • When the Google Chat app finds no account for your email, or more than one, it also answers with your Google Chat id (users/<digits>), ready for an admin to put under members.<login>.google_chat in standcast.yml.

0.4.1 — 2026-11-02 ​

  • Documentation only: the 0.4.0 changelog entries. No product changes.

0.4.0 — 2026-11-02 ​

  • The daily draft can use your local AI sessions: standcast draft --sessions, the MCP standcast_get_draft tool (includeSessions, on by default) and the /daily skill read your Claude Code sessions on your machine and group them with your pull requests, cards and commits into work, so yesterday becomes one line per piece of work. Standcast never sends session data to its API; your AI client receives it and may send it to its model provider. Turn it off with STANDCAST_SESSIONS=off. See Privacy.
  • The setup page warns when a team's Slack channel is missing or the bot is not in it; digest links no longer unfold into previews and show a short label (repo#123, FEL-12); a pull request opened and merged in the same window appears once in the draft.
  • The web app is live at app-standcast.usefachada.dev, starting with the setup screen. The server-rendered setup page still works.
  • Today in the web app: one team on the current day, with open blockers and how long they have been open, support requests, today's dailies, what shipped yesterday and who sent today. Managers, admins and the author can resolve and reopen a blocker, and managers and admins can remind someone who has not sent yet. It shows no per-person metric and no history of who did not send. See Web app.
  • Support requests: an optional section of the daily for what you need from someone else without being blocked, such as a review, a decision or a pairing session. The /daily skill, the MCP server and the CLI ask for it after the blockers, and the digest shows it right after the blockers, with who asked. It is not routed by direct message.
  • The digest and the late daily label their sections with emoji so they read faster in Slack: 📅 title, 🗓️ Yesterday, 🎯 Today, 🚧 Blockers, 🤝 Support requests and ⏳ for who did not send. The confirmation shown before sending a daily uses the same labels.

0.3.1 — 2026-11-01 ​

  • The documentation site publishes robots.txt and a sitemap.xml, and the landing page serves its own fonts.

0.3.0 — 2026-11-01 ​

  • Standwise is now Standcast: new name, CLI binary standcast, config file standcast.yml, STANDCAST_* environment variables, Standcast-* webhook headers, sc_/sck_ token prefixes and new URLs (api-standcast.usefachada.dev, docs-standcast.usefachada.dev). Existing sessions and API keys stop working: sign in again and create new keys.
  • Landing page at standcast.usefachada.dev, in English and Portuguese, with a form to join the public beta. After sending it you land on the install guide.
  • Documentation for AI agents: llms.txt, llms-full.txt and a Markdown copy of every page, in English and Portuguese. The api serves its own llms.txt with links to the OpenAPI document and the API guides.
  • The privacy page explains what the beta form stores and for how long.
  • CODEOWNERS files are parsed in linear time.

0.2.1 — 2026-10-31 ​

  • Release tooling only: versions match the GitHub releases everywhere. No product changes.

0.2.0 — 2026-10-31 ​

First public beta.

  • Hardening:

    • The setup page shows a notice when a GitHub team in standwise.yml cannot be found or is too large (only the first 5,000 members are used).
    • Sign out on the setup page ends the web session.
    • Pull request links are matched without regard to letter case, so a blocker is not routed twice for the same pull request.
    • Reviews, timeline events and check runs are read page by page from GitHub, so large pull requests are no longer cut short.
    • The health check is bounded and does not pile up queries when the database is slow.
    • The installer works with BusyBox shells.
    • A stale Slack identity is removed automatically when Slack answers user_not_found or user_disabled. The person signs in again to relink.
  • Documentation site in English and Portuguese, with the product overview, guides for admins and members, the standwise.yml reference and the API guides.

  • Claude Code plugin with the /daily skill and the bundled MCP server.

  • standwise mcp: local MCP server with draft and confirmed submit tools, plus read tools for managers and admins.

  • standwise CLI: login, logout, whoami, draft, submit and suggestion.

  • Team digest in Slack at digest_at, with late dailies in the thread.

  • Setup page: configuration state, Slack connection, failed deliveries, API keys and webhooks.

  • Reminders by direct message at remind_at, once per person per day. remind_at must be before digest_at.

  • Blocker routing by direct message: reviewers, then CODEOWNERS, then managers.

  • Suggested blockers for pull requests without review and failing CI, visible only to the person, with signals.direct_message to also get them by direct message.

  • Standwise config check run on changes to standwise.yml.

  • Retention: webhook delivery logs after 30 days, resolved suggestions after 90 days, expired sessions removed.

  • English is the default language when none is set.

  • Linear integration: an admin connects one Linear workspace per installation on the setup page (OAuth app acting as itself, read-only scope read, encrypted tokens refreshed automatically). Deploy requirement: the api and the worker now need LINEAR_CLIENT_ID and LINEAR_CLIENT_SECRET, and fail to start without them.

  • tracker: { provider: linear, team: <KEY> } per team and members.<login>.linear (email); people are also linked by their GitHub email. tracker.provider: jira is accepted with a setup notice.

  • Your own Linear cards (card_started, card_done) in the draft, and card blockers routed to the assignees of the blocking cards, then the card's assignee, its creator or the managers.

  • Suggested blocker card_stale for cards in progress for signals.card_stale_days (default 5), visible only to the person.

API ​

Versions match the GitHub releases. During the public beta (0.x), incompatible changes are listed here before they ship; from 1.0 they are announced at least 90 days in advance. See the versioning guide.

Unreleased ​

0.7.0 — 2026-11-06 ​

0.6.0 — 2026-11-06 ​

0.5.0 — 2026-11-06 ​

  • No public API changes. The errors guide lists three codes returned only by the web app routes that link Google Chat spaces: invalid_code (422), space_already_linked (409) and too_many_spaces (409). payload_too_large also applies to the Google Chat webhook receiver.

0.4.1 — 2026-11-02 ​

  • No API changes.

0.4.0 — 2026-11-02 ​

  • Additive: dailies have a support field, a list of items like blockers (what the person needs from someone else without being blocked). POST /v1/dailies accepts it as optional, up to 10 items, defaulting to an empty list. It is always present, possibly empty, in GET /v1/org/dailies, GET /v1/org/dailies/{id}, the manager dailies and the daily.submitted webhook payload. Dailies stored before this change return an empty list. blocker.opened and digest.sent are unchanged, and there is no new scope or event. The MCP tool standcast_submit_daily accepts an optional support.
  • Additive: draft activity items for pull requests (pr_opened, pr_merged) may include branch, the pull request head branch.

0.3.1 — 2026-11-01 ​

  • No API changes.

0.3.0 — 2026-11-01 ​

Breaking: the rename to Standcast ​

  • Base URL: https://api-standcast.usefachada.dev.
  • API keys start with sck_ and session tokens with sc_. Keys and sessions created before 0.3.0 stop working; create new keys on the setup page.
  • Webhook headers are Standcast-Signature, Standcast-Event and Standcast-Delivery, with User-Agent: Standcast-Webhooks/1. Update your signature verification to read Standcast-Signature.
  • The internal confirmation header is X-Standcast-Confirmation, and the MCP tools are named standcast_*.
  • The configuration file is standcast.yml, and the check run is named "Standcast config".

New ​

  • GET /llms.txt: a plain-text index for AI agents, linking the OpenAPI document, the interactive reference and the documentation's llms.txt.
  • POST /beta receives the landing page's beta form. It is not part of the public API and is not in the OpenAPI document.
  • Deploy requirement: the api accepts LANDING_URL (https, no trailing slash, default https://standcast.usefachada.dev). The worker accepts RESEND_API_KEY, and needs BETA_EMAIL_FROM and SUPPORT_EMAIL when the key is set.

0.2.1 — 2026-10-31 ​

  • No API changes.

0.2.0 — 2026-10-31 ​

First public beta.

Agents, CLI and configuration ​

  • The interactive API reference moved from /docs/api to /reference. /docs/api answers with a permanent redirect. The documentation site moved to its own domain (DOCS_URL); /docs and /docs/* on the api redirect there. Deploy requirement: the api accepts DOCS_URL (https, no trailing slash, default https://docs.standwise.dev).
  • Linear integration. The draft activity can include card_started and card_done items for your own Linear cards (repo is the Linear team key, url the card link), and suggestions can have kind: "card_stale". Both are additive: clients must ignore kinds they do not know. Blocker ref accepts a Linear card URL.
  • standwise.yml: tracker: { provider: linear, team: <KEY> }, members.<login>.linear (an email) and signals.card_stale_days (default 5) now take effect.
  • Deploy requirement: the api and the worker need LINEAR_CLIENT_ID and LINEAR_CLIENT_SECRET and fail to start without them.
  • Setup page: Connect Linear and Reconnect Linear for admins. A failed connection returns linear_oauth_failed (HTTP 502).
  • Default language is now English when none is specified.
  • standwise mcp: local MCP server over stdio with the tools standwise_whoami, standwise_get_draft and standwise_submit_daily (confirmed by the person through elicitation, or confirmed: true as a fallback), plus the manager tools standwise_list_teams, standwise_get_digest, standwise_list_dailies and standwise_list_blockers. See the MCP guide.
  • Suggested blockers: standwise.yml accepts signals.direct_message (default false). Suggestions are visible only to the person, in their draft, and never in the organization API, the manager tools, the webhooks or the setup page.
  • standwise suggestion confirm|ignore <id> and the MCP tool standwise_decide_suggestion. The suggestions field of the draft is now a list of { id, kind, ref, since }. A repeated decision is accepted; the opposite decision returns suggestion_already_decided (HTTP 409).
  • managers entries must be GitHub logins; @org/team is rejected as a validation error.
  • Internal session routes GET /v1/manage/teams, /v1/manage/digests, /v1/manage/dailies and /v1/manage/blockers back the manager tools. They are readable by team managers and organization admins, limited to the last 90 days, and listed only in /openapi.internal.json.
  • Daily item text and link titles may no longer contain control characters (newlines and tabs included), bidirectional controls or line separators, and link titles are limited to 200 characters. Link URLs follow the same character rules and must use http or https. Invalid dailies get invalid_daily.
  • GET /health also checks the database and returns 503 with { "ok": false } when it does not answer.
  • Internal: org is required on GET /v1/draft and GET /v1/today; the documentation said it was optional.
  • Internal: the GitHub webhook receiver answers a signed body that is not JSON with 422 invalid_request instead of 400, and rejects bodies over 1 MB with 413 payload_too_large.
  • Internal: GET /v1/today returns the standup date for an organization, and POST /v1/dailies accepts an optional X-Standwise-Confirmation: human|agent header that is stored with the daily. Neither changes the public API.

Webhooks ​

  • Outbound webhooks: an organization admin registers HTTPS endpoints on the setup page and picks the events daily.submitted, blocker.opened and digest.sent. A ping test event can be sent from the setup page.
  • Every delivery is a signed POST with the headers Standwise-Signature (t=<unix seconds>,v1=<hex HMAC-SHA256>), Standwise-Event, Standwise-Delivery and User-Agent: Standwise-Webhooks/1. Failed deliveries are retried up to 8 attempts; an endpoint with 20 failed deliveries in a row is disabled.
  • The OpenAPI document has a webhooks section with the payload of each event. See the webhooks guide.

Organization API ​

  • API keys (swk_) created by an organization admin on the setup page, with the scopes teams:read, dailies:read, digests:read and blockers:read.
  • Read-only organization operations: GET /v1/org/teams, GET /v1/org/dailies, GET /v1/org/dailies/{id}, GET /v1/org/digests and GET /v1/org/blockers, paginated by cursor.
  • New error codes insufficient_scope (HTTP 403, with required_scope) and not_found (HTTP 404).

Foundation ​

  • OpenAPI 3.1 document at /openapi.json and interactive reference at /reference.
  • GET /health.
  • Rate limits with RateLimit-* and Retry-After headers; new error code rate_limited (HTTP 429).