Skip to content
aivi-hqPublic

About

An always-on assistant for multi-project setups, built on top of OpenCode v2

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

aivi

Aivi — Your virtual colleague

An always-on teammate built around OpenCode v2. OpenCode stays the runtime for agents, sessions, providers, tools, skills, and permissions. aivi adds what a team needs around it: a shared knowledge server, scheduled work, trackers, forges, and channels such as Discord and Slack, all started by one aivi serve. Ordinary OpenCode installs reach the knowledge server through a small native plugin.

Quick start

Install the CLI, then create a server here or sign this machine in to an existing one. aivi setup asks which, installs the OpenCode plugins, and ends with a verified "Signed in as …" — never a promise it can't keep. Requires Node 26.

npm i -g @aivi/cli
aivi setup

Then run the server in the foreground, or install it as a background service with aivi service install:

aivi serve

From here on: getting started (searching, the assistant in OpenCode, a project, a chat channel).

Development

Working on aivi itself? From the repository root:

npm ci
npm run check
npm run aivi:cli -- serve

npm run aivi:cli uses dev/, a real development home produced by npm run aivi:cli setup against your local build; it builds first (incremental, TypeScript 7) and runs the compiled dist/ — the same artifact npm publishes, so local and installed behavior are identical. Everything goes through it: npm run aivi:cli -- serve runs the host in the foreground, every other command takes its place there.

npm run agentic:verify runs Biome and npm run check (build, tests against real SQLite, real QMD and the real v2 client on a mock server, schema check, CLI and daemon smoke); its exit code is the verdict. Live gates: npm run live:opencode, npm run smoke:browser.

Packages

Package Responsibility
@aivi/cli The CLI: one setup signs a machine in or creates the server (identity minting stays in the installed server's own code), mounts every operator command in-process, runs the server in the background (service), updates it (update/upgrade)
@aivi/core Config and access-policy schemas, knowledge kinds, contracts, logger
@aivi/host Lifecycle, API, scheduler, SQLite store, capacity leases, OpenCode connection, session driver, dreaming, the channel module contract with the shared inbox, engine and turn runner, report routing — plus ./cli, the command surface the CLI collects, and ./server, the boot launchd/systemd run
@aivi/knowledge QMD-backed document indexing and scoped search: keyword from the first boot, semantic (expansion + vectors + rerank) after aivi knowledge warm
@aivi/browser Chrome DevTools MCP, persistent profile, session-owned tabs
@aivi/channel-discord Discord channel module: gateway, DM/thread routing, sending, slash commands, report threads
@aivi/channel-slack Slack channel module: Socket Mode, DM/thread routing, sending, manifest slash commands, report threads
@aivi/plugin The plugin kit: the setup and CLI command contracts, resolveBlocked, the module contract under its authoring names — and ./api, the fetch-only host client. The package you import to write an aivi plugin; never depends on the host at runtime (plugin)
@aivi/tracker-linear Linear module: one app receiving every webhook, the assistant for people, the tracker the orchestrator walks (checkout or own-worktree workers), the Linear MCP proxy (linear)
@aivi/forge-github GitHub forge: the app's authenticated crossing to origin — clone, checkout sync, push, PR facts and review threads — plus the projects add contributor (github)
@aivi/opencode OpenCode plugin: registers exactly the tools the host offers it at load — the plugin hardcodes none — plus aivi_connection, which answers about its own loading (opencode)

Modules and jobs call shared services in-process. The plugin reaches the same services over the authenticated host API. Linear is an in-process module with a webhook route per app on the same listener (/linear/webhooks/app/<id>).

Releases

Versions are managed with Changesets: run npx changeset in a PR that changes a package, describe the change and the bump level. @aivi/cli, @aivi/host and @aivi/plugin are a fixed group — a changeset bumping one bumps the group, because the CLI mounts the host's command surface and the kit declares the contracts both speak; the other packages move independently. Merging to main opens a Version PR; merging that publishes the changed packages to npm with provenance — no tags, no manual publishing.

New here? Getting started to run it, operations to keep it running, configuration for every field. Working on it? Start with AGENTS.md, then architecture decisions, OpenCode integration, channel modules, projects, knowledge search, dreaming, Discord, Slack, and browser.

About

An always-on assistant for multi-project setups, built on top of OpenCode v2

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages