# goosedump
`goosedump` browses, searches, converts, and compacts saved coding-agent
sessions, with project-scoped durable memory. It supports Claude Code, Codex,
Crush, Gemini CLI, Goose, OpenCode, and Pi.
Inspired by [`lllyasviel/VCC`](https://github.com/lllyasviel/VCC).
## Install
Prebuilt binaries support Linux x64/arm64, macOS arm64, and Windows x64:
```sh
npm install --global @jarkkojs/goosedump
```
Build from source (Rust 1.95+, C compiler, Node.js 18+):
```sh
cargo build --release
```
## Quick start
Session targets use `provider:session-id`. Bare IDs are not accepted.
```sh
goosedump session list --query '.provider == "pi"'
goosedump session show pi:context-id
goosedump session find pi:context-id '*database*'
goosedump session search pi:context-id 'database failure'
goosedump session compact pi:context-id
goosedump memory learn pi:context-id
goosedump memory recall 'database failure'
```
Full options: `goosedump --help` and the [manual page](man/man1/goosedump.1).
## Commands
| `session` | `list`, `show`, `find`, `search`, `compact`, `copy`, `remove` |
| `memory` | `learn`, `recall`, `list`, `show`, `forget`, `status` |
`session compact` does not write durable memory. `memory learn` creates durable
claims; recall searches the current project by default. Memory types are
`decision`, `fact`, `preference`, `procedure`, and `lesson`.
## Pi extension
The [pi-goosedump](packages/pi-goosedump/README.md) extension adds session
search, memory, session management, and compaction to Pi:
```sh
pi install npm:pi-goosedump
```
## Local models
| [gpt-oss-20b](docs/models/gpt-oss-20b.md) | Claim extraction; compact candidate filter |
| [bge-small-en-v1.5](docs/models/bge-small-en-v1.5.md) | Semantic claim retrieval |
[Text-model benchmarks](docs/models/gpt-oss-20b-benchmarks.md).
## Development
### Check
```sh
make ci
CI_MSRV=1 make ci # optional MSRV check
```
### Package
Packages the **highest semver tag reachable from HEAD** on the current branch
(not necessarily the tip). Source is built from a detached worktree at that
tag; this packaging script stays on tip so tooling fixes apply without a new
tag. Artifacts land in `npm/*/bin` and `artifacts/` on the caller tree.
Linux x64/arm64 and Windows x64 use [`cross`](https://github.com/cross-rs/cross)
and Docker. On Apple Silicon with Dory, x86_64 images run under FEX; packaging
reaps the container if FEX leaves it stuck after cargo finishes.
`darwin-arm64` builds with host `cargo` when packaging on darwin-arm64. From
Linux, the same platform uses the local osxcross image
`ghcr.io/cross-rs/aarch64-apple-darwin-cross:local` (Apple SDK; not redistributed).
```sh
make package
make package PLATFORMS='linux-x64 win32-x64'
PACKAGE_STRICT=1 make package
```
### Release
After `scripts/release.sh <version>` and pushing the tag:
```sh
make ci
PACKAGE_STRICT=1 make package
make publish
```
`make publish` uses the highest semver tag reachable from HEAD (tip may be
ahead). It publishes crates.io from that tagged tree, npm from local
`npm/*/bin` artifacts, then uploads GitLab release tarballs when `glab` is
available.
## License
| goosedump | LGPL-2.1-or-later |
| pi-goosedump | Apache-2.0 |
| GPT-OSS-20B | Apache-2.0 |
| bge-small-en-v1.5 | MIT |
Models download at run time and are not distributed with goosedump.