Install

Install the Bun CLI package.

Current CLI for macOS, Linux, and Windows. MIT-licensed, zero telemetry, and local by default. No account required; configured HTTP model servers and optional gno.sh publishing are explicit network boundaries.

$bun install -g @gmickel/gno
License
MIT
Runtime
Bun ≥1.3.0
Platforms
macOS · Linux · Windows
Telemetry
None

Don’t have Bun yet? Install it with bun.sh, then come back and run the command above. GNO requires Bun 1.3.0 or newer.

Per-platform

Pick your operating system.

The install command is the same everywhere — these are the extras specific to each platform.

macOS

Apple Silicon and Intel. Vector search needs the Homebrew SQLite.

  1. Install GNO
    bun install -g @gmickel/gno
  2. Install SQLite (for vector search)
    brew install sqlite3
  3. Set up + prove a folder
    gno setup ~/notes --name notes

Linux

x86_64 and arm64. Bun runs the installed CLI package.

  1. Install GNO
    bun install -g @gmickel/gno
  2. Set up + prove a folder
    gno setup ~/notes --name notes

Windows

windows-x64 supported. arm64 not yet.

  1. Install GNO
    bun install -g @gmickel/gno
  2. Set up + prove a folder
    gno setup ~/notes --name notes

Verify

Confirm GNO is ready to go.

gno setup bootstraps an empty install, indexes the folder, and returns only after a corpus-derived BM25 probe finds an exact local source. Semantic work continues independently.

gno --version
gno setup ~/notes --name notes
gno status
  • gno --version — prints the installed release.
  • gno setup — creates or reuses one canonical collection, proves an exact gno:// result, and records private lexical and semantic receipts. Safe to rerun.
  • gno status — shows the active config and collection summary plus the same activation state, without loading models or starting connector runtimes. Semantic pending does not erase a passed lexical proof.

Cloned a repository with .gno/index.yml? Setup checks the nearest valid project profile but leaves it read-only by default. Preview the portable collection and context changes, then opt in to applying them before lexical setup:

gno profile check
gno profile diff
gno setup . --apply-profile

A profile is never required. Missing or invalid profiles fall back to normal setup. Applying a valid profile writes only external user config and runtime state through an additive, cross-process lock-safe path; the tracked profile is not modified, and unrelated collections or indexed documents are not deleted. Databases, model caches, locks, receipts, and secrets do not belong in the repository. Likely secret context files are rejected, and context files are limited to regular UTF-8 files no larger than 64 KiB.

With a valid profile, --apply-profile cannot be combined with an explicit --name or --exclude; conflicts fail before config or index mutation.

--exclude accepts one literal pattern per occurrence. Likely secrets fail closed unless you accept the interactive default-No prompt or pass --authorize-secret-risk; --yes, JSON, non-terminal input, decline, and EOF never authorize that risk. Use --no-semantic to start no semantic worker.

Exit 0 means exact lexical proof completed, even when semantic or connector follow-up remains. Exit 1 is invalid or safely rejected input. Exit 2 is a config, receipt, I/O, store, indexing, proof, or internal failure.

Private lexical and semantic state lives under the configured data directory at setup-receipts/<index>/<folder-fingerprint>.json and setup-semantic/<index>/<folder-fingerprint>.json. Semantic identity is stable across timestamps, stage tokens, and created/reused disposition, but changes with material folder, index, or activation evidence.

One live one-shot worker owns its canonical job and PID until exit; reruns cannot replace it. --no-semantic starts none, preserves a previous live owner, and records skipped intent rather than completed work. Pending or failed state keeps lexical success and includes an exact foreground gno ... embed <collection> resume command.

Add repeatable --connector flags and JSON output:

gno setup ~/notes --name notes --connector cursor-mcp --connector codex-skill --json

Exact IDs: claude-code-skill, claude-desktop-mcp, cursor-mcp, codex-skill, opencode-skill, openclaw-skill, and hermes-skill. Connector follow-up can report completed_with_actions without invalidating lexical success. MCP targets run a bounded retrieval proof; skill targets remain target_runtime_unverifiable because setup cannot safely execute the host agent runtime. Without connector flags, --json emits setup-command-result@1.0; with one or more, it switches to setup-activation-result@1.0.

Setup is direct: it never attaches to serve, daemon, Web, or MCP. Web/Desktop onboarding instead hands work to resident collection, sync, model, and connector APIs. It shares retrieval-proof semantics but does not proxy the CLI transaction or produce its private setup receipts.

The Web Health Center, /api/status.activation, doctor, and status consume one readiness contract. /api/health is process liveness only. For MCP, use the explicit read-only verification action on the Web Connectors page; installed skill runtimes remain unverifiable rather than being reported as passed.

gno mcp install records the exact Bun + installed GNO runtime, active index, and absolute config, data, and cache roots in the client configuration. That keeps desktop and editor processes on the same local workspace even when their shell environment orPATH differs.

Release proof

The npm tarball is smoke-tested.

The pre-publish gate, bun run test:package, runs scripts/package-smoke.ts: pack with npm pack, install from the tarball into isolated temp paths, prove setup worker/schema/runtime files are present, then run packaged gno setup. The smoke proves exact lexical evidence, idempotent reruns, stable semantic identity, live one-shot PID ownership, no-semantic non-replacement, all seven connector IDs, malformed-config recovery, and a semantic-enabled setup beside a resident without changing its admission, jobs, model, transport, reader, or generation state.

Desktop beta

Prefer a packaged app?

The desktop build wraps gno serve in a native window with the workspace UI pre-wired. Desktop builds are a beta and may trail the current CLI release; check GitHub Releases for the version attached to each download.

Next

After install, point GNO at your notes.

Source

GNO is MIT-licensed and open.

The whole workspace — CLI, SDK, Web UI, MCP server, agent skills — lives in a single repository. Read the source, file issues, send a PR, or fork it for your own experiments.