0.8.0
Warning
The Windows PowerShell installer published in this release cannot run.
docs/install.ps1 carries a byte order mark, which Invoke-RestMethod returns inside the string as a literal U+FEFF, so the opening line is read as an unknown command and nothing after it executes.
Both advertised forms fail.
Use 0.8.1 instead, where it is fixed.
Everything else in this release is unaffected, install.sh included.
Install
Quick install (script)
curl -fsSL https://m.canouil.dev/oboro/install.sh | bash
# or pin this exact release
curl -fsSL https://m.canouil.dev/oboro/install.sh | bash -s -- --version 0.8.0The script picks the archive for your machine, verifies it against SHA256SUMS, and installs into /usr/local/bin when writable, otherwise ~/.local/bin.
It needs bash and curl; on a minimal distribution such as Alpine, install them first with apk add bash curl.
Add --features ner for the build that also finds untold names (on Linux it needs glibc 2.39+), then fetch its model:
curl -fsSL https://m.canouil.dev/oboro/install.sh | bash -s -- --version 0.8.0 --features ner
oboro models pull # about 348 MB, once, verified against pinned hashesDocker
docker volume create oboro-vault
docker run --rm \
-v oboro-vault:/vault \
-v "$PWD":/work -w /work \
--user "$(id -u):$(id -g)" \
ghcr.io/mcanouil/oboro:0.8.0 clean contract.docxThe vault volume is not optional.
Without it the mapping between placeholders and real values disappears with the container, and the document can never be restored.
The ghcr.io/mcanouil/oboro:0.8.0-ner tag carries the ner build with the recognition model already inside the image, so untold names are found with no download and no network at run time.
A prebuilt binary
Pick the archive for your machine from the table below, then:
VERSION=0.8.0
TARGET=x86_64-unknown-linux-musl # or whichever row matches
curl -fsSLO "https://github.com/mcanouil/oboro/releases/download/${VERSION}/oboro-${VERSION}-${TARGET}.tar.gz"
curl -fsSLO "https://github.com/mcanouil/oboro/releases/download/${VERSION}/SHA256SUMS"
# Check it is what was published.
sha256sum --ignore-missing --check SHA256SUMS
tar -xzf "oboro-${VERSION}-${TARGET}.tar.gz"
install -m 0755 oboro /usr/local/bin/oboroOn macOS, shasum -a 256 --ignore-missing --check SHA256SUMS does the same job.
With Rust already installed
cargo install --git https://github.com/mcanouil/oboro --tag 0.8.0From source, with the optional features
The default binaries read .txt, .md, .docx, .xlsx and text-based .pdf, and find structured values and anything on your denylist.
They do not find names nobody told them about, and they do not read images.
Names need a -ner archive from the table below (then oboro models pull), the :0.8.0-ner image, or a source build.
Images need the Tesseract system libraries, so reading them stays a source build:
cargo build --release --features ner # names and organisations, then: oboro models pull
cargo build --release --features ocr # images and scanned pages, needs TesseractIf names are not being redacted, a default build is almost certainly why.
oboro doctor reports what any build can do.
To build the optional features without setting up the system libraries on your machine, use the devcontainer, which carries the pinned toolchain, Tesseract and the OCR libraries:
docker build -f .devcontainer/Dockerfile -t oboro-dev .devcontainer
docker run --rm -it -v "$PWD":/work -w /work -u vscode oboro-dev \
cargo build --release --features "ner,ocr"In Visual Studio Code or a GitHub Codespace, reopen the folder in the container instead.
Verify what you downloaded
Beyond the checksum, every archive carries build provenance, so you can confirm it came from this repository's workflow and not from somewhere else:
gh attestation verify "oboro-0.8.0-x86_64-unknown-linux-musl.tar.gz" \
--repo mcanouil/oboroThis tool checks the model it downloads against a pinned hash before using it.
It would be inconsistent to ask you to trust its own binaries on sight.
Which archive is which
| Archive | For |
|---|---|
x86_64-unknown-linux-musl |
Linux on Intel or AMD. Statically linked, so any distribution, glibc version or Alpine. |
aarch64-unknown-linux-musl |
Linux on ARM, including most cloud instances. Statically linked. |
aarch64-apple-darwin |
macOS on Apple silicon. |
x86_64-pc-windows-msvc |
Windows on Intel or AMD. |
x86_64-unknown-linux-gnu-ner |
Linux on Intel or AMD, with name recognition. Needs glibc 2.39+ (Ubuntu 24.04+, Debian 13+). |
aarch64-unknown-linux-gnu-ner |
Linux on ARM, with name recognition. Needs glibc 2.39+. |
aarch64-apple-darwin-ner |
macOS on Apple silicon, with name recognition. |
The -ner archives find untold names once the model is fetched with oboro models pull; the others are the smaller default build.
The Windows archive is a .zip; extract it with Expand-Archive.
Documentation
Changes
- fix: Name the agent hook
oboro uninstallwill not remove, rather than reporting everything as gone. The command sweeps the two settings filesoboro hook installwrites,.claude/settings.local.jsonfor a project and~/.claude/settings.jsonfor a user, butoboro doctorreads a third, a project's shared.claude/settings.json, so a hook pasted there by hand survived an uninstall that had just said it removed everything and went on running. That file stays untouched, since it is committed and shared with colleagues and Oboro never wrote it, but it is now listed in the uninstall report alongside the plugin and the Docker volume, andoboro doctormarks the hook as one an uninstall leaves behind. (#111) - feat: Add
docs/install.ps1, the Windows counterpart toinstall.sh:powershell -ExecutionPolicy ByPass -c "irm https://m.canouil.dev/oboro/install.ps1 | iex"downloads thex86_64-pc-windows-msvcrelease archive, verifies it againstSHA256SUMS(and against build provenance withOBORO_VERIFY_PROVENANCE=1), and installs into%LOCALAPPDATA%\Programs\oboro\bin, adding it to the userPATHif missing; no administrator rights needed. Arm64 and--features ner/--features ocrare refused, since no prebuilt Windows build carries them, andcargo build --release --features <name>is pointed at instead. Published alongsideinstall.shindocs/_quarto.yml, with anInvoke-ScriptAnalyzerlint job onwindows-latest. (#109) - feat: Add
oboro uninstall, which removes everything the tool wrote: completion scripts, the agent hooks and skill in both scopes, the vault, the recognition model, and the binary itself. It prints everything that would go and asks to confirm;--dry-runstops after printing,--yesskips the prompt, and--keep-vaultleaves the vault and its key in place. A settings file keeps everything but Oboro's own hook, ending as{}rather than being deleted, and the running binary removes itself on macOS and Linux; on Windows, which locks a running image, the path and the command to finish the job are printed instead. (#108)