Telltale
Inventory
Inventory asks what tooling appears installed, not what actions it completed. Telltale can record installed-agent metadata and configured local MCP servers. It does not inventory skills, plugins, or model routing.
What inventory should collect
Start with low-risk metadata. Installed-agent inventory should confirm tools without reading transcripts, session stores, API keys, settings values, or private logs.
- CLI evidence: executable names on PATH and safe symlink/package-directory resolution.
- Package evidence: known global package roots such as npm, pnpm, bun, Homebrew, WinGet, Scoop, Chocolatey, or native installers.
- Editor evidence: VS Code-style extension IDs and extension directories for local, remote, Cursor, Windsurf, and compatible editors.
- Secondary evidence: globalStorage/config directories, treated as partial because they can remain after uninstall.
- Output evidence: presence, confidence, signal type, and path hashes rather than raw paths when telemetry is emitted.
Agent signals to check
Current agent inventory scope
Codex
Executable: codex. Package evidence: @openai/codex. Common installs include standalone installer, npm global, Homebrew cask, or release binary.
Claude Code
Executable: claude. Package evidence: @anthropic-ai/claude-code. Native installs commonly place versioned files under a per-user Claude directory; package managers may use Homebrew, WinGet, apt, dnf, apk, or npm.
OpenCode
Executable: opencode. Package evidence: opencode-ai. Common installs include the OpenCode installer, npm/pnpm/bun, Homebrew, Scoop, Chocolatey, Arch/AUR, mise, or nix.
Qwen CLI
Executable: qwen. Package evidence: @qwen-code/qwen-code. Common installs include standalone installer, npm, or Homebrew.
OpenClaw
Executable: openclaw. Package evidence: openclaw. Treat install evidence separately from the lower-confidence session-store path.
GitHub Copilot
Extension IDs: github.copilot and github.copilot-chat. Config-only traces, such as a Copilot config directory, are partial or stale evidence unless the extension is installed.
Quick local enumeration
These generic operator checks list command locations and common extension directories. They are not Telltale source-support tests. Roo Code and Kilo Code are legacy: support is no longer maintained. The commands do not read transcript, database, session, or credential contents.
for c in codex claude openclaw qwen opencode kilo kilocode; do command -v "$c" >/dev/null && printf '%s %s
' "$c" "$(command -v "$c")" || printf '%s missing
' "$c"; done; for d in "$HOME/.vscode/extensions" "$HOME/.vscode-server/extensions" "$HOME/.cursor/extensions" "$HOME/.windsurf/extensions"; do [ -d "$d" ] && ls -1 "$d" | grep -Ei '^(github.copilot|github.copilot-chat|rooveterinaryinc.roo-cline|kilocode.kilo-code)-' | sed "s#^#$d/#"; doneUse this as a quick operator check. Telltale telemetry hashes paths before emitting inventory evidence.
$cmds='codex','claude','openclaw','qwen','opencode','kilo','kilocode'; $cmds|%{ $p=(Get-Command $_ -ErrorAction SilentlyContinue).Source; if($p){"$_ $p"}else{"$_ missing"}}; $roots="$env:USERPROFILE.vscodeextensions","$env:USERPROFILE.vscode-serverextensions","$env:USERPROFILE.cursorextensions","$env:USERPROFILE.windsurfextensions"; $ids='github.copilot','github.copilot-chat','rooveterinaryinc.roo-cline','kilocode.kilo-code'; $roots|?{Test-Path $_}|%{$r=$_; Get-ChildItem $r -Directory|?{$n=$_.Name.ToLower(); $ids|?{$n.StartsWith("$($_)-")}}|%{"extension $($_.FullName)"}}PowerShell output is local metadata. Review before sharing because paths can reveal usernames or workstation layout.
How Telltale uses inventory
Telltale keeps inventory separate from session-source discovery. A session source says where activity can be parsed; installed-agent inventory says what tooling appears present. The current scanner emits an install_inventory activity at most once every 24 hours by default, with a configurable interval and an opt-out flag.
- Default cadence: 24 hours.
- Tune with --install-inventory-interval-seconds or TELLTALE_INSTALL_INVENTORY_INTERVAL_SECONDS.
- Use 0 to collect every scan during testing.
- Use --install-inventory-disabled to suppress inventory for a run.
- Client-filtered scans stay scoped to session clients and do not emit the global install inventory event.
Inventory module boundary
Install definitions live in per-agent source modules collected by the static registry. Metadata-only install inventory remains separate from exact-identity session acquisition.
Future inventory surfaces
Static MCP inventory already reads known local configurations when --emit-activity is enabled; it does not connect to servers or enumerate runtime tools. Skills, plugins, model/provider routing, and broader workspace integration inventory are proposed extensions, not current coverage.
