nimbus
Nimbus MCP Server provides read-only access to a private, local index of data from 80+ connected cloud services (GitHub, Slack, Jira, Drive, etc.), keeping your credentials and data on your machine. It exposes six tools for AI-powered querying of dev activity:
searchIndex– Keyword/semantic search across all services, with optional filters for service or item type.getConnectorStatus– Health and sync status of configured connectors.getRecentIncidents– Recent incidents, optionally filtered by service.getRecentPullRequests– Recent PRs, optionally filtered by service (state metadata provided for client-side filtering).getRecentDeployments– Recent deployments, optionally filtered by service.getDoraMetrics– DORA metrics (deployment frequency, lead time, change failure rate, MTTR) for a given service over a period like'30d'.
Integrates with dbt for data transformation, lineage, and understanding of data pipeline changes.
Integrates with GitHub for source code management, pull requests, commits, and code search for incident response and development workflows.
Integrates with GitLab for source code management, CI/CD, and project collaboration.
Integrates with Gmail to read, search, and manage emails for incident context and communication.
Integrates with Google services such as Gmail, Google Drive, and other Google Workspace tools for email, file access, and more.
Integrates with Google Drive to access and search files for document lineage and collaboration.
Integrates with Jira for issue tracking, project management, and linking incidents to tickets.
Integrates with Looker for business intelligence, data exploration, and data lineage tracing.
Integrates with Notion for accessing notes, documentation, and knowledge bases.
Integrates with PagerDuty for incident management, alerting, and correlation with code and deployments.
Integrates with Slack for messaging, notifications, and channel-based collaboration.
☁️ Nimbus
On-Call Intelligence for DevOps, SecDevOps, and Platform Engineering Teams
Cross-service incident context in under 100 ms. Consent-gated automation. Your credentials never leave the machine.
Install · Docs · Architecture · Roadmap
Related MCP server: test-server
Start here
nimbus init # index the repo you're standing in — no account, no API key
nimbus why src/auth.ts:42Who wrote this line, when, and in which commit — answered from your local git history, with no LLM configured, no API key, and no cloud account. Connect GitHub and a ticket tracker (Jira or Linear) and an incident tool, and the same command extends its answer with the pull request that carried the change, the ticket that asked for it, and the incident it touched.
That is the whole first run. Much of what follows is what becomes available once you connect the tools you already use.
Nimbus is an open-source, local-first AI agent built for engineers who run systems in production. A headless Nimbus Gateway runs on your machine, maintains a private SQLite index across your entire developer toolchain — source control, CI/CD, cloud infrastructure, monitoring, and incident management — and executes multi-step tasks on your behalf. Every write, send, or delete requires your explicit approval before it runs.
Your credentials never leave your machine. There is no Nimbus server.
Every architectural decision in Nimbus is evaluated against one question:
Does this return control to the user, or does it erode it?
The non-negotiables in Contributing follow from that question — they are load-bearing constraints, not aspirational values.
Three load-bearing words
local — the SQLite index, the Vault, and the audit log all live on your machine. The cloud is a connector, not the source of truth. Telemetry is opt-in and off by default (
[telemetry] enabled = false).consent-gated — every destructive or outbound action is intercepted by a human-in-the-loop gate before it runs. It lives in the executor, not the prompt, so it cannot be jailbroken away.
MCP — Nimbus speaks the Model Context Protocol in both directions. As an MCP client it drives every connector as an MCP server, and hosts any third-party server you register with
nimbus connector add --mcp. As an MCP server, it exposes your local index and its built-in agents to any MCP client through 21 read-only tools — 9 index tools plus 12 agent tools (explainWhy,findExpert,assessImpact,getCatchup, …). Install it withnpx -y @nimbus-dev/mcp, or runnimbus mcp-server --stdiodirectly from a checkout. The engine never calls a cloud API directly.
What It Does
# Incident response — answered from the local index, no API calls, under 100ms
nimbus ask "The payment-service alert just fired — what changed in the last 2 hours?"
# Line-level provenance — commit authorship from local git, no credentials or LLM needed.
# Connect GitHub, a ticket tracker and an incident tool to extend it with the PR, ticket, and incident.
nimbus why src/auth.ts:42
# Release readiness — cross-service without tab-switching
nimbus ask "Which of my open PRs have failing CI and are blocking the release branch?"
# SecDevOps — correlate security signals with your codebase
nimbus ask "Which repos have critical Dependabot alerts with open PRs touching the affected packages?"
# Data lineage — answered from the local index, no warehouse query
nimbus ask "The Q1 revenue dashboard shows zeroes — which upstream model broke?"
# Blast radius — answered from the relationship graph before you push
nimbus ask "what services depend on src/billing/retry.ts, and which dashboards or pipelines would feel a change to it?"
# Prove what left the machine — the append-only, BLAKE3-chained egress ledger
nimbus prove --since 24h
# Consent-gated automation — full plan preview before anything executes
nimbus run ./incident-response.ymlExample session:
$ nimbus ask "The payment-service alert just fired — what changed?"
🔍 PagerDuty: P1 — Error rate 4.2% — fired 8 minutes ago
🔍 Last deploy: payment-service v2.14.1 — 23 minutes ago
🔍 GitHub diff v2.14.0 → v2.14.1: 3 files — src/billing/retry.ts most significant
PR #312 "Increase retry backoff" — merged by @elena 41 minutes ago
⚠ CONSENT REQUIRED — Post incident summary to #incidents?
Post? [y/n]: y ✅ Posted.
Suggested next step: rollback to v2.14.0?
⚠ CONSENT REQUIRED — Trigger Jenkins rollback job.
Rollback? [y/n]: n Aborted. No changes made.SecDevOps example:
$ nimbus ask "Critical CVE dropped for lodash — what's our exposure?"
🔍 Scanning local index: 47 repos indexed, 12 have lodash as a direct dependency
🔍 Active PRs touching lodash: 3 open PRs across payment-service, auth-gateway, api-proxy
🔍 Sentry: 2 production errors last 24h in lodash code paths (payment-service)
🔍 Jira: No active tickets for this CVE yet
Suggested next step: Create Jira tickets for affected repos?
⚠ CONSENT REQUIRED — Create 3 Jira tickets and assign to component owners.
Proceed? [y/n]: y ✅ Created PLAT-1847, PLAT-1848, PLAT-1849.Data lineage example:
$ nimbus ask "The Q1 revenue dashboard shows zeroes — which upstream model broke?"
🔍 Tableau: dashboard "Q1 Revenue" — last refresh failed 12 minutes ago
🔍 Upstream Looker view: revenue_daily → dbt model revenue_daily_agg
🔍 dbt Cloud: revenue_daily_agg — last run failed 14 minutes ago
🔍 Airflow: DAG daily_revenue_etl — task load_fact_orders failed with SQL error
🔍 GitHub PR #842 "Rename order_amount → gross_amount" — merged by @priya 28 minutes ago
No downstream dbt model updated to match the rename.
Suggested next step: Revert PR #842 and rerun the DAG?
⚠ CONSENT REQUIRED — Revert PR #842 and trigger Airflow DAG rerun.
Proceed? [y/n]: n Aborted. No changes made.More worked examples: examples.md.
Who It's For
Nimbus is built for engineers and operators who run systems in production. If your on-call rotation spans five monitoring tools and three cloud consoles, Nimbus is the intelligence layer that collapses that context into a single query.
Role | What Nimbus gives you |
On-call / SRE | Instant incident context — last deploy, triggering commit, CI result, Slack thread — in one query, without seven browser tabs |
Platform Engineer | Drift detection, multi-cloud infra state, deployment correlation, CI/CD and build pipeline monitoring (Bitrise), consent-gated IaC apply and rollback |
Security Engineer | Alert-to-commit tracing, CVE-to-PR correlation, vulnerability and code analysis insights (Snyk, Semgrep, SonarQube/SonarCloud), full audit log for every agent action, compliance posture queries |
Senior Developer | Cross-repo PR intelligence, release readiness checks, pipeline context, local-only credential storage; OpenAPI / AsyncAPI spec indexing for "which services expose this endpoint?" queries |
Team Lead / Engineering Manager | Cross-service activity digest, changelog generation, expert routing, blast radius analysis — without asking anyone |
Analytics Engineer / Data Scientist | Cross-stack lineage from dashboard to dbt model to warehouse table to orchestration DAG — one local query instead of five consoles; metadata-only ingestion keeps row data on the warehouse |
This is not a tool for everyone. There is no managed cloud service, no Nimbus account, and no relay server. If that's what you need, look elsewhere.
More detail on each role, including analytics and data roles: Who Nimbus is for.
Why Engineers Choose Nimbus
Fast — Most Queries Never Hit the Network
Nimbus maintains a local SQLite metadata index. Searching across 50,000 indexed items across five services takes under 100 ms — faster than opening a new browser tab.
Operation | Nimbus (local index) | Typical SaaS |
Search across all services | ~20–80 ms | 1,500–4,000 ms |
List recent files from 3 services | ~5 ms | 3× API round trips |
Semantic recall (embeddings) | ~50–200 ms | Remote embed + search |
Gateway cold start | ~80 ms | Always-on cloud |
Measured on a mid-range laptop; 50k item index across 5 connected services.
Secure by Architecture
Credentials are stored in your OS-native keystore (Windows DPAPI, macOS Keychain, Linux Secret Service). There is no code path that writes them to disk, logs, or IPC responses.
The HITL consent gate is implemented in the executor, not the prompt. A model that generates a plan to skip confirmation produces a plan that simply does not execute.
Extensions run in sandboxed child processes. They receive only credentials for their declared service and cannot enumerate Vault keys or access other connectors.
Prompt injection is mitigated by injecting file content and API responses as typed
<tool_output>data blocks, never as instructions.Every authorized outbound action is ledgered. An append-only, BLAKE3-chained egress ledger records what left the machine, and
nimbus provereports it. The structural rules behind all of this are enumerated inSECURITY-INVARIANTS.md; each of the thirty-five LIVE invariants —I1–I27andI29–I36— has a production wiring site and an enforcement test.I28is a reserved number with neither.
True Cross-Platform
Windows, macOS, and Linux are equally supported. Every PR runs a full gate on Ubuntu (typecheck, lint, build, tests). Pushes to main run the full three-platform matrix in parallel. Platform-specific code (IPC, secrets, autostart, notifications) lives behind a typed PlatformServices abstraction — business logic never knows which OS it's on.
Extensible
Third-party connectors ship as npm packages. Install in one command; the agent gains a new capability immediately. A local Extension Marketplace lives in the Tauri desktop app — code-complete in Phase 4 and shipping as the separate desktop-v0.1.0 tag in Phase 13.
Quick Start
1. Install
No admin on macOS and Windows; the Linux .deb uses sudo.
# The keychain must be UNLOCKED. Nimbus never shows an authorization dialog (a
# background service could not answer one), so on a locked keychain it fails
# immediately and tells you what to run. Over SSH or in CI, give it its own
# keychain: security create-keychain -p "" nimbus.keychain
# security default-keychain -s nimbus.keychain
# security unlock-keychain -p "" nimbus.keychain
curl -fsSL https://github.com/nimbus-agent/Nimbus/releases/latest/download/install.sh | sh -s -- --yes
# then open a new shell:
nimbus --versionThe installer picks Apple silicon or Intel from uname -m, verifies the release
signature before it installs anything, and copies the binaries to ~/.local/bin.
Rather read the script before running it? Download the archive and run the copy inside it — same installer, no pipe:
# Apple silicon — for Intel, swap arm64 → x64.
curl -fsSL https://github.com/nimbus-agent/Nimbus/releases/latest/download/nimbus-headless-macos-arm64.tar.gz -o /tmp/nimbus.tar.gz
mkdir -p /tmp/nimbus && tar -xzf /tmp/nimbus.tar.gz -C /tmp/nimbus
less /tmp/nimbus/install.sh
/tmp/nimbus/install.sh# Credentials live in the OS keystore, and the Gateway will not start without it:
sudo apt install libsecret-tools # Debian/Ubuntu
# sudo dnf install libsecret # Fedora/RHEL
curl -fsSL https://github.com/nimbus-agent/Nimbus/releases/latest/download/nimbus_amd64.deb -o /tmp/nimbus.deb
# apt, not `dpkg -i` — the package depends on bubblewrap and libcap2-bin,
# and dpkg will not install those for you.
sudo apt install /tmp/nimbus.deb
nimbus --versionPrefer no sudo? Two options, neither of which resolves the dependencies for
you — the .deb above is the only path that does:
# x86-64 only; there is no published Linux arm64 build.
curl -fsSL https://github.com/nimbus-agent/Nimbus/releases/latest/download/install.sh | sh -s -- --yes
# then open a new shell:
nimbus --versionThis installs to ~/.local/bin and updates your shell PATH. It warns if
bubblewrap is missing rather than installing it — and the Gateway will not
start without it (sudo apt install bubblewrap). The
AppImage
is the other no-sudo route: a portable single file.
Headless box — server, container, SSH session or WSL? libsecret also needs
a D-Bus session and an unlocked keyring, which those machines usually lack. Run
nimbus doctor; it names which piece is missing. Full recipe:
Headless Linux.
$url = "https://github.com/nimbus-agent/Nimbus/releases/latest/download/install.ps1"
& ([scriptblock]::Create((irm $url))) -Yes
# then open a new PowerShell window:
nimbus --versionWorks on stock Windows PowerShell 5.1 as well as PowerShell 7. It is spelled
& ([scriptblock]::Create(...)) rather than irm ... | iex because iex
cannot pass -Yes to the script.
Rather read the script before running it? Download the archive and run the copy inside it — same installer, no pipe:
$url = "https://github.com/nimbus-agent/Nimbus/releases/latest/download/nimbus-headless-windows-x64.zip"
Invoke-WebRequest -Uri $url -OutFile "$env:TEMP\nimbus.zip"
Expand-Archive -Path "$env:TEMP\nimbus.zip" -DestinationPath "$env:TEMP\nimbus" -Force
notepad "$env:TEMP\nimbus\install.ps1"
& "$env:TEMP\nimbus\install.ps1"Package managers (recommended — auto-updating):
Platform | Command |
macOS / Linux (Homebrew) |
|
Windows (Scoop) |
|
Windows (winget) |
|
Debian / Ubuntu (apt) | signed repo — see |
Fedora / RHEL (dnf) | signed repo — see |
Package-manager and native-installer builds disable the self-updater (the package owns updates); the portable archives keep it on. The full install matrix — native .msi / .pkg / .rpm installers, the GPG-signed apt/yum repositories, AppImage, portable tarballs, and download verification — lives in install.md.
Verifying what you downloaded. Every release artefact is covered by a GPG-signed SHA-256 manifest (SHA256SUMS.asc, key 5A20457CCD8B53FFAA945240886ADA6B487CAB6E) — that manifest is the cross-platform integrity proof. Linux artefacts and the AppImage additionally ship an individual .asc sidecar; the macOS and Windows archives do not, so verify those against the manifest. The gateway and CLI binaries also carry GitHub build-provenance attestations. When it downloads a release, the installer runs the manifest check for you: it verifies SHA256SUMS.asc against a fingerprint pinned inside the script itself, refuses to install on a mismatched, expired or revoked key, then checks the downloaded archive against the manifest. If gpg is missing, or the signature file cannot be fetched, it installs on the checksum alone and says so — SIGNATURE NOT CHECKED — rather than letting a checksum pass read as a signature pass. To verify by hand, see verify-release-integrity.md; the fingerprint is published at release/SIGNING-KEY.asc and in the Security Policy.
2. Index a repo you already have
No account, no token, no API key:
cd ~/code/your-project
nimbus initnimbus init adds the repo to nimbus.toml with code indexing on, starts the gateway, and indexes it. It appends to your config — it never rewrites it, so your comments and existing settings survive (and it keeps a nimbus.toml.bak).
3. Trace a line's provenance
Who wrote it and when, answered from your local git history. Connect GitHub, a ticket tracker (Jira or Linear), and an incident tool, and the same command extends its answer with the pull request that carried the change, the ticket that asked for it, and the incident it responded to:
nimbus why src/auth.ts:42nimbus init prints a real file:line from your own repo to try first. Authorship — who wrote it, when, from your local git history — works with no credentials and no LLM configured; the PR, ticket, and incident need those tools connected.
Optional: add an LLM
Indexing, nimbus why, and the agent briefs all work with no LLM configured — briefs render deterministically. An LLM buys you two things: nimbus ask (natural-language queries), and prose synthesis that rewrites those briefs into more readable narrative ([agents] synthesis, default "local").
It does not have to be a cloud one. Point Nimbus at a local model and nothing — not even prompts — leaves the machine:
# ~/.config/nimbus/nimbus.toml
[llm]
prefer_local = true
local_model = "llama3.1" # served by Ollama on http://127.0.0.1:11434See Local & air-gapped LLM setup.
Optional: connect a cloud service
To correlate across GitHub, Jira, PagerDuty, Slack and ~90 others, add a connector. The fastest path is a token-based one like GitHub:
nimbus connector auth github --token <your_PAT>
nimbus connector sync github
nimbus ask "what PRs did I open in the last 7 days?"OAuth services — Google Drive, Gmail, Slack, … — use nimbus connector auth <service>, which opens your browser. See Connect a service.
How It Works
~90 cloud services ─▶ first-party MCP connectors ─▶ local SQLite index (+ embeddings)
│
your question ─▶ engine ─▶ HITL consent gate ─▶ action
│
CLI · VS Code · web clipper · Slack/Teams bot · (desktop, coming)A headless Bun Gateway maintains the private index and runs the agent; clients talk to it only over local JSON-RPC IPC. Credentials live in the OS keystore (DPAPI / Keychain / libsecret) — never in logs, config, or IPC. Full design: architecture.md.
Connectors
Every tool your on-call rotation depends on, unified in one local index. Cross-service queries are answered without an API call — the data is already there.
90+ first-party MCP connectors across Google, Microsoft, GitHub/GitLab/Bitbucket, Slack, Jira, Linear, Notion and Confluence, plus observability, CI/CD, security & quality, feature flags, GitOps, data & BI, deploy, finance, and support tools. The authoritative roster is CONNECTOR_VAULT_SECRET_KEYS in packages/gateway/src/connectors/connector-secrets-manifest.ts; the browsable version is in the connector docs.
Highlights by wave:
Phase 1–2 — Local Filesystem, Google Drive, Gmail, Google Photos, OneDrive, Outlook, Microsoft Teams, GitHub, GitLab, Bitbucket, Slack, Linear, Jira, Notion, Confluence, Discord (opt-in).
Phase 3 — Jenkins, GitHub Actions, CircleCI, GitLab CI, AWS, Azure, GCP, Kubernetes, Terraform/Pulumi/CloudFormation, Datadog, Grafana, Sentry, PagerDuty, New Relic.
Phase 5 — Obsidian, the OpenAPI / AsyncAPI spec indexer, Snyk, Bitrise, SonarQube/SonarCloud, Semgrep, Wiz, LaunchDarkly, Flagsmith, ArgoCD, Flux, dbt Cloud, Metabase, Superset, Databricks, MLflow, Vercel, Netlify, Stripe, Mercury, Readwise, Raindrop, Intercom, Zendesk, Lever, Greenhouse, Pipedrive, Stack Overflow, Zoom — plus Tiers 1–5: Zotero, OWASP Dependency-Track, Ramp, Airflow, Prefect, Dagster; HubSpot, Miro, Canva, Figma, Salesforce, Google Meet (3-legged OAuth); BigQuery, Athena, CloudWatch Logs, GCP Cloud Logging, Kibana/Elasticsearch, SageMaker, Vertex AI, Great Expectations (no-row-data: schema and metadata only, enforced by a contract test); generic IMAP, Fastmail (JMAP), ProtonMail Bridge (headers, a capped preview, attachment metadata only); local DB schema indexing, Storybook, and local data-file profiling (Parquet / CSV / JSONL / JSON schema only).
Phase 6 — Snowflake, Tableau, Looker, Power BI, Monte Carlo and Bigeye, with a cross-warehouse lineage graph, team-shared credentials and HITL-gated writes; then Mendeley, Workday, Apple Mail / iCloud Calendar, and HITL-gated ArgoCD / Flux / MLflow writes.
See the roadmap for depth and remaining gaps per connector.
Where the Project Is
Nimbus uses phases, not calendar dates. A phase completes when its acceptance criteria pass. Phases 1–6 are ✅ complete. From Phase 7 on, the build order follows the Sequencing Spine overlay (S1 → S5) rather than the phase numbers.
Phase | Theme | Status |
1 | Foundation | ✅ Complete |
2 | The Bridge (15 connectors) | ✅ Complete |
3 | Intelligence (semantic search, CI/CD, cloud) | ✅ Complete |
3.5 | Observability & Developer Experience | ✅ Complete |
4 | Presence (local LLM, multi-agent, voice, VS Code extension, TUI; desktop UI code-complete) | ✅ Complete |
5 | The Extended Surface | ✅ Complete |
6 | Team (federation, Team Vault, SSO/SCIM, ChatOps, Share) | ✅ Complete |
S1 | Local Brain — egress ledger, implicit knowledge, the built-in agent set | ✅ Complete |
S2 | Local Compute Fleet — sandboxed code execution, local computer-use, agent fleets | ◐ Current build slot |
S3–S5 | Sequencing Spine overlay — see the roadmap | Planned |
13 | Desktop Distribution (ships | Planned |
S1 (Local Brain) shipped and closed on 2026-08-20 — the always-on egress ledger and nimbus prove (invariant I29), the research-briefs HTTP surface, the full-body store that made briefs answerable at all, zero-config onboarding, and the fourteen built-in read-only agents: expert, impact, catchup, ghost, conflicts, huddle, janitor, preflight, why, glossary, decisions, ownership, pre-mortem and negotiate. The Wave 6 answer-quality set followed and closed it out: agent brief synthesis ([agents] synthesis, invariant I31), nimbus ask --devil, the [persona] tone/voice vocabulary, nimbus stats for bucketed time series over the index, and first-class negation queries.
Now building (S2 — Local Compute Fleet), opened 2026-08-21. S1 made the local index answerable; S2 makes local compute usable. Shipped in it so far, all default off:
Sandboxed code execution (2026-08-23, invariant
I33) —nimbus execruns a script you approve VERBATIM inside the platform sandbox, with no network at all, loopback included. CLI/owner-only: the LLM cannot invoke an execution.Bring-your-own-frontier-model routing (2026-08-28) — Anthropic, OpenAI, Gemini and xAI adapters, each behind a per-vendor
[llm.remote.<vendor>]opt-in with its key read from the Vault and never the environment. This is what made the egress ledger'smodelclass live rather than latent.A HITL-gated computer-use loop (2026-09-01, invariant
I35) — thebrowserlane drives a confined headless Chromium whose screenshots are BLAKE3-digested and never written to disk, and theterminallane is a sandboxed line-oriented shell in which no byte reaches the child process before you have approved the complete command. Thescreenlane is deferred.Multimodal I/O, slice 1 of 4 (2026-09-02) —
nimbus media understandtranscribes local audio and video withwhisper-cliand indexes the result as a searchable derived item, pinned to the local embedder so nothing extracted from the file can reach a remote one. Image understanding, cloud byte-fetch and any remote model are not in this slice.
Still ahead in S2: runtime tool generation and overnight sub-agent fleets on compute you already own.
Recorded direction — not built, and not in the current slot. The agents are the product; a client is only a context-aware way to reach them without leaving where you already are. The browser extension is a web clipper today and the recorded direction is a browser-side gateway client; the editor extension gets the same treatment. Two things were considered and deliberately rejected: shipping a Nimbus fork of VS Code, and letting an agent write your source code. The reasoning and the conditions that would reopen either are recorded in roadmap.md § Rejected Directions — read that before proposing them again.
The dated delivery log is CHANGELOG.md — it is the single source for what landed when. roadmap.md carries the acceptance criteria, sequencing, and per-phase summaries. Command-level detail for everything above is in cli-reference.md.
Prerequisites (source build)
The published installers above bundle everything; these apply only if you build from source.
Required on every platform
Bun v1.2+ — runtime, package manager, test runner. Verify with
bun --version.Git — for cloning the repo and the build's git-info embedding.
A C++ build toolchain — needed for the rare native dep that has no prebuilt binary for your platform.
Windows: Microsoft Visual C++ Redistributable and Visual Studio Build Tools (Desktop development with C++ workload).
macOS:
xcode-select --install.Linux:
build-essential(Debian/Ubuntu) orDevelopment Tools(Fedora/Arch).
Required only for the Tauri 2.0 desktop UI (packages/ui)
The headless Gateway and CLI build without these. Skip if you only want nimbus in the terminal.
Rust toolchain — install via
rustup; Tauri needscargoand a stablerustc(≥ 1.78 recommended).Platform WebView dependencies:
Windows 10+ — WebView2 Runtime (preinstalled on Windows 11; install Evergreen Bootstrapper on older Windows 10 builds).
macOS 13+ — Xcode Command Line Tools.
Linux (Ubuntu/Debian) —
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev.Other distros: see the Tauri prerequisites guide.
Required at runtime on Linux only
libsecret— backs the Vault on Linux (Windows uses DPAPI; macOS uses Keychain — both built-in).Debian/Ubuntu:
sudo apt install libsecret-1-0 libsecret-tools(the-toolspackage providessecret-tool, whichnimbus doctorchecks for).Fedora/Arch:
sudo dnf install libsecret/sudo pacman -S libsecret.You also need a running Secret Service implementation —
gnome-keyring, KWallet (kwallet5/6), orkeepassxcwith Secret Service enabled. On a headless Linux server, usegnome-keyring-daemon --unlockin your session script.
Native dependencies installed by bun install
The Gateway's local embedder uses @xenova/transformers, which depends on sharp and a platform binary such as @img/sharp-win32-x64. These are pulled in automatically by bun install — you do not install them system-wide. If Sharp fails to download or build, remove node_modules and re-run bun install with install scripts enabled.
Gateway binaries built with bun build --compile bundle JavaScript into a single file, and Sharp's native .node file may not load inside that layout on some platforms. If nimbus-gateway exits with a Sharp error, run the Gateway from source with bun after bun install (for example cd packages/gateway && bun run dev). Linux .deb / tarball artifacts from CI are normal compiled binaries — end users do not run npm install sharp; if a packaged binary ever fails the same way, the fix is in build/packaging, not an extra OS package on the user's machine.
Optional — only needed if you enable the corresponding feature
Feature | Requirement | How to install |
Local LLM (Ollama) | Ollama running on | Default endpoint: |
Local LLM (llama.cpp) | A | Default endpoint: |
Cloud LLM (Anthropic / OpenAI / Gemini / xAI) | That vendor's API key | Two independent halves, both required. Store the key in the Vault — |
Voice — STT (push-to-talk hotkey / wake-word loop) |
| Build whisper.cpp from source or install via |
Voice — TTS | macOS: |
|
Wake-word loop | Same as STT, plus a microphone configured at the OS level | Verify with |
GPU acceleration for embeddings or LLM | Provider-specific (CUDA, ROCm, Metal). Nimbus serializes GPU access via | Configure your provider's GPU support; Nimbus does not require any extra config. |
Once installed, run nimbus doctor — it checks every prerequisite above and prints actionable remediation for anything missing.
Build from source
git clone https://github.com/nimbus-agent/Nimbus.git
cd Nimbus
bun install # NOT "bun run install" — that looks for a script and fails
# Installs sharp + platform @img/sharp-* for embeddings (via @xenova/transformers)
bun run buildBuilt CLI location:
OS | Path |
Windows |
|
macOS / Linux |
|
Add packages/cli/dist to your PATH or call with a full path.
First-Run Configuration
The first time the Gateway starts it creates a default nimbus.toml in the platform config directory and an empty SQLite index in the data directory:
Platform | Config ( | Data ( |
Windows |
|
|
macOS |
|
|
Linux |
|
|
NIMBUS_CONFIG_DIR moves the config directory only — it deliberately does not move the data directory, and there is no data-directory override (on Linux the data root follows XDG_DATA_HOME). Most TOML keys also have a corresponding NIMBUS_-prefixed env var override that wins over the file (e.g. NIMBUS_TELEMETRY_ENABLED, NIMBUS_ASK_MAX_STEPS) — see cli-reference.md.
nimbus ask needs an LLM; indexing, nimbus why and the deterministic briefs do not. Remote model ids are inferred: claude-* → Anthropic, gpt-* / o1-* / o3-* / o4-* → OpenAI. Local model ids are passed to Ollama or llama.cpp through [llm].local_model.
# Cloud — one vendor at a time, opted into explicitly. A key alone does nothing:
# no environment variable can enable a vendor you did not name in nimbus.toml.
nimbus vault set anthropic.api_key # prompts for the value; never on the command line
nimbus config edit # add the block below, then restart the Gateway
# [llm.remote.anthropic]
# enabled = true
# model = "claude-sonnet-4-6"
# OR fully local (no network calls; requires Ollama running)
ollama pull llama3.2
nimbus config set llm.local_model llama3.2
nimbus config set llm.prefer_local trueSee cli-reference.md for the full nimbus.toml schema.
Everyday Use
Start the Gateway
nimbus start # Start Gateway as a background process
nimbus status # Verify it's running; check connector health
nimbus doctor # Re-run any time something seems off — checks Bun, Vault, Gateway, index, voice, …Authenticate services
# Cloud storage & communication
nimbus connector auth google # OAuth PKCE — opens browser
nimbus connector auth microsoft
# Developer services
nimbus connector auth github # PAT — stored in OS keystore
nimbus connector auth gitlab
nimbus connector auth linear
nimbus connector auth jira
nimbus connector auth slack
nimbus connector list # All connectors + sync status
nimbus connector sync github # Manually trigger a sync cycleQuery
nimbus ask "Find all PDFs I received by email last month that I haven't opened"
nimbus ask "Which of my open PRs mention payment-service?" --devil # argue against the plan
nimbus search "quarterly review" --service google_drive --type pdf --limit 20Built-in agent briefs
Read-only, no HITL, and they render deterministically with no LLM configured:
nimbus why src/auth.ts:42 # line provenance across six lanes
nimbus expert payment-service # who has the most context
nimbus impact src/billing/retry.ts # reverse-dependency blast radius
nimbus catchup --since 7d # personalized retrospective digest
nimbus owners src/billing/ # ownership graph
nimbus glossary # mined domain terminology
nimbus decisions # implicit ADRs
nimbus pre-mortem # comparable-history risk brief
nimbus negotiate --person <id> --since 90d # cited contribution briefLocal compute
Every command here is off by default, and two of the three go further. nimbus exec and
nimbus computer each obtain your approval for the exact thing they are about to do — the
verbatim script, the exact browser launch envelope, the complete command line — in a gate that
lives in the executor, not the prompt. nimbus media understand has no such gate: it is
governed by configuration alone ([multimodal] enabled plus a per-root media_index, both
false by default), so enabling it is the whole of the decision. Full detail, including what each
sandbox does and does not confine, is in cli-reference.md.
# Run code in the platform sandbox, with no network at all — loopback included.
# You approve the verbatim body; the LLM cannot invoke this. [code_execution] enabled = true
nimbus exec --file ./script.ts --timeout 5000
# A confined headless browser, or a confined line-oriented shell. You approve the session
# envelope up front and then every actuating step. [computer_use] enabled + allowed_lanes
nimbus computer browser --origin https://github.com
nimbus computer terminal --cwd ./my-project
nimbus computer sessions
# Transcribe local audio/video with whisper-cli and index it as searchable text.
# Nothing extracted from the file can reach a remote model. [multimodal] enabled + media_index
nimbus media understand --limit 10Metrics and proof
nimbus metrics dora --service payment-service # four DORA metrics, one window
nimbus stats mttr --service payment-service --window 90d --bucket 1w --json
nimbus prove --since 24h # what left the machine
nimbus egress verify # BLAKE3 chain integrityObserve and debug
First debugging step: run
nimbus doctor. It checks your Bun version, vault availability, Gateway connectivity, index health, and connector states — and prints actionable remediation for anything it finds.
# Structured index queries
nimbus query --service github --type pr --since 7d --json
nimbus query --sql "SELECT title FROM items WHERE pinned = 1" --pretty
# Diagnostics and slow queries
nimbus diag
nimbus diag slow-queries --limit 10
# Connector health history
nimbus connector history github
# Re-ingest a connector at a specified depth (prunes existing body/embeddings; writes audit entry)
nimbus connector reindex github --depth metadata_only
# Database integrity
nimbus db verify
nimbus db repair # --yes to skip confirmation
nimbus db snapshotConfigure
nimbus config list
nimbus config get sync.intervalSeconds
nimbus config set sync.intervalSeconds 300
nimbus config validate
nimbus profile create work
nimbus profile switch work # takes effect on the next Gateway start
nimbus profile listRun a script
nimbus run ./weekly-cleanup.yml# weekly-cleanup.yml
name: weekly-cleanup
steps:
- Find all PDF files in Google Drive not opened in 90 days
- Summarize them by project folder
- Move the ones from the Zurich project to /Archive/2025
- Send me an email with the summaryBefore executing, Nimbus shows a full plan preview identifying every step that will require consent:
Script: weekly-cleanup (4 steps)
Step 1 Find PDFs not opened in 90 days READ — no approval needed
Step 2 Summarize by project folder READ — no approval needed
Step 3 Move 12 files to /Archive/2025 ⚠ REQUIRES APPROVAL
Step 4 Send summary email ⚠ REQUIRES APPROVAL
Proceed? [y/n]:Install a community extension
nimbus extension install @community/nimbus-notion
nimbus extension listThe complete command reference — every subcommand, flag, exit code, and the full nimbus.toml schema — is cli-reference.md.
Tech Stack
Layer | Technology |
Runtime | Bun v1.2+ — native TypeScript, fast startup, built-in SQLite |
Language | TypeScript 7.x strict mode |
Agent Framework | Mastra — structured agents, tool registration, workflow orchestration |
Integration Protocol | Model Context Protocol — all connectors speak MCP; Engine never calls cloud APIs directly |
Local Database |
|
Secrets — Windows | Windows DPAPI |
Secrets — macOS | Keychain Services |
Secrets — Linux | Secret Service API via |
IPC | JSON-RPC 2.0 over Domain Socket / Named Pipe — local-only, no TCP surface |
CLI | Bun + @clack/prompts |
Desktop UI | Tauri 2.0 + React 19 (~5MB native shell) |
LLM | Local Ollama / llama.cpp via the Nimbus router, or Anthropic/OpenAI via the Mastra agent path |
Embeddings |
|
Extension SDK |
|
Client Library |
|
Testing — Gateway/CLI |
|
Testing — UI | Vitest + |
Testing — E2E Desktop | Playwright + Tauri WebDriver |
CI | GitHub Actions — PR: Ubuntu |
Release |
|
Cross-Platform Support
Windows 10+ | macOS 13+ | Ubuntu 22.04+ † | |
Gateway IPC | Named Pipe | Unix Socket | Unix Socket |
Secrets | DPAPI | Keychain | libsecret |
Autostart | Registry | LaunchAgents | systemd user |
Notifications | Win32 Toast | NSUserNotification | libnotify/D-Bus |
Config dir |
|
|
|
Desktop UI | WebView2 | WKWebView | WebKitGTK |
CI runner |
|
|
|
Release |
|
|
|
† Ubuntu 22.04 is supported for source builds only. Pre-built Linux binaries are compiled on Ubuntu 24.04 and require glibc ≥ 2.39 at runtime (Ubuntu 24.04+, Fedora 40+, Debian 13+, Arch / other current rolling releases). Ubuntu 22.04 LTS, Debian 12, and RHEL 9 (and derivatives) will fail with GLIBC_2.39 not found. See SECURITY.md for the canonical supported-distro list and rationale.
† macOS and Windows installers currently ship unsigned (signing not yet landed). Cross-platform integrity is provided by the GPG-signed SHA256SUMS.asc manifest. macOS Gatekeeper and Windows SmartScreen will prompt on first run; this is expected. Apple Developer notarization and Windows Authenticode signing are deferred to a later point release — see signing-keys.md.
Security
No plaintext credentials — OAuth tokens live in the OS keystore. There is no code path that writes them elsewhere.
Structural HITL gate — every delete, send, and move is blocked at the executor by a compile-time constant set. The agent cannot reason around a function that doesn't exist.
Extension isolation — third-party extensions run as sandboxed child processes (bwrap + seccomp on Linux,
sandbox-execon macOS, AppContainer on Windows), receive only their declared service's credentials, and cannot reach the Vault or other connectors. Publisher manifests are Ed25519-verified at install and on every Gateway startup.Full audit log — every action, including every HITL decision, is recorded in a local BLAKE3-chained SQLite table before the action executes;
nimbus audit verifyproves the chain.Egress ledger — every authorized outbound action is appended to an append-only, BLAKE3-chained ledger before dispatch, and a failed append aborts the action.
nimbus provereports what left the machine.Thirty-five enumerated invariants —
I1–I27andI29–I36, each with a production wiring site, a section inSECURITY-INVARIANTS.md, and an enforcement test.I28is a reserved number, deliberately skipped: it has no wiring, no section and no test, so it is not one of the thirty-five. A static audit runs before the test suite; the runtime tests stay authoritative.Internal security audit (B1, 2026-04-25) — 8 trust surfaces reviewed; 78 unique findings filed (0 Critical); all High and Medium items closed pre-
v0.1.0. One Low item (S6-F1) closed inv0.1.0, and the two Tauri-specific Low items (S4-F6,S4-F8) are deferred to Phase 13 (desktop-v0.1.0); see SECURITY.md for the full record. A formal third-party penetration test is scheduled for Phase 12.
Note: Nimbus's guarantees hold at the process boundary. It is not a firewall, antivirus, or VPN application; endpoint protection (AV/EDR), network security (VPN/Firewall), and OS-level hardening are your responsibility. See SECURITY.md for the full boundary definition.
Found a vulnerability? See SECURITY.md and the security model & disclosure policy.
Extensions
Two different things live under the same command family, and picking the wrong one costs an afternoon.
Writing a connector — something that indexes a service into your local index. Use
create-nimbus-connector. Describe the
service in a JSON spec and it emits the whole package: src/server.ts, the manifest, the
tsconfig, the package.json, a README and test/sandbox.test.ts — plus src/search-filter.ts when
the spec declares a search tool.
bunx create-nimbus-connector --spec ./my-service.spec.json --standalone
cd my-service && bun run typecheck && bun testWriting a generic extension — anything that is not a connector. nimbus scaffold extension
emits a four-file shell for that case; it does not produce a connector, and a package it
generates is invisible to the connector gates because it has no src/server.ts.
nimbus scaffold extension my-extension # always created at ./my-extension/ in the cwd
cd my-extension # the scaffold does NOT change your working directory
nimbus extension install . # Test locally
npm publish --access public # Publish to the communityThe Gateway handles OAuth, credential storage, sync scheduling, and HITL enforcement either way. You write the service API integration.
Extensions declare permissions in nimbus.extension.json. Write and delete tools must declare hitlRequired — the Gateway enforces HITL automatically for those tool calls regardless of how the extension implements them.
Testing
Five-layer pyramid:
Unit (
bun test) — Engine logic, Vault contracts, HITL invariants, manifest validation. Co-located with source. Runs in milliseconds.Integration (
bun test+ real SQLite) — connector sync, index queries, extension loading and isolation. Each test gets a fresh temp dir + fresh DB.E2E CLI (
bun test+ Gateway subprocess) — full CLI command flows against a real Gateway backed by mock MCP servers.UI Components (Vitest + Testing Library) — React components in the Tauri WebView. Vitest is used here because
bun testdoes not support jsdom.E2E Desktop (Playwright + Tauri WebDriver) — full desktop flows on all three platforms. Runs on push to
mainand release tags.
Run bun run preflight for full CI parity before opening a PR (bun run preflight:fast for the cheap static gates). Security scans: bun audit, trivy, and CodeQL on every PR; Dependabot for dependency updates; SonarCloud as a blocking quality gate. HIGH/CRITICAL findings block merges. See testing.md.
Project Structure
nimbus/
├── packages/
│ ├── gateway/ # Core headless Gateway (Bun)
│ │ └── src/
│ │ ├── platform/ # PAL: win32, darwin, linux implementations
│ │ ├── engine/ # Mastra agent, router, planner, HITL executor, persona
│ │ ├── agents/ # The fourteen built-in read-only brief agents
│ │ ├── vault/ # DPAPI, Keychain, libsecret
│ │ ├── db/ # verify, repair, snapshot, health, metrics, latency ring buffer
│ │ ├── index/ # SQLite schema + migrations, item store, body/depth
│ │ ├── connectors/ # Connector registry, lazy mesh, health model
│ │ ├── sync/ # Delta sync scheduler, connectivity probe, targeted fetch
│ │ ├── egress/ # Append-only BLAKE3 egress ledger (I29) + `nimbus prove`
│ │ ├── exec/ # Sandboxed code execution gate (I33)
│ │ ├── computer-use/ # HITL-gated browser + terminal lanes (I35)
│ │ ├── multimodal/ # Local audio/video understanding pass
│ │ ├── glossary/ # Implicit-knowledge terminology extraction
│ │ ├── decisions/ # Implicit ADR extraction
│ │ ├── ownership/ # Ownership graph
│ │ ├── premortem/ # Comparable-history risk themes
│ │ ├── metrics/ # DORA calculators + bucketed time series (`nimbus stats`)
│ │ ├── federation/ # Phase 6 Team: query gate, namespaces, RBAC, pairing
│ │ ├── identity/ # OIDC device-code SSO, SCIM provisioning
│ │ ├── teamvault/ # Team-shared credentials + quorum HITL
│ │ ├── share/ # Signed, redacted outbound shares (I27)
│ │ ├── clips/ # Web-clipper surface + pairing window (I30)
│ │ ├── chatops/ # Reply dispatcher (I23)
│ │ ├── policy/ # Signed org policy, monotonic-stricter resolution (I22)
│ │ ├── extensions/ # Extension registry, manifest validator, sandbox
│ │ ├── telemetry/ # Opt-in aggregate telemetry collector
│ │ ├── config/ # Config loader, profiles, env-var overrides, persona
│ │ ├── llm/ # Ollama + llama.cpp providers, router, registry, GPU arbiter
│ │ ├── voice/ # STT (whisper-cli), TTS (NativeTtsProvider), wake-word
│ │ └── ipc/ # JSON-RPC 2.0 server, HTTP API, Prometheus endpoint
│ ├── cli/ # nimbus CLI (+ Ink TUI)
│ │ └── src/commands/ # ask, search, query, why, prove, stats, glossary, decisions,
│ │ # exec, computer, media, config, profile, diag, doctor, db,
│ │ # connector, extension, …
│ ├── ui/ # Tauri 2.0 desktop app (Phase 4; release vehicle in Phase 13)
│ ├── docs/ # Astro Starlight documentation site
│ ├── admin-console/ # Static admin console served at /admin/*
│ └── github-actions/ # First-party GitHub Actions (not workspace members)
├── docs/
│ ├── README.md # this file — the repository landing page
│ ├── architecture.md # subsystem design, IPC catalogue, schema reference
│ ├── SECURITY.md # security model + vulnerability reporting
│ ├── SECURITY-INVARIANTS.md# I1–I36 rationale + anti-patterns
│ ├── roadmap.md # acceptance-criteria-driven roadmap
│ ├── CHANGELOG.md # dated delivery log (canonical)
│ ├── cli-reference.md # full CLI + nimbus.toml reference
│ ├── CONTRIBUTING.md # contributor workflow and constraints
│ ├── CODE_OF_CONDUCT.md # community standards
│ ├── release/ # release runbooks + manual smoke checklist
│ ├── templates/ # copy-paste CI (e.g. extension authors)
│ └── contributors/ # author walkthroughs
├── .github/
│ └── workflows/ # ci.yml, security.yml, codeql.yml, release.yml, …
├── bunfig.toml
└── package.json # Bun workspace rootSeveral surfaces live in their own repos and release independently of the Gateway — see the Ecosystem table below.
Ecosystem
Nimbus is a gateway plus a set of surfaces that talk to it. All of these are separate, independently released repositories:
Repo | What it is |
The extension-authoring contract (npm, MIT) — what a connector is written against | |
Typed IPC wrapper (npm, MIT) — how a client talks to the gateway; consumed by | |
| |
Scaffolding generator for a new connector | |
VS Code / Open VSX extension | |
Chrome + Firefox MV3 web clipper; the gateway-side surface stays in this repo | |
Raycast extension — quick-ask over the local gateway | |
Curated connectors, recipes, extensions and resources |
The SDK and client are MIT, not AGPL — building on Nimbus does not pull the core's license into your project.
Contributing
Architecture is stabilizing; not all interfaces are frozen.
Read
architecture.md— understand the subsystems and their contracts.Review the non-negotiables below — they are not aspirational values; PRs that violate them will not be merged.
Check issues tagged
good first issue.Open a discussion before large PRs.
Adding a connector is the easiest way in. Run create-nimbus-connector from the repository root — bunx create-nimbus-connector --spec ./your-service.spec.json — and it emits the whole connector package: the server, the manifest, the tsconfig, the package.json and a test. See Contributing.
For workflow, verification commands, and PR expectations, see CONTRIBUTING.md. Community standards are in CODE_OF_CONDUCT.md.
Non-negotiables — PRs violating these will not be merged:
Local-first: no credentials or user data leaving the machine without explicit user action
HITL is structural: consent gate in the executor, not the prompt
No plaintext credentials: Vault only
Platform equality: all three platforms, always
MCP as connector standard: Engine never calls cloud APIs directly
No
any: useunknownfor external data; TypeScript strict modeLicense integrity: contributions to core packages must be AGPL-3.0 compatible
Community:
💬 GitHub Discussions — questions, ideas, show-and-tell.
🧩 awesome-nimbus — connectors, recipes, extensions.
Pricing
Tier | For | Status |
Open Source | Individual engineers — AGPL-3.0, full feature set for single-user deployments | Available now |
Team | Shared index namespaces, Team Vault, multi-user HITL, LAN federation — Phase 6 | ✅ Complete |
Enterprise | SSO/SCIM, compliance tooling, audit log shipping, Helm/Docker, SLA support — Phase 12 | Planned |
The Extension SDK (@nimbus-dev/sdk) is MIT-licensed — extension authors have no copyleft obligation.
Commercial license for embedding Nimbus in a product without AGPL obligations, or for organizations that need Team/Enterprise features before those phases ship: contact the maintainers.
License
Dual-licensed by design.
Core (Gateway, CLI, MCP connectors): AGPL-3.0 — see LICENSE. Anyone running Nimbus as a network service must publish their modifications under the same terms. This is intentional: the AGPL protects users by preventing vendors from stripping the privacy guarantees and offering a hosted "Nimbus Cloud."
Extension SDK (@nimbus-dev/sdk) and client library (@nimbus-dev/client): MIT — so extensions and integrations stay unencumbered.
Architecture · Roadmap · CLI Reference · Changelog · Security · Releases
Available Tools
6 toolsgetConnectorStatusA
List Nimbus connector health and sync state for every configured connector.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'List' implies a read-only operation, and 'for every configured connector' discloses the scope (all connectors, not filtered). It does not mention return format or potential errors, but for a simple list operation, the behavior is adequately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It immediately states the action and the target resource, achieving high clarity in minimal space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no params, no output schema), the description covers the core behavior well. It names the output content ('health and sync state') and the scope ('every connector'). It could mention response format or that it returns a list, but that is implied by 'List.' Overall, it is complete enough for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is trivially 100%. Per calibration, a baseline of 4 is appropriate when description need not add parameter details. The description adds no parameter-specific information, which is fine here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('Nimbus connector health and sync state') and scope ('every configured connector'). This clearly distinguishes it from sibling tools which focus on indexes, PRs, deployments, DORA metrics, and incidents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a clear use case: checking connector health and sync status across all connectors. While it doesn't explicitly name alternatives or exclusions, the context is unambiguous and the sibling tools are sufficiently different that no confusion arises.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getDoraMetricsB
Get DORA metrics (deployment frequency, lead time for changes, change failure rate, MTTR) for a configured service. since accepts values like '30d'.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ||
| service | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits on its own. It only mentions 'configured service,' implying a prerequisite, but doesn't explain what configuration entails, auth requirements, rate limits, output format, or error behavior. This is insufficient for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences with no filler. Every word contributes to understanding the tool's core purpose and a parameter detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and only two parameters, the description is too sparse. It fails to explain how metrics are calculated, what 'configured' means, the default 'since' if omitted, or what the response looks like. The tool is moderately complex, and this description leaves major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does add meaning by explaining the 'since' parameter format ('values like '30d'') and hinting that 'service' refers to a configured service. However, it doesn't document any default behavior, acceptable formats for 'service', or further parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: getting DORA metrics with specific metric names. It uses a specific verb ('Get') and resource ('DORA metrics'), and the metrics list (deployment frequency, lead time, etc.) distinguishes it from sibling tools like getRecentDeployments or getRecentIncidents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: you use this when you need DORA metrics for a service. However, there is no explicit guidance on when to prefer this tool over siblings or when not to use it, nor any mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRecentDeploymentsA
List recent deployments from the local index (most recent first). Optionally filter by service.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| service | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds useful context about the data source (local index), ordering (most recent first), and filtering (by service). However, it does not disclose read-only status, rate limits, or return format details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every phrase contributes meaning, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter tool with no output schema, the description covers essential behavior: what it lists, the data source, ordering, and optional filter. It does not explain return structure, but that is not critical for a simple list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains the 'service' parameter's purpose (filtering) but does not elaborate on 'limit' beyond what the schema type implies. Some meaning is added, but not complete coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recent deployments from the local index, with most recent first and optional service filtering. This specific verb+resource+scope distinguishes it from siblings like getRecentPullRequests and getDoraMetrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving recent deployments with optional service filtering, but does not explicitly state when to use this tool instead of others like searchIndex. There are no exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRecentIncidentsA
List recent incidents from the local index (most recent first). Optionally filter by service.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| service | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It mentions the local index source and sorting order, but does not mention read-only nature, potential rate limits, or return format. This is acceptable for a simple list tool but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that communicates the core action, resource, ordering, and optional filter without any wasted words. It is highly concise and direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two optional parameters and no output schema, the description covers the essential context: what is listed, from where, in what order, and the optional filter. Some missing details like limit semantics and return format are minor for this scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that 'service' is an optional filter, but does not explain 'limit' at all. The limit parameter is self-explanatory by name, but the description adds value only for service.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'recent incidents', and the scope 'from the local index' with ordering 'most recent first'. It inherently distinguishes from sibling tools that focus on pull requests, deployments, or Dora metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Optionally filter by service' gives some context for use, but there is no explicit guidance about when to choose this tool over alternatives like searchIndex or other getRecent tools. The usage is implied rather than clearly delineated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRecentPullRequestsA
List recent pull requests from the local index (most recent first). Each item carries its state (open/closed/merged) under meta.state when the connector recorded it — filter on that; the index cannot pre-filter by PR state.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| service | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on the burden. It discloses sort order ('most recent first'), the presence of state under meta.state as conditional ('when the connector recorded it'), and the inability to pre-filter by state. This gives useful behavioral context beyond a simple 'list' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, 39 words, with the main action front-loaded. Every sentence contributes either the core functionality or a key filtering caveat. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only 2 optional params, no annotations, and no output schema. The description explains ordering and the state field, but leaves the 'service' parameter and the term 'connector' undefined. It's adequate for a simple list tool but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the description does not mention 'limit' or 'service'. While 'limit' is self-explanatory, 'service' is ambiguous (which service? what values?). The description adds no meaning to the parameter names, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List recent pull requests from the local index'. It clearly distinguishes this from sibling tools like getRecentDeployments or getDoraMetrics by naming a unique resource (pull requests).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a limitation ('the index cannot pre-filter by PR state') but provides no explicit guidance on when to use this tool vs siblings. It does not say, for example, 'use searchIndex for broader searches' or any alternative scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchIndexA
Search the Nimbus local index across all connected services (Drive, GitHub, Slack, Jira, etc.). Returns ranked items. Optionally filter by service or itemType.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| service | No | ||
| itemType | No | ||
| semantic | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that results are ranked and that it searches across services, implying a read-only operation. However, it does not specify whether results are real-time, any authentication requirements, or potential side effects. The description is accurate but lacks depth on behavior such as caching or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the main action and scope. It includes examples and filters without redundant words. Every sentence adds value, and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters and no output schema, yet the description only vaguely mentions 'ranked items' without specifying return structure. It covers core functionality and service scope but omits details on limit and semantic behavior. Given missing annotations and output schema, this is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains 'service' and 'itemType' as optional filters, and 'query' is implicitly the search term. However, 'limit' and 'semantic' are not described. 'semantic' is especially unclear without explanation, leaving a significant gap for a boolean parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a search over the Nimbus local index across connected services, listing examples. It distinctly separates from sibling tools that focus on specific retrievals (status, recent PRs, deployments, etc.). The verb 'Search' plus resource 'local index' makes the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the general search tool for finding items across services, while siblings are specific getters. It mentions optional filters but does not explicitly state when to use this tool over alternatives. Context is clear enough for an agent to decide, though no direct exclusions or alternative tool references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
TDQS
Each tool has a distinct primary purpose: general search, connector status, recent PRs, deployments, DORA metrics, and incidents. There is some conceptual overlap between searchIndex and the getRecent* helpers, but the descriptions clarify ranked search vs. time-ordered lists.
Tools consistently use camelCase with a 'get' prefix for most queries, and the getRecent* grouping is a strong pattern. The one deviation is searchIndex, which lacks a 'get' prefix but still follows a readable verb_noun structure.
Six tools is well within the ideal 3-15 range for a focused read-only data access server. Each tool covers a distinct, useful capability without bloat.
The surface covers the core read operations for the index: search, connector health, recent item lists, and DORA metrics. Minor gaps like item detail retrieval or additional item types are mitigated by the generic searchIndex tool, which can access any indexed entity.
Maintenance
Related MCP Connectors
One identity across Claude Code, Codex, Cursor, Gemini, Windsurf: shared inbox and handoffs.
Generate, edit, and explore AI images. Flux, Imagen, LoRA identity swap, upscale, and more.
OpenAI-compatible LLM MCP (7 tools); chat via balance key or x402 USDC on Base
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Related MCP Servers
- -
- MIT
- AlicenseAqualityAmaintenanceDigital identity layer for AI — your bio, career, skills, interests, and projects always available to every AI tool. Auto-generates profile from 342+ public APIs, 13 real-time plugins, YAML-based profiles with privacy-first local storage.29318MIT
- AlicenseBqualityBmaintenanceEnables AI assistants to manage GitLab issues, merge requests, pipelines, and access the REST API via the glab CLI.6131MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nimbus-agent/Nimbus'
If you have feedback or need assistance with the MCP directory API, please join our Discord server