Commit log

b612a39 chore(legal): @dshumphr has signed the CLA

Charm created

95fcd88 fix: show attribution setting on `crush_info` tool (#2594)

Andrey Nering created

9de745c chore(legal): @gurnben has signed the CLA

Charm created

a2081e1 feat(config): support `HYPER_API_KEY` for hyper auth (#2583)

Click to expand commit body
Use `HYPER_API_KEY` to configure Hyper for non-interactive workflows and
bypass OAuth-driven setup when the environment variable is present.

💘 Generated with Crush

Assisted-by: Kimi K2.5 via Crush <crush@charm.land>

Andrey Nering created

56e2ff6 v0.56.0

Andrey Nering created

baae1b6 fix(lsp): clone slice to avoid mutation

Andrey Nering created

6f7762f feat(tools/crush_info): add skill status

Christian Rocha created

816453b feat(tools/crush_info): staleness detection and auto-reload

Click to expand commit body
Ensures crush_info reflects fresh config after edits and detects
external/manual config file modifications.

Christian Rocha created

269bc30 feat(tools/crush_info): handle config staleness

Click to expand commit body
Track config file staleness and expose dirty/changed/missing state so
crush_info can warn when in-memory config is outdated after on-disk
edits. This also makes reload use freshly swapped config state before
model/agent setup to avoid stale runtime wiring.

💘 Generated with Crush

Assisted-by: Kimi-K2.5 via Crush <crush@charm.land>

Christian Rocha created

77fcc76 feat(tools): add crush_logs tool for reading application logs

Click to expand commit body
Implements a tool that reads Crush's own log files and returns
formatted entries in compact text format. Supports:

- Tail-style reading (last N entries, default 50, max 100)
- Sensitive value redaction (token, secret, api_key, etc.)
- JSON value formatting with proper escaping
- Chronological ordering (oldest first)
- Graceful handling of missing/empty files and malformed lines

Approximate overhead:

• Tool definition cost (always in prompt): ~1,000 bytes ≈ 250 tokens
• Per invocation response (50 lines): ~4,000 bytes ≈ 1,000 tokens
• Per invocation response (100 lines): ~8,000 bytes ≈ 2,000 tokens

💖 Generated with Crush

Assisted-by: Kimi-K2.5 via Crush <crush@charm.land>

Christian Rocha created

df39b64 feat(tools): add crush_info tool implementation files

Click to expand commit body
Approximate overhead:

• Tool definition cost (always in prompt): ~500 bytes ≈ 130 tokens
• Per invocation response (typical): ~1,500 bytes ≈ 375 tokens
• Per invocation response (worst-case): ~3,000 bytes ≈ 750 tokens

💘 Generated with Crush

Assisted-by: Kimi-K2.5 via Crush <crush@charm.land>

Christian Rocha created

2772734 feat(tools): crush_info tool for readling live config

Christian Rocha created

18823f3 docs(readme): mention `AVIAN_API_KEY` (#2557)

avianion created

5361da0 chore(deps): update catwalk

Andrey Nering created

cabcc0e chore(deps): bump the all group with 3 updates (#2564)

Click to expand commit body
Bumps the all group with 3 updates: [charm.land/catwalk](https://github.com/charmbracelet/catwalk), [github.com/go-git/go-git/v5](https://github.com/go-git/go-git) and [modernc.org/sqlite](https://gitlab.com/cznic/sqlite).


Updates `charm.land/catwalk` from 0.33.2 to 0.34.3
- [Release notes](https://github.com/charmbracelet/catwalk/releases)
- [Commits](https://github.com/charmbracelet/catwalk/compare/v0.33.2...v0.34.3)

Updates `github.com/go-git/go-git/v5` from 5.17.1 to 5.17.2
- [Release notes](https://github.com/go-git/go-git/releases)
- [Commits](https://github.com/go-git/go-git/compare/v5.17.1...v5.17.2)

Updates `modernc.org/sqlite` from 1.48.0 to 1.48.1
- [Changelog](https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md)
- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.48.0...v1.48.1)

---
updated-dependencies:
- dependency-name: charm.land/catwalk
  dependency-version: 0.34.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: github.com/go-git/go-git/v5
  dependency-version: 5.17.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: modernc.org/sqlite
  dependency-version: 1.48.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

fccf061 fix(app): derive shutdown context from `context.Background()` instead of cancelled `globalCtx` (#2242)

M1xA created

85445d7 fix(ui): subscribe to `app.LSPEvent` instead of `workspace.LSPEvent` (#2565)

Click to expand commit body
Fix LSP UI display broken in v0.55.0. The UI was still subscribing
to workspace.LSPEvent after the event type was moved to the app
package, causing LSP status to never update in the UI.

Changes:
- internal/ui/model/ui.go: Subscribe to app.LSPEvent; use app.GetLSPStates()
- internal/ui/model/lsp.go: Use app.LSPClientInfo type for LSPInfo embedding
  and sorting (fields are identical to workspace.LSPClientInfo)

Fixes charmbracelet/crush#2560

Chris Chen created

2e07c0d style: standardize log capitalization

Andrey Nering created

fa15658 fix(schema): fix `crush.json` schema generation (#2574)

Bruno Krugel created

6e854b4 chore: update unauthorize message

Andrey Nering created

59943a8 feat: open Hyper auth dialog automatically on unauthorized error

Click to expand commit body
When Hyper returns a 401, publish a TypeReAuthenticate notification so the
UI opens the OAuth dialog. Also fix coordinator.isUnauthorized to recognize
hyper.ErrUnauthorized for auto-refresh.

💘 Generated with Crush

Assisted-by: Z.ai: GLM 5.1 via Crush <crush@charm.land>

Andrey Nering created

85b66c3 chore: auto-update files

Charm created

1b7a457 chore: add custom error and message for hyper unauthorized (#2577)

Andrey Nering created

f1c7fe4 chore(legal): @smlx has signed the CLA

Charm created

1bb4627 chore(skills/crush-config): improve crush config skill (#2556)

Christian Rocha created

d645f98 v0.55.1

Andrey Nering created

741c18a fix: support local models with unknown max_tokens and context window (#2554)

Click to expand commit body
Two fixes for local/custom model compatibility (LM Studio, Ollama, llama.cpp):

1. Don't send MaxOutputTokens when it's 0. Custom models not in the
   catwalk providers list have DefaultMaxTokens=0, which gets sent as
   max_tokens:0 in the API request. LM Studio rejects this with
   "maxPredictedTokens does not satisfy the schema". Fix: only send
   the field when the value is positive.

2. Skip auto-summarize when ContextWindow is 0. Custom models have
   ContextWindow=0, making remaining tokens negative, which immediately
   triggers summarize after the first response. The session resets with
   "previous session was interrupted because it got too long" even for
   short conversations. Fix: skip the check when context window is
   unknown.

Fixes #1218 (regression), relates to #1583, #1591

Kartik33 created

6d046c2 chore(legal): @shahidshabbir-se has signed the CLA

Charm created

d10e765 chore(legal): @avianion has signed the CLA

Charm created

c87fefb chore(legal): @talha7k has signed the CLA

Charm created

71b11bb chore(legal): @Kartik33 has signed the CLA

Charm created

3befaaa v0.55.0

Andrey Nering created

7572ce1 chore: auto-update files

Charm created

2832d52 feat(skills): builtin skills + skill disabling + crush-config builtin (#2466)

Christian Rocha created

28f2087 Merge pull request #2455 from charmbracelet/server-client-2

Click to expand commit body
Feat/Refactor: Server Client architecture and API

Ayman Bagabas created

e3df84e refactor: modernize (#2548)

Bruno Krugel created

ed71633 ci(lint): fix yet another lint issue

Andrey Nering created

c88c941 ci: make lint green

Andrey Nering created

2182fc4 fix: update UI tests to use test workspace

Ayman Bagabas created

f3fe760 Merge branch 'main' into server-client-2

Ayman Bagabas created

de04fc2 chore: auto-update files

Charm created

206aecf refactor: centralize user config path in a single func `home.Config()` (#2542)

Andrey Nering created

782d4dc chore(legal): @MrRolie has signed the CLA

Charm created

6054a93 v0.54.0

Andrey Nering created

b68823b feat(cli/session): show skill metadata (#2541)

Christian Rocha created

480e0f1 chore(deps): update catwalk

Andrey Nering created

3412194 fix(ls): respect git's `core.excludesfile` config if set (#2314)

Click to expand commit body
See: https://git-scm.com/docs/gitignore

Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>

Martin and Andrey Nering created

bf21a59 feat(init): elicit control/data flow, arch descs (#1790)

Amolith created

d161cbc feat(init-cmd): mention progressive disclosure (#1786)

Click to expand commit body
I found Crush was often both too verbose and too terse than I'd like in
different ways when generating the AGENTS.md. This is an attempt to
improve the relevancy of the information it mentions.

As just one example, tabs vs spaces is obvious from the first file read,
so mentioning that style preference in AGENTS.md just wastes tokens.
Since adding this line, I haven't noticed it including trivial details
like that!

Though I've been using this since Dec 20 and liking it, I've mostly used
it and had good results with Claude models. I've not tried it with GPT
or GLM or others yet.

Amolith created

cda2719 fix(commands): add timeout context for MCP prompt retrieval (#2517)

Click to expand commit body
The GetMCPPrompt function was using context.Background() without any
timeout, which could cause the request to hang indefinitely. Since
tea.Cmd doesn't support context passing, we add a 30-second timeout
as a safeguard, consistent with the pattern used in OAuth modules.

Assisted-by: GLM-5 via Crush <crush@charm.land>

iceymoss created