---
title: Agent Tools (consolidated dashboard)
---

# Agent Tools (consolidated dashboard)

## What it is

**Agent Tools** is the sidebar parent group that nests Omniscio's tool- and key-related virtual projects under a single collapsible row, plus a dashboard panel. Three are tracked by the dashboard usage roll-up — **CLI Tools**, **Skills**, and **MCP Servers** — and one key surface is nested below them: **API Keys** (a tabbed hub combining your personal gateway key + credit balance with a read-only inventory of every key/secret on the machine). The API Keys panel is full-pane and is NOT part of the dashboard roll-up. Two more virtual projects — **Agent Email** and **Browser Logins** — are nested under Agent Tools as well (also outside the dashboard roll-up). Before consolidation the tool rows lived as separate top-level entries in the amc-builtin section of the sidebar; they're now grouped under Agent Tools so the sidebar reads as "what's installed for my agents" rather than unrelated entries with the same shape.

The group is purely a presentation layer — there's no new database table, no new scanner, and no new auth surface. Clicking the parent row swaps the right pane to the **Agent Tools dashboard**: a three-tile count grid (CLI Tools / Skills / MCP Servers), a "Top invoked · last 30 days" table, and a "Recent activity" list. Clicking any tile or row jumps you into the child view that owns the detail.

## Where to find it

### How to use it

1. **Find Agent Tools in the left sidebar.** It's the first entry in the amc-builtin block (the alphabetically-sorted block of built-in views — "Ag" sorts before "AI Coaching", "Approvals", etc.). The row uses the same robot icon as the dashboard panel.
2. **Click the row to open the dashboard.** The right pane shows three tiles, a top-invoked table, and a recent-activity list. Loading from a cold cache takes <300ms; subsequent loads in the same 30-second window are instant.
3. **Click a tile to jump into a child view.** The **CLI Tools** tile opens the existing tools view; **Skills** opens the skills catalog; **MCP Servers** opens the configured-servers list. Each child still owns its own kebab actions, sort dropdowns, and detail panes — the dashboard doesn't replace them.
4. **Expand/collapse the group.** Click the chevron next to the row to fold the children out of sight (handy if you're focused on Sessions or Cron Jobs and don't need the tool rows visible). While expanded, the children sit **indented one level to the right** of the parent row, and a thin horizontal **divider line is drawn beneath the last child** (API Keys) to mark where the group ends — the same separator style used between manual project groups. The collapsed state is persisted as `agentToolsCollapsed: boolean` in `AppSettings`, so it survives restarts. The dashboard panel still opens when you click the parent row regardless of collapsed state.
5. **Top invoked / recent activity rows are clickable.** Each row in either table jumps to the owning child view (skills row → Skills, MCP row → MCP Servers). The CLI Tools tile is the only way to reach the tools child from the dashboard — tool invocations aren't tracked in `tool_invocations` (which is skill/MCP only), so they don't appear in the top-invoked or recent tables.
6. **Move a member out of the group** by dragging it to a new sidebar position or right-clicking and choosing **Remove from Category**. Right-click the solo item and choose **Return to [group name]** to put it back.

## How it behaves

### How it works

The parent group is registered as a virtual project via `AGENT_TOOLS_PROJECT_ID = '__agent_tools__'` in [/src/shared/virtual-project-ids.ts](/src/shared/virtual-project-ids.ts), with a manifest entry in [/src/shared/integration-registry.ts](/src/shared/integration-registry.ts) at the top of the registry (its `displayName: 'Agent Tools'` makes it the first amc-builtin entry under `localeCompare('en')` sort). The six children — `tools`, `mcp-servers`, `skills`, `api-keys`, `agent-email`, `browser-logins` — each carry a `parentGroupId: 'agent-tools'` field on their manifest entries (their render order follows the registry's A-Z-by-displayName sort, except `agent-email` is pinned first and `api-keys` right after `skills` via `amcDisplayOrderKey` overrides); the registry validator enforces four invariants on `parentGroupId` (referenced parent exists, parent is `kind: 'amc-builtin'`, no nesting deeper than one level, no self-reference). The sidebar component groups children under their declared parent at render time — there's no change to the underlying integration model. Each child wrapper gets a `pl-9` indent so its row sits to the right of the parent (whose content is already pushed past the chevron column), and the last child renders a `data-sidebar-group-end="agent-tools"` separator (`h-px bg-surface-300`) — the same rule the sidebar draws at the end of a manual divider group (the group markers are now generalised across Agent Tools / Automation / Insights, each scoped by its group id). Collapsing unmounts the children, so the separator unmounts with them; it never renders while collapsed.

The dashboard panel is [/src/renderer/src/features/agent-tools/AgentToolsDashboard.tsx](/src/renderer/src/features/agent-tools/AgentToolsDashboard.tsx), lazy-imported directly from the integration UI registry [/src/renderer/src/integrations/ui-registry.ts](/src/renderer/src/integrations/ui-registry.ts) (via `import('../features/agent-tools/AgentToolsDashboard')`). It fires a single IPC call — `AGENT_TOOLS_DASHBOARD_SUMMARY` — and re-fires on `tool-invocations:scanner-progress` and `skills:list-changed` push events so counts and recent rows stay live without polling. The backend handler in [/src/main/ipc/agent-tools-handlers.ts](/src/main/ipc/agent-tools-handlers.ts) builds the summary by reading the skills service's `listInstalled()`, counting `mcpServers` keys from `~/.claude.json`, reading `listDetectedTools()` from SQLite, and querying `tool_invocations` for top-N (30-day window, capped at 10) + recent-N (capped at 10). A 30-second in-memory cache absorbs repeated mounts; the cache is wiped when either invalidating channel fires through the `onPush` bus, so the dashboard auto-refreshes when a session finishes invoking new tools or the user installs a new skill. There's no schema change — `tool_invocations`, `skills`, and `detected_tools` already exist for the child views; the dashboard handler just aggregates over them.

## Related

- [use-skills.md](use-skills.md) — the nested Skills child view (browse, install, edit skills)
- [mcp-servers.md](mcp-servers.md) — the nested MCP Servers child view (configured servers + usage tracking)
