{"slug": "harneo-a-library-for-claude-code-skills-installed-into-any-repo", "title": "Harneo – a library for Claude Code skills, installed into any repo", "summary": "Developer Ibrahim Kobeissy released Harneo v0.2, an MIT-licensed open-source harness manager that keeps Claude Code skills, commands, subagents, hooks, settings.json, MCP servers and CLAUDE.md files in one library outside projects and installs composed profiles into any repo with previewed, backed-up, reversible writes. Harneo adds a security audit on import that assigns each artifact a trust score, findings by severity and its reach (network, shell, environment variables, files), excluding risky artifacts by default, plus drift detection for projects that diverged from their profile. The tool is built and tested by the maintainer only on Linux (Arch, with Debian/Ubuntu and Fedora packages documented); macOS and Windows are untested, and the desktop app and CLI must be built from source outside Linux.", "body_md": "**A harness manager for Claude Code.**\n\n  Keep every skill, command, subagent, setting and MCP server you trust in one library,\n\n  compose profiles from it, and install the right profile into any project: previewed, backed up, reversible.\n\n[Install](#install) ·\n  [How it works](#how-it-works) ·\n  [CLI](#cli) ·\n  [Contributing](#contributing)\n\nIf you use Claude Code across many projects, your harness (`.claude/` skills, commands, subagents, hooks, `settings.json`, MCP servers, `CLAUDE.md`) ends up copied by hand from repo to repo. Copies drift, nobody remembers where a skill came from, risky ones slip in, and refitting an existing project means overwriting files you meant to keep.\n\nHarneo keeps the library **outside** your projects and ships it **into** them:\n\n- **One library** for the whole harness, not only skills: skills, commands, subagents, settings, MCP servers, output styles, workflows, plugins,`CLAUDE.md` and rules.\n- **A security audit on import.** Every artifact gets a trust score, findings by severity and what it can reach (network, shell, environment variables, files). Risky ones start excluded.\n- **Profiles.** Compose a light or heavy setup once, clone it, export it as one file.\n- **Safe writes.** Every write is previewed first, every replaced file is backed up, and removing a profile restores the originals. Losing a project's own`CLAUDE.md` or`settings.json` lines is flagged in red.\n- **Drift and cleanup.** See which projects diverged from their profile, which artifacts are outdated, unused or duplicated.\n- **Local first.** No account, no server, no analytics. A desktop app and a CLI share the same library. See[Privacy](#privacy) for what the optional Claude features send.\n\nHarneo is **v0.2, early and moving fast**. It is a personal tool shared openly, under the MIT license.\n\n| Platform | State | \n|---|---|\n| Linux | Built and tested by the maintainer (Arch; Debian/Ubuntu and Fedora packages documented). | \n| macOS | Should work, **untested by the maintainer** . Reports welcome. | \n| Windows | Should work, **untested by the maintainer** . Reports welcome. | \n\n**On Linux**, download the desktop app from the [latest release](https://github.com/ibrahimkobeissy/harneo/releases/latest) (AppImage or .deb). **On macOS and Windows**, and for the CLI on any OS, you build Harneo from source: one setup script and two build commands, below.\n\nEach [release](https://github.com/ibrahimkobeissy/harneo/releases/latest) carries the desktop app as an AppImage and a .deb (built by CI from the release tag, [ADR-003](https://github.com/ibrahimkobeissy/harneo/blob/main/docs/decisions/ADR-003-linux-packages.md)), plus `SHA256SUMS`. They are unsigned: check the download against `SHA256SUMS`.\n\n```\nsha256sum -c SHA256SUMS --ignore-missing\n\n# Any distro: the AppImage (some distros need libfuse2 / fuse2 installed first)\nchmod +x Harneo_*_amd64.AppImage\n./Harneo_*_amd64.AppImage\n\n# Debian / Ubuntu: the .deb (pulls in WebKitGTK 4.1)\nsudo apt install ./Harneo_*_amd64.deb\n```\n\nThe packages hold the desktop app only. For the `harneo` CLI, build from source below.\n\nEvery OS follows the same five steps: install the prerequisites, clone, run the setup script, build, put the two binaries on your `PATH`. The setup script shows every command it will run and asks before running any of them; `--check` (`-Check` on Windows) only reports what is missing.\n\nWhat you end up with:\n\n| Binary | What it is | \n|---|---|\n| `harneo-app` | The desktop app. | \n| `harneo` | The CLI. Same engine, same library. | \n\nBoth are written to `target/release/` (with `.exe` on Windows). No installer is built.\n\n**1. Prerequisites.** `git`, and a distro that `setup.sh` knows: Arch (pacman), Debian or Ubuntu (apt), Fedora (dnf). Other distros work if you install the [Tauri 2 Linux packages](https://v2.tauri.app/start/prerequisites/#linux) yourself; [BUILDING.md](https://github.com/ibrahimkobeissy/harneo/blob/main/BUILDING.md#linux-tested) lists them per distro.\n\n**2–4. Clone, set up, build.**\n\n```\ngit clone https://github.com/ibrahimkobeissy/harneo.git\ncd harneo\n./scripts/setup.sh                    # installs Rust, Node 22+ and WebKitGTK 4.1 and friends, after a confirmation\nnpm ci\nnpm run tauri build -- --no-bundle    # the app\ncargo build --release -p harneo-cli   # the CLI\n```\n\nIf `setup.sh` just installed Rust through rustup, open a new shell (or run `. \"$HOME/.cargo/env\"`) before building.\n\n**5. Install on your `PATH`.**\n\n```\ninstall -m 755 target/release/harneo-app target/release/harneo ~/.local/bin/\nharneo --version\nharneo-app &\n```\n\nOptional, to get Harneo in your app launcher, create `~/.local/share/applications/harneo.desktop`:\n\n```\n[Desktop Entry]\nType=Application\nName=Harneo\nComment=Harness manager for Claude Code\nExec=harneo-app\nIcon=/path/to/harneo/src-tauri/icons/icon.png\nCategories=Development;\n```\n\n**1. Prerequisites.**\n\n```\nxcode-select --install                # compilers and git\n```\n\nThen install [Homebrew](https://brew.sh); `setup.sh` uses it for the rest.\n\n**2–4. Clone, set up, build.**\n\n```\ngit clone https://github.com/ibrahimkobeissy/harneo.git\ncd harneo\n./scripts/setup.sh                    # installs rustup and node@22 through Homebrew, after a confirmation\n```\n\nHomebrew installs `node@22` and `rustup` *keg-only*: they are not on your `PATH` until you add them. `setup.sh` prints the exact line to add when that is the case; it looks like this. Add it, then open a new shell:\n\n```\necho 'export PATH=\"$(brew --prefix rustup)/bin:$(brew --prefix node@22)/bin:$HOME/.cargo/bin:$PATH\"' >> ~/.zshrc\nexec zsh\n```\n\nThen build:\n\n```\nnpm ci\nnpm run tauri build -- --no-bundle    # the app\ncargo build --release -p harneo-cli   # the CLI\n```\n\n**5. Install on your `PATH`.**\n\n```\nmkdir -p ~/.local/bin\ninstall -m 755 target/release/harneo-app target/release/harneo ~/.local/bin/\necho 'export PATH=\"$HOME/.local/bin:$PATH\"' >> ~/.zshrc   # if ~/.local/bin is not on your PATH yet\nharneo --version\nharneo-app &\n```\n\n`--no-bundle` builds a plain binary, not a `.app`, so Harneo starts from the terminal and does not appear in Launchpad. If you want a `.app`, see [Bundles](https://github.com/ibrahimkobeissy/harneo/blob/main/BUILDING.md#bundles-optional) in BUILDING.md.\n\n**1. Prerequisites.** Windows 10 or 11 with [winget](https://aka.ms/getwinget) (it ships with current versions) and [Git for Windows](https://git-scm.com/download/win) (`winget install --id Git.Git -e`). `setup.ps1` installs the rest: rustup, Node.js LTS, Visual Studio 2022 Build Tools with the C++ workload, and the WebView2 runtime.\n\n**2–4. Clone, set up, build.** In PowerShell:\n\n```\ngit clone https://github.com/ibrahimkobeissy/harneo.git\ncd harneo\npowershell -ExecutionPolicy Bypass -File scripts\\setup.ps1   # installs what is missing, after a confirmation\n```\n\nClose and reopen PowerShell so the new tools are on your `PATH`, then:\n\n```\ncd harneo\nnpm ci\nnpm run tauri build -- --no-bundle    # the app\ncargo build --release -p harneo-cli   # the CLI\n```\n\n**5. Install on your `PATH`.**\n\n``` php\n$bin = \"$env:LOCALAPPDATA\\Programs\\Harneo\"\nNew-Item -ItemType Directory -Force $bin | Out-Null\nCopy-Item target\\release\\harneo-app.exe, target\\release\\harneo.exe $bin\n[Environment]::SetEnvironmentVariable('Path', \"$([Environment]::GetEnvironmentVariable('Path','User'));$bin\", 'User')\n```\n\nOpen a new terminal, then `harneo --version` and `harneo-app`. To pin it to Start, right-click `harneo-app.exe` in that folder → *Pin to Start*.\n\nFrom the repo, after the setup script and `npm ci`:\n\n```\nnpm run tauri dev                     # the app, with hot reload\ncargo run -p harneo-cli -- --help     # the CLI\ngit pull\nnpm ci\nnpm run tauri build -- --no-bundle\ncargo build --release -p harneo-cli\n```\n\nThen copy the two binaries over the old ones, as in step 5. Your library is kept: it lives in your data folder, not next to the binaries.\n\nDelete the two binaries, then, if you want to remove your library as well, the data folder (`harneo paths` prints it):\n\n| OS | Data folder | \n|---|---|\n| Linux | `~/.local/share/io.harneo` | \n| macOS | `~/Library/Application Support/io.harneo` | \n| Windows | `%APPDATA%\\io.harneo` | \n\nHarneo writes nothing else outside the projects you point it at. Projects keep the files a profile wrote into them; remove a profile from a project in the app first to restore its originals.\n\n- **Something is missing.**`./scripts/setup.sh --check` (or`scripts\\setup.ps1 -Check` ) lists it and installs nothing.\n- **Linux: blank window or a WebKit error.** Make sure WebKitGTK**4.1** is installed (not 4.0); on NVIDIA, try`WEBKIT_DISABLE_DMABUF_RENDERER=1 harneo-app` .\n- **macOS or Windows problem.** These platforms are untested by the maintainer. Please[open an issue](https://github.com/ibrahimkobeissy/harneo/issues/new/choose) with your OS version and the full error.\n\n[BUILDING.md](https://github.com/ibrahimkobeissy/harneo/blob/main/BUILDING.md) has every prerequisite in detail, the options of the setup scripts and the contributor tools.\n\n1. \n**Import.** Point Harneo at a folder (a repo, or`~/.claude/` ) or paste a git URL, then tick the artifacts to keep. Each one gets a security audit and a trust score on arrival, and risky ones start excluded.2. \n**Library.** Browse what you imported by type, bundle or source, with tags, collections, usage and an*outdated* flag.**Security** sums up the audit: trust scores, findings by severity, and what each artifact can reach.3. \n**Profiles.** Pick artifacts (and their bundles), one Settings template and MCP servers to make a profile. Clone it to make a lighter or heavier one; export it as one file to share.4. \n**Scaffold or refit.** Scaffold writes a profile into an empty folder. Refit an existing project chooses keep, replace or delete per item, and warns in red when a replaced file loses the project's own content. Both show a dry-run preview first, back up every replaced file and write a`HARNESS.md` .5. \n**Live with it.****Projects** shows drift from the profile (re-apply, or promote the change to the library).**Cleanup** suggests unused or duplicated artifacts. Removing a profile from a project restores its originals.\n\nThe screenshots use dummy data.\n\nThe CLI uses the same library as the app, for terminals and scripts:\n\n```\nharneo scan ./some-folder                       # list the artifacts and problems in a folder\nharneo audit ./some-folder                      # trust score, findings and reach of each artifact\nharneo profiles                                 # list your profiles\nharneo scaffold --profile heavy ./my-api        # write a profile into a new project (--dry-run to preview)\nharneo status                                   # drift of every registered project\nharneo update                                   # update outdated artifacts that have no local edits\nharneo paths                                    # where your library lives\nharneo --help                                   # everything else\n```\n\nHarneo has no server and no account. The only things that ever leave your machine go through your own `claude` CLI, on your own Claude plan, and each one has a switch in **Settings**:\n\n| Feature | Default | What is sent | \n|---|---|---|\n| Confirm audit findings with Claude | **On** | For each audit finding: its rule, file, line and 3 lines of context each side (secret values replaced), plus the artifact's name and description, so Claude can tell an attack from text that defends against one. Nothing else from the artifact. `harneo audit --no-claude` skips it for one run. | \n| Ask Claude about repo layouts at import | **On** | Only when an import leaves files Harneo couldn't place: file paths, manifests and the first 40 lines of the unplaced Markdown files. Secret-looking files are listed by name, never read. | \n| Detect bundles and tags at import | Off | Artifact text, to propose bundles and tags. | \n\nIf the `claude` CLI is not installed, none of these run. Each Settings row says exactly what it sends and to whom.\n\n- **Error reports (off unless you set it up).** Harneo can report errors to a Sentry project*of your own* . Nothing is sent unless you set`HARNEO_SENTRY_DSN` ; no DSN is built in.[BUILDING.md](https://github.com/ibrahimkobeissy/harneo/blob/main/BUILDING.md#error-reporting-optional) explains what is and isn't sent.\n- **Secrets.** MCP secrets are stored only as`${VAR}` placeholders, never as values.\n\n| Goal | Command | \n|---|---|\n| Run the app (dev) | `npm run tauri dev` | \n| Build the app (release) | `npm run tauri build -- --no-bundle` | \n| Run the CLI | `cargo run -p harneo-cli -- --version` | \n| Test | `npm test` and`cargo test --workspace` | \n| Lint | `npm run lint` | \n| Fix lint and format | `npm run fix` | \n| Gate after each edit | `npm run check:fast` | \n| Gate before a change is done | `npm run check:task` | \n| Gate before merge to `main` | `npm run check:full` | \n\n`./scripts/setup.sh --dev` installs the gate tools; [CONSTRAINTS.md](https://github.com/ibrahimkobeissy/harneo/blob/main/CONSTRAINTS.md) defines what each check runs. The code is a Tauri 2 app (`src-tauri/`, React + TypeScript in `src/`) on a shared Rust core (` crates/harneo-core`) used by the app and the CLI (` crates/harneo-cli`). [CONTEXT.md](https://github.com/ibrahimkobeissy/harneo/blob/main/CONTEXT.md) is the product source of truth.\n\nBug reports, platform reports (especially macOS and Windows) and pull requests are welcome. Start with [CONTRIBUTING.md](https://github.com/ibrahimkobeissy/harneo/blob/main/CONTRIBUTING.md). Security issues: see [SECURITY.md](https://github.com/ibrahimkobeissy/harneo/blob/main/SECURITY.md), please don't open a public issue. Everyone taking part follows the [Code of Conduct](https://github.com/ibrahimkobeissy/harneo/blob/main/CODE_OF_CONDUCT.md).\n\nHarneo's security audit rules are ported from [HarnessKit](https://github.com/RealZST/HarnessKit) (Apache 2.0). See [THIRD_PARTY_NOTICES.md](https://github.com/ibrahimkobeissy/harneo/blob/main/THIRD_PARTY_NOTICES.md).\n\n[MIT](https://github.com/ibrahimkobeissy/harneo/blob/main/LICENSE) © 2026 Ibrahim Kobeissy", "url": "https://wpnews.pro/news/harneo-a-library-for-claude-code-skills-installed-into-any-repo", "canonical_source": "https://github.com/ibrahimkobeissy/harneo", "published_at": "2026-11-03 23:29:21+00:00", "updated_at": "2026-11-03 23:50:29.443319+00:00", "lang": "en", "topics": ["ai-tools", "ai-agents", "developer-tools", "ai-safety"], "entities": ["Harneo", "Claude Code", "Ibrahim Kobeissy", "Anthropic", "Tauri 2", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/harneo-a-library-for-claude-code-skills-installed-into-any-repo", "markdown": "https://wpnews.pro/news/harneo-a-library-for-claude-code-skills-installed-into-any-repo.md", "text": "https://wpnews.pro/news/harneo-a-library-for-claude-code-skills-installed-into-any-repo.txt", "jsonld": "https://wpnews.pro/news/harneo-a-library-for-claude-code-skills-installed-into-any-repo.jsonld"}}