EXAMPLES.md
# commit-context worked examples
## 1. Line range with a linked session
User: "Why is this retry loop here?" (pointing at lines 40-52 of refresh.ts)
Find the SHA:
```bash
git blame -L 40,52 src/auth/refresh.ts
# 9a1b2c3d (dev 2026-06-07) ... retry on revoked token
```
Look it up:
```json
memory_commit_lookup { "sha": "9a1b2c3d4e5f60718293a4b5c6d7e8f901234567" }
```
Response:
```json
{
"commit": { "sha": "9a1b2c3d...", "short": "9a1b2c3", "branch": "main",
"author": "dev", "message": "rotate refresh tokens" },
"sessions": [ { "id": "7f3a9c21", "project": "app", "observationCount": 14,
"summary": "Reworked refresh rotation" } ]
}
```
Present:
> `9a1b2c3` on `main` by dev: "rotate refresh tokens". Linked to session
> `7f3a9c2` "Auth refresh rework" (14 obs). The retry loop handles a token
> revoked mid-flight, per the session's high-importance observations.
## 2. Function lookup, commit predates linking
User: "What was the agent doing when it wrote validateScope?"
```bash
git log -L :validateScope:src/auth/scope.ts -n 1
# 1122aabb ...
```
```json
memory_commit_lookup { "sha": "1122aabbccddeeff00112233445566778899aabb" }
```
Response:
```json
{ "commit": null }
```
Present:
> `1122aab` predates agent session linking, so there is no recorded session.
> From `git show`: it added `validateScope` to enforce per-token scopes. I can
> show the full diff if useful.
## 3. Bare path
User: "Give me context on src/middleware/limit.ts."
```bash
git log -n 1 -- src/middleware/limit.ts
```
Take the SHA, run `memory_commit_lookup`, present commit plus linked session in
the same shape as example 1.
SKILL.md
---
name: commit-context
description: Trace a file, function, or line back to the agent session that produced its current commit. Use when the user asks "why is this code here", "what was the agent doing when this changed", "who wrote this", or wants context on a specific location in the codebase.
argument-hint: "[file, function, or line]"
user-invocable: true
---
The user wants commit context for: $ARGUMENTS
## Quick start
```bash
git blame -L 40,52 src/auth/refresh.ts # -> SHA 9a1b2c3d
```
```json
memory_commit_lookup { "sha": "9a1b2c3d4e5f60718293a4b5c6d7e8f901234567" }
```
Expected output:
```text
9a1b2c3 on main by dev: "rotate refresh tokens"
Linked session 7f3a9c2 "Auth refresh rework", 14 obs.
```
## Why
Report only what git and the lookup return. When the lookup gives `commit: null`,
the commit predates session linking; do not invent intent.
## Workflow
1. Find the SHA: `git blame -L <start>,<end> <file>` for a line range;
`git log -L :<function>:<file>` for a function; `git log -n 1 -- <file>` for a
bare path.
2. Look it up: `memory_commit_lookup { "sha": "<full-sha>" }`.
3. Present the commit (sha, short sha, branch, author, message), the linked
session(s) (id, project, started/ended, observation count, summary), and the
importance >= 7 observations via `memory_recall` when available.
## Anti-patterns
WRONG: lookup returns `{ "commit": null }`, you narrate "the agent was
refactoring auth" from the diff alone.
RIGHT: "This commit predates session linking, so there is no recorded agent
session. From `git show`: it changed token rotation in refresh.ts."
## Checklist
- SHA came from git blame/log, not a guess.
- `commit: null` reported as "predates linking", no fabricated session.
- Session details quote the lookup response verbatim.
- No intent claimed beyond what observations state.
## See also
- `commit-history`: list many agent-linked commits at once.
- `recall`: dig deeper into the linked session's observations.
## Troubleshooting
See [TROUBLESHOOTING.md](TROUBLESHOOTING.md) if `memory_commit_lookup` is not available.
TROUBLESHOOTING.md
<!-- AUTOGEN:troubleshooting START - generated by scripts/skills/generate.ts, do not edit by hand -->
# Troubleshooting agentmemory skills
Recovery steps for separately installed skills. This document is generated into
each skill directory so native skill readers can open it without parent traversal.
## "MCP tool not available"
Missing tools can mean a stopped MCP process, a disconnected daemon, or an
explicitly reduced tool surface. Walk these in order:
1. Identify the host. In Claude Code, inspect `/plugin list` and `/mcp`.
In Hermes, inspect the configured memory provider and `mcp_servers` separately.
In OpenClaw, validate the host configuration and inspect its MCP servers and
native plugins separately. In Pi or OMP, inspect `/agentmemory-status` and the
MCP inventory separately; native save/search does not prove the broader tools
are connected. Do not run another host's setup commands.
2. Restart or reload the affected host connection after configuration changes.
3. Inspect the connected tool inventory. Hermes may namespace MCP tools; invoke
the actual advertised names and schemas. A native memory provider is not
proof that every MCP tool or shared skill is available.
4. Check `agentmemory status` and the daemon's `AGENTMEMORY_TOOLS` setting.
Codex's bundled bridge lists the daemon's enabled tools. The standalone shim
used by other hosts can fall back to seven basic tools with a separate store.
Do not claim full daemon functionality based on those seven tools.
5. If `agentmemory connect codex` and the Codex plugin are both enabled, choose
one MCP connection. Check `/hooks` before adding global hook fallbacks.
Hermes, OpenClaw, Pi and OMP connector installations bundle skills; other hosts
may install them separately. Check the host's skill inventory and open this file
from the installed skill directory. Test automatic capture with a real turn and
a recorded observation; tool connectivity alone does not establish lifecycle
capture.
An outage or timeout is not an empty search result. Report the failure. A write
may have committed before the response was lost; inspect state before retrying.
## REST fallback
When the MCP tools stay unavailable but the daemon is running, call the REST
API directly:
1. Set `AGENTMEMORY_URL` to the daemon base URL (default `http://localhost:3111`).
2. The REST API requires a bearer credential by default. Use the host's explicit
`AGENTMEMORY_SECRET`; for loopback URLs only, fall back to the secret in
`~/.agentmemory/.env` and then `~/.agentmemory/secret`. Load the value locally
without displaying it. Never send a local-file secret to a remote URL.
If `AGENTMEMORY_CREDENTIAL_MODE=explicit`, require the explicit host credential
and do not read local credential files.
Authenticated REST fallback requests require HTTPS for non-loopback
URLs; HTTP is allowed for loopback URLs (`localhost`, `127.0.0.0/8`, or `[::1]`).
Reject redirects on authenticated requests. Do not print or save the secret.
Endpoint map by skill:
| Skill | REST call |
| --------------- | --------------------------------------------------------------- |
| remember | `POST /agentmemory/remember` |
| recall | `POST /agentmemory/smart-search` |
| recap | `GET /agentmemory/sessions` + `POST /agentmemory/smart-search` |
| handoff | `GET /agentmemory/sessions` + `POST /agentmemory/smart-search` |
| session-history | `GET /agentmemory/sessions` |
| commit-context | `GET /agentmemory/session/by-commit?sha=<sha>` |
| commit-history | `GET /agentmemory/commits` (URL-encode every query param) |
The MCP host reads the plugin MCP configuration. Restart the daemon after
changing its configuration, then restart or reconnect the host MCP process after
changing its URL or explicit secret. The local bridge reads the credential files
for each request; it does not inherit other daemon `.env` settings.
<!-- AUTOGEN:troubleshooting END -->