Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 31 additions & 39 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
# v0.4.7: tag-driven release pipeline.
#
# Push a `v0.4.x` tag and this workflow builds release binaries
# for Linux (x86_64), macOS (x86_64 + arm64), and Windows
# (x86_64), then uploads them as assets on the corresponding
# GitHub Release.
# Push a `vX.Y.Z` tag and this workflow builds release binaries
# for Linux (x86_64), macOS (x86_64 + arm64), and Windows (x86_64),
# then uploads them as assets on the corresponding GitHub Release.
#
# The pipeline runs `kimetsu doctor --skip-mcp` on every artifact
# before uploading — so a broken build fails the release, not the
# user. Manual `cargo publish` to crates.io is a follow-up step
# (we don't auto-publish from CI to keep approvals explicit).
#
# Two artifact sets per platform:
# * `kimetsu-<version>-<target>-lean` — default Cargo build,
# NoopEmbedder + FTS-only retrieval. Smallest binary, no model
# download on install.
# * `kimetsu-<version>-<target>-embeddings` — built with
# `--features embeddings`. Larger binary; fastembed-rs +
# ONNX runtime linked statically when possible.
# * `kimetsu-<version>-<target>-lean` — built with
# `--no-default-features`: NoopEmbedder + FTS-only retrieval.
# Smallest binary, no model download on install.
# * `kimetsu-<version>-<target>-embeddings` — default build.
# Larger binary; fastembed-rs + ONNX runtime linked statically
# when possible.

name: release

Expand All @@ -42,21 +41,17 @@ jobs:
matrix:
include:
# Linux
- { os: ubuntu-latest, target: x86_64-unknown-linux-gnu, flavor: lean, extra_features: "" }
- { os: ubuntu-latest, target: x86_64-unknown-linux-gnu, flavor: embeddings, extra_features: "--features embeddings" }
- { os: ubuntu-latest, target: x86_64-unknown-linux-gnu, flavor: lean, extra_features: "--no-default-features" }
- { os: ubuntu-latest, target: x86_64-unknown-linux-gnu, flavor: embeddings, extra_features: "" }
# macOS Intel
- { os: macos-15-intel, target: x86_64-apple-darwin, flavor: lean, extra_features: "--no-default-features" }
- { os: macos-15-intel, target: x86_64-apple-darwin, flavor: embeddings, extra_features: "" }
# macOS Apple Silicon
#
# v0.4.11: x86_64-apple-darwin (macos-13) runners were
# dropped from the matrix. As of late 2026 those runners
# are deprecated + under-provisioned on GitHub's free
# tier and the jobs queue indefinitely. Apple Silicon
# is the dominant Mac architecture now; users on Intel
# Macs can `cargo install kimetsu-cli` from source.
- { os: macos-14, target: aarch64-apple-darwin, flavor: lean, extra_features: "" }
- { os: macos-14, target: aarch64-apple-darwin, flavor: embeddings, extra_features: "--features embeddings" }
- { os: macos-14, target: aarch64-apple-darwin, flavor: lean, extra_features: "--no-default-features" }
- { os: macos-14, target: aarch64-apple-darwin, flavor: embeddings, extra_features: "" }
# Windows
- { os: windows-latest, target: x86_64-pc-windows-msvc, flavor: lean, extra_features: "" }
- { os: windows-latest, target: x86_64-pc-windows-msvc, flavor: embeddings, extra_features: "--features embeddings" }
- { os: windows-latest, target: x86_64-pc-windows-msvc, flavor: lean, extra_features: "--no-default-features" }
- { os: windows-latest, target: x86_64-pc-windows-msvc, flavor: embeddings, extra_features: "" }
steps:
- uses: actions/checkout@v4

Expand All @@ -72,10 +67,12 @@ jobs:

- name: build kimetsu-cli
run: |
cargo build --release -p kimetsu-cli --target ${{ matrix.target }} ${{ matrix.extra_features }}
cargo build --release --locked -p kimetsu-cli --target ${{ matrix.target }} ${{ matrix.extra_features }}

- name: smoke-test built binary (doctor --skip-mcp)
shell: bash
env:
KIMETSU_USER_BRAIN: "0"
run: |
if [ "${{ matrix.flavor }}" = "lean" ]; then
BINARY="target/${{ matrix.target }}/release/kimetsu"
Expand All @@ -85,7 +82,7 @@ jobs:
[ "${{ runner.os }}" = "Windows" ] && BINARY="${BINARY}.exe"
"$BINARY" --version
# doctor expects a workspace; the cloned repo is one.
"$BINARY" doctor --skip-mcp --workspace . || true
"$BINARY" doctor --skip-mcp --workspace .

- name: package archive
shell: bash
Expand All @@ -98,7 +95,11 @@ jobs:
else
cp "target/${{ matrix.target }}/release/kimetsu" "dist/$NAME/"
fi
cp LICENSE-MIT LICENSE-APACHE README.md "dist/$NAME/"
MIT_LICENSE="LICENSE-MIT"
APACHE_LICENSE="LICENSE-APACHE"
[ -f "$MIT_LICENSE" ] || MIT_LICENSE="docs/LICENSE-MIT"
[ -f "$APACHE_LICENSE" ] || APACHE_LICENSE="docs/LICENSE-APACHE"
cp "$MIT_LICENSE" "$APACHE_LICENSE" README.md "dist/$NAME/"
cd dist
if [ "${{ runner.os }}" = "Windows" ]; then
powershell -Command "Compress-Archive -Path $NAME -DestinationPath $NAME.zip"
Expand Down Expand Up @@ -164,23 +165,12 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

publish-crates:
# v0.4.9: serial cargo publish to crates.io after the binary
# Serial cargo publish to crates.io after the binary
# matrix + GH Release succeed. Gated on:
# (a) tag push (handled by `if`)
# (b) the `release` job succeeding (handled by `needs`)
# (c) CARGO_REGISTRY_TOKEN secret being set on the repo
#
# v0.4.10: kimetsu-harbor-rs is intentionally NOT published.
# It's marked `publish = false` in its Cargo.toml because:
# * `kimetsu-cli` (the user-facing binary that powers
# `cargo install kimetsu-cli`) doesn't depend on it.
# * It's a Terminal-Bench operator tool, still iterating
# internally; publishing implies backward-compat we don't
# want to commit to yet.
# The `kimetsu-harbor-agent` binary still ships in every
# GH Release archive (built by the lean matrix above), so
# benchmark users can grab it from there.
#
# Crate publish order matches the user-facing dep DAG:
# kimetsu-core (no kimetsu deps)
# kimetsu-brain (needs core)
Expand Down Expand Up @@ -266,5 +256,7 @@ jobs:
echo "Users can now install with:" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
echo "cargo install kimetsu-cli" >> $GITHUB_STEP_SUMMARY
echo "cargo install kimetsu-cli --features embeddings" >> $GITHUB_STEP_SUMMARY
echo "cargo install kimetsu-cli --no-default-features # lean build" >> $GITHUB_STEP_SUMMARY
echo "kimetsu update --check" >> $GITHUB_STEP_SUMMARY
echo "kimetsu uninstall --dry-run" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
13 changes: 7 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ resolver = "3"
# everything below except the per-crate `description`, `keywords`,
# and `categories` which live in each `[package]` block since
# crates.io enforces them per crate.
version = "0.7.2"
version = "0.7.3"
edition = "2024"
# Rust ecosystem dual-license (matches tokio, serde, fastembed-rs,
# etc.). UNLICENSED would block crates.io entirely.
Expand Down
40 changes: 28 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,21 +81,22 @@ detection? See **[docs/HOW-KIMETSU-WORKS.md](docs/HOW-KIMETSU-WORKS.md)**.
Kimetsu is a single Rust binary. Pick your flavor:

```bash
# Leanfast lexical (FTS) retrieval, no model download (~30s build)
# Defaultsemantic search enabled (fastembed + ONNX; first run downloads BGE-small)
cargo install kimetsu-cli

# With local semantic search — pulls fastembed + ONNX, first run
# downloads BGE-small (~67 MB). Cosine retrieval + conflict detection light up.
cargo install kimetsu-cli --features embeddings
# Lean — fast lexical (FTS) retrieval, no model download
cargo install kimetsu-cli --no-default-features

# From source
cargo install --path crates/kimetsu-cli # add --features embeddings if you like
cargo install --path crates/kimetsu-cli # add --no-default-features for lean
```

Prefer not to touch the Rust toolchain? Pre-built binaries for
**Linux / macOS / Windows** ship on every
[GitHub Release](https://github.com/RodCor/kimetsu/releases) — drop one in
`~/.local/bin`.
[GitHub Release](https://github.com/RodCor/kimetsu/releases). Extract the archive and put
`kimetsu` / `kimetsu.exe` somewhere on `PATH` (`~/.local/bin`, `/usr/local/bin`,
or `%USERPROFILE%\.cargo\bin`). macOS prebuilt archives are published for both
Intel and Apple Silicon.

Confirm it's healthy:

Expand All @@ -104,6 +105,23 @@ kimetsu --version
kimetsu doctor # checks paths, brain.db, embedder, MCP, bridge
```

Check for updates:

```bash
kimetsu update --check
kimetsu update # updates discovered kimetsu binaries on PATH/current install
kimetsu uninstall --dry-run
kimetsu uninstall --yes # removes discovered kimetsu binaries
```

`kimetsu update` downloads the matching GitHub Release archive for your
platform and flavor, then updates the current executable plus verified
`kimetsu` copies in known install locations such as Cargo bin, `~/.local/bin`,
`/usr/local/bin`, or `%USERPROFILE%\.cargo\bin`. It does not scan the whole
disk. `kimetsu uninstall` removes those same verified binaries; it leaves
project `.kimetsu/` directories and the user brain intact unless you explicitly
pass `--delete-user-data`.

**Prerequisites:** Rust 1.85+ (stable) and a Claude or OpenAI credential
(`CLAUDE_CODE_OAUTH_TOKEN` or `ANTHROPIC_API_KEY` or `OPENAI_API_KEY`). That's it for chat — Docker,
Harbor, and Python are only needed for benchmark runs.
Expand Down Expand Up @@ -154,8 +172,7 @@ kimetsu brain memory top # most useful memories so far
| **MCP sidecar** | `kimetsu mcp serve` exposes the brain to any MCP host as ~18 tools. |

Built as a small Rust workspace (`kimetsu-cli`, `-chat`, `-agent`, `-brain`,
`-core`, plus a benchmark-only Harbor adapter). Lint + tests run clean on every
change.
and `-core`). Lint + tests run clean on every change.

---

Expand All @@ -171,6 +188,5 @@ change.

## License

Dual-licensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE) — your
choice. The same dual license used across the Rust ecosystem (tokio, serde,
fastembed-rs).
Dual-licensed under [MIT](docs/LICENSE-MIT) or [Apache-2.0](docs/LICENSE-APACHE) — your
choice.
4 changes: 2 additions & 2 deletions crates/kimetsu-agent/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ embeddings = ["kimetsu-brain/embeddings"]

[dependencies]
blake3.workspace = true
kimetsu-brain = { path = "../kimetsu-brain", version = "0.7.2" }
kimetsu-core = { path = "../kimetsu-core", version = "0.7.2" }
kimetsu-brain = { path = "../kimetsu-brain", version = "0.7.3" }
kimetsu-core = { path = "../kimetsu-core", version = "0.7.3" }
regex.workspace = true
reqwest.workspace = true
rusqlite.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/kimetsu-brain/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ blake3.workspace = true
# supports BGE-M3 + Jina-v2-base-code alongside BGE-small.
fastembed = { version = "5", optional = true }
ignore.workspace = true
kimetsu-core = { path = "../kimetsu-core", version = "0.7.2" }
kimetsu-core = { path = "../kimetsu-core", version = "0.7.3" }
# v0.4.5: regex backs the secret-redaction patterns in
# `kimetsu_brain::redact`. The crate is already a workspace pin
# elsewhere; we just opt this crate into it now.
Expand Down
6 changes: 3 additions & 3 deletions crates/kimetsu-chat/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ embeddings = ["kimetsu-brain/embeddings"]
# surface, not a benchmark harness.

[dependencies]
kimetsu-agent = { path = "../kimetsu-agent", version = "0.7.2" }
kimetsu-brain = { path = "../kimetsu-brain", version = "0.7.2" }
kimetsu-core = { path = "../kimetsu-core", version = "0.7.2" }
kimetsu-agent = { path = "../kimetsu-agent", version = "0.7.3" }
kimetsu-brain = { path = "../kimetsu-brain", version = "0.7.3" }
kimetsu-core = { path = "../kimetsu-core", version = "0.7.3" }
base64.workspace = true
crossterm.workspace = true
reqwest.workspace = true
Expand Down
9 changes: 5 additions & 4 deletions crates/kimetsu-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,13 @@ path = "src/main.rs"

[dependencies]
clap.workspace = true
kimetsu-agent = { path = "../kimetsu-agent", version = "0.7.2" }
kimetsu-brain = { path = "../kimetsu-brain", version = "0.7.2" }
kimetsu-chat = { path = "../kimetsu-chat", version = "0.7.2" }
kimetsu-core = { path = "../kimetsu-core", version = "0.7.2" }
kimetsu-agent = { path = "../kimetsu-agent", version = "0.7.3" }
kimetsu-brain = { path = "../kimetsu-brain", version = "0.7.3" }
kimetsu-chat = { path = "../kimetsu-chat", version = "0.7.3" }
kimetsu-core = { path = "../kimetsu-core", version = "0.7.3" }
# v0.4.6: `kimetsu doctor` serializes its report struct so --json
# output can be piped into CI / hooks.
reqwest.workspace = true
serde.workspace = true
serde_json.workspace = true
tracing.workspace = true
Expand Down
Loading
Loading