Commit log

59927d5 chore(legal): @ne275 has signed the CLA

Charm created

79e5a6f v0.62.0

Andrey Nering created

7437d2b fix: silence unless warning about non-existent skill paths

Andrey Nering created

bbab2bc chore: auto-update files

Charm created

7cc020b chore: update catwalk to new domain (#2680)

Andrey Nering created

f6a8854 chore(legal): @iuga has signed the CLA

Charm created

ebf0c1c chore(deps): update fantasy and catwalk

Andrey Nering created

b0b5c14 chore: remove CODEOWNERS

Andrey Nering created

da33883 fix: reduce token usage, use short tool descriptions by default (#2679)

Click to expand commit body
* Follow-up of #2592

We've been testing this for 2 weeks, and it's working great.
This is a very useful enhancement to reduce token usage, cost, and make
smaller models behave better.

This is particularly significant for local models. These models are tiny,
and with a long enough system prompt they have little context window left
for work.

It's still possible to have the old behavior by setting:

    export CRUSH_SHORT_TOOL_DESCRIPTIONS=0

Andrey Nering created

4d7c55e test: re-record vcr cassettes

Andrey Nering created

9d555a7 fix: reduce `fetch` and `view` tools truncation size to 100KB

Click to expand commit body
Some models like Kimi K2.5 and GLM 5 simply don't handle well that many
content. When a big page or JSON API is fetch, it can break Crush
sessions.

We're drastically reducing the truncation size here, to 1/10 of what we
had before. It may look too much at first look, but 100KB it's actually
very reasonable. For example, the entire Task guide, which is
significantly large, is only 61KB:

https://taskfile.dev/docs/guide.md

Andrey Nering created

9a20f78 chore(legal): @axeprpr has signed the CLA

Charm created

d3f6d98 fix(lsp): mitigate stale diagnostics

Click to expand commit body
* fix(lsp): mitigate stale diagnostics

* fix(lsp): log warning when workspace change notification fails

💘 Generated with Crush

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

* test(lsp): add unit tests for diagnostics settling behavior

💘 Generated with Crush

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

* refactor(lsp): remove blocking diagnostic wait from post-edit notifications

💘 Generated with Crush

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

* chore: add async diagnostic waits

* Update internal/agent/tools/diagnostics.go

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

* fix(lsp): stop timer leaks in WaitForDiagnostics

Replace time.After with time.NewTimer + defer Stop() to prevent
unreclaimable timer allocations on early returns.

💘 Generated with Crush

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

---------

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

Christian Rocha and Andrey Nering created

f7beb12 feat: generally render output that looks like a diff as a diff (#2607)

Click to expand commit body
For example, the GitHub MCP server can fetch diffs. This makes those
diffs render as such, rather than just showing their raw output.

Christian Rocha created

7edf395 v0.61.1

Andrey Nering created

3474733 ci: use stable goreleaser action

Andrey Nering created

82d373d chore(legal): @gavmor has signed the CLA

Charm created

ea50d10 v0.61.0

Andrey Nering created

0a86d5f refactor(skills): strip implementation hints from crush-owned descriptions

Click to expand commit body
Descriptions should describe when a skill applies, not how it does its
job. Leaving language like "using go doc", "the jq command-line
processor", etc. in the trigger encourages the model to guess its way
through without reading SKILL.md.

Christian Rocha created

e64db33 feat(prompt): require loading appropriate skills before acting

Click to expand commit body
Models frequently skipped viewing a skill's SKILL.md and inferred its
behavior from the description alone; making the load mandatory in
<critical_rules> prevents LLMs from taking that shortcut.

Christian Rocha created

2da70c1 feat(skills): log skill activation to help diagnose load failures

Christian Rocha created

3138c8b fix: use same chroma formatter as diffview for markdown (#2656)

Andrey Nering created

0e9e0a6 chore(deps): bump the all group with 2 updates (#2659)

dependabot[bot] created

f15c2d7 chore(deps): bump the all group with 6 updates (#2660)

dependabot[bot] created

be3e81f chore(legal): @enrell has signed the CLA

Charm created

3af50fd chore(legal): @pi128 has signed the CLA

Charm created

e74253e fix(oauth): fix copy to clipboard on terminals that don't support osc52 (#2642)

Click to expand commit body
For example: Apple Terminal.

Andrey Nering created

2f32c9b feat: enable progress bar on iterm2 (#2641)

Andrey Nering created

f1a931d v0.60.0

Andrey Nering created

ea86101 feat(hyper): use openai-compatible endpoint for hyper (#2640)

Andrey Nering created

ce34984 v0.59.0

Andrey Nering created

73fec04 ci: fix test race condition

Click to expand commit body
Do not run these two new tests in parallel.

Andrey Nering created

52dcef6 ci: only run `build` and `lint` workflows once in pull requests

Andrey Nering created

8bab8b3 test: re-record vcr cassettes

Andrey Nering created

f546a07 fix(prompt): remind coder to follow `<git_commits>` format on commit

Click to expand commit body
💘 Generated with Crush

Assisted-by: Claude Opus 4.7 via Crush <crush@charm.land>

Andrey Nering created

e0a3f4d chore: `task fmt`

Andrey Nering created

fa50f36 test: re-record vcr cassettes

Andrey Nering created

3773b23 feat(shell): add jq as a bash builtin + a jq skill for it

Click to expand commit body
Also, two local skills now exist for Crush development:

* builtin-skills, for adding new builtin skills
* shell-builtins, for adding new shell builtins

Christian Rocha created

b37649e feat(ui): add skills discovery status to sidebar and landing page (#2384)

Click to expand commit body
- Display loaded/errored skills in sidebar and landing page
- Use pubsub event to carry skill states directly to UI, avoiding
  global mutable state
- Subscribe to skills discovery events via broker, consistent with
  MCP/LSP patterns
- Rename State to DiscoveryState for clarity

huaiyuWangh created

e8f5e20 feat: show progress bar on rio terminal (#2624)

Andrey Nering created

4b3dff3 test: run migration setup once to avoid race condition

Andrey Nering created

076cb1c test: re-record vcr cassettes

Andrey Nering created

4e66ada test: simplify integration tests, run for a single provider / model

Click to expand commit body
It takes a lot of time to re-record these VCRs for so many models.
Sometimes they fail intermittently, and you need to manually re-record
again and again until it works.

Let's keep a single provider and models which should work well enough for
us.

Andrey Nering created

53c9774 test: reduce amount of logs print on `go test -v`

Andrey Nering created

1528c82 fix: inject synthetic tool_result for orphaned tool_use on session resume (#2622)

Click to expand commit body
When a session is interrupted mid-tool-call (Ctrl-C, network timeout),
the assistant message contains a tool_use block but no corresponding
tool_result is ever recorded. On session resume, the Anthropic API
rejects the conversation with invalid_request_error, permanently
locking the session.

The existing filterOrphanedToolResults handles the inverse case
(tool_result without a matching tool_use). This commit adds the
symmetric fix: during preparePrompt, detect tool_use IDs that have
no matching tool_result and inject a synthetic error tool_result so
the API accepts the history and the session can continue.

Co-authored-by: Christian Rocha <christian@rocha.is>
Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>

Kim Yann , Christian Rocha , and Andrey Nering created

1e0e816 chore: bump bubbletea to v2.0.6 to fix wide char issue

Click to expand commit body
See: https://github.com/charmbracelet/ultraviolet/pull/109

Ayman Bagabas created

f61ae45 chore(legal): @taigong12 has signed the CLA

Charm created

f1460a4 v0.58.0

Andrey Nering created

bcf863c chore: auto-update files

Charm created

e048e71 feat: add opencode zen and opencode go support

Andrey Nering created