Commit log

f74a85f chore(tools/fetch): improve jq fetch integration

Christian Rocha created

2c6336f chore(tests): re-record vhs cassettes

Christian Rocha created

a38fe8e chore(jq,fetch): allow fetch to pass into jq, improve jq skill

Click to expand commit body
By allowing fetch to send results directly into jq we can prevent a lot
of tokens from entering the context, and compress several tool calls.

Christian Rocha 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

52e3030 chore(deps): update fantasy and catwalk

Andrey Nering created

c83a6d8 test: re-record vcr cassettes

Andrey Nering created

fd18c38 fix(system-prompt): remove "portuguese" as example

Click to expand commit body
This confuses dumber models, that might respond in Portuguese even when
the user prompt was in English.

This is more common for small models. We already made this fix on the
title generation prompt, we're now just porting to the coder prompt.

* Closes #2627
* Follow-up #2497

Andrey Nering created

a210bfb chore(legal): @KimBioInfoStudio has signed the CLA

Charm created

aea4e99 chore: bump bubbletea to v2.0.5 to fix tea_debug.log file issue

Ayman Bagabas created

9847be2 v0.57.0

Andrey Nering created

7a6a179 refactor: simplify skills parsing and improve discovery visibility (#2350)

huaiyuWangh created

ca69095 chore(deps): update catwalk

Andrey Nering created

8e3263d Merge pull request #2615 from charmbracelet/hotfix

Click to expand commit body
fix(agent): validate tool calls + strip tags from titles

Christian Rocha created

7a358f9 chore(deps): bump fantasy for tool call integrity fix

Christian Rocha created

3e8c148 chore(agent): move filter logic into a function

Christian Rocha created

c41a1a0 fix(agent): validate tool call/results + strip tags from titles

Click to expand commit body
This fixes a case where tool results could not have a matching tool
call, resulting in corrupted sessions.

There's also an interleaved fix for trimming rogue "</think>" tags from
session titles while we're at it.

Christian Rocha created

40b7cdd fix(ui): format code in ui.go

Ayman Bagabas created