CLAUDE

A package that reads session data from coding agents and converts it into one shared format for activity and session tracking. It supports Claude Code, Codex, a generic adapter, and a remote Mewbo adapter.

In plain words
What is it for?
Use it to inspect agent sessions and activity through a common adapter interface, including local filesystem sessions and remote Mewbo sessions.
Why use it?
It keeps the rest of an application independent from each agent’s transcript format and storage method.

Agent

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add agents/bearlike/grove/claude
Clone the repo
git clone --depth 1 https://github.com/bearlike/Grove
Per session 0 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 23,031 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 2 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00000 $0.23031
Opus 5 $0.00000 $0.11515
Sonnet 5 $0.00000 $0.04606
Haiku 4.5 $0.00000 $0.02303

Measured 2d ago against content hash cb8769cee75f, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

CLAUDE scanned grade A with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

- **Handler topology = ONE `command` handler per event; the entry point makes the daemon push** (sidecar write, then a POST to `HOOK_INGEST_ROUTE` — one constant imported by both `hook.py` and the daemon — which awaits a

Runs shell commandslowCapability

Expected in a hook, worth knowing in a rule or an instructions file.

- **`register_mcp` shells out via `subprocess.run` referenced through `grove.core.agents.onboarding.subprocess` — a patch-target trap.** `subprocess` is one shared module object process-wide, so patching `onboarding.subp
src/grove/core/agents/CLAUDE.md · 309 lines

How it starts

The opening of the file, as written. The whole thing — 309 lines — stays where its author put it; the contents beside it link to each section on GitHub.

grove.core.agents — tool-agnostic agent introspection (AgentAdapter + impls)

grove.core · root

This package reads an agent tool's native sessions and normalizes them to the AgentActivity / AgentSession model (frozen dataclasses in model.py); clients and the ActivityService consume only that, never a raw transcript. The AgentAdapter Protocol (base.py) is the seam; impls are ClaudeCodeAdapter (filesystem transcripts), CodexAdapter (filesystem rollout JSONL), GenericAdapter (no-op) and MewboAdapter (REST, all HTTP through grove.core.mewbo.MewboClient, reading GroveConfig.mewbo: base_url, api_key_env — an env-var NAME, never a secret — and timeout_seconds).

remote = True (mewbo alone) means the work runs on a backend and the local tmux pane says nothing about it, so the blend must not demote the adapter's reported WORKING on a quiet pane — gating on tmux read every busy remote agent as IDLE.

The session-read surface is keyed by (cwd, session_id), never by paths — that is what lets a remote adapter fit the seam without faking filesystem Paths. locate_transcripts is the one deliberately filesystem-shaped method; remote adapters return [] and SessionSummary.transcript_path is Optional for the same reason.

An adapter normalizes shape, not semantics (the provider-boundary rule, root): code exists only for parameter/protocol differences, never to correct or second-guess what a model does. A new tool is one adapter module plus one registry.get_adapter entry.

Structured payloads — one recipe, four instances (and two deliberate breaks)

AgentQuestion, FileEdit, TodoList and TaskBoard share one recipe: a *_TOOL_NAMES frozenset plus recognizes(name) as the single definition of "is this that kind of tool call", and a from_tool_call(...) normalizer every adapter calls from one place in its dispatch. Each rides the transcript as its own DigestEntry role, so an old client degrades to a quiet note. A recognized-but-unparseable payload falls through to the generic tool digest — never an empty entry, never a raise.

Read the full file on GitHub · 309 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 309 lines · 0 tokens per session scan A cb8769cee75f

Subscribe to this mod's changes

CLAUDE is an agent published in the GitHub repository bearlike/Grove (2 stars, last pushed 11d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 23,031 tokens. A static security scan graded it A with 2 findings (makes network calls, runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.