From hoangsa
Use when the user is debugging a bug, tracing an error, or asking why something fails. Examples: "why is X failing?", "where does this error come from?", "trace this bug", "who calls this method?", "this endpoint returns 500".
How this skill is triggered — by the user, by Claude, or both
Slash command
/hoangsa:memory-debuggingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Find the origin of a bug by walking the graph backwards from the
Find the origin of a bug by walking the graph backwards from the
symptom. Recall locates the suspect symbol; memory_symbol_context
walks its callers until you reach the real cause.
1. resources/read hoangsa-memory://memory/LESSONS.md → known-bug lessons first
2. memory_recall({query: "<error or symptom>"}) → find the suspect
3. memory_symbol_context({fqn: <suspect>}) → callers / callees
4. memory_impact({fqn, direction: "up"}) → full upstream
5. Read the suspect + its callers carefully
6. After the fix: memory_lesson_outcome + remember_lesson
A past session may have hit this bug. LESSONS.md entries are keyed
on trigger strings — scan for anything matching the symptom. If a
lesson says "this exact error comes from X", start there.
resources/read { uri: "hoangsa-memory://memory/LESSONS.md" }
Feed the error message literally. Retrieval is strongest on exact tokens (function names, error strings, log lines). For example:
memory_recall { query: "connection refused retry pool exhausted" }
Include the error type, a noun from the failing operation, and any concrete identifier (module, handler, queue name).
Once recall returns a candidate FQN:
memory_symbol_context { fqn: "pool::checkout" }
Pay special attention to:
callers — who invoked the failing path. Bugs often live in the
caller's assumptions, not the callee.callees — what the suspect delegates to. The actual throw site
may be 1–2 hops deeper.references — non-call uses. A misconfigured trait impl, a
generic bound violation, a type that escapes.If context doesn't make the cause obvious, run:
memory_impact { fqn: <suspect>, direction: "up", depth: 3 }
The depth-1 callers are the contexts in which the bug manifests. Often the bug is "caller A passes a value the callee doesn't handle"; seeing all callers at once exposes the outlier.
Once you have a narrow set of suspect files, use Read with line
ranges from the graph results — don't load whole files. The graph
already gave you path:line for every hit.
When the fix lands and tests pass:
memory_lesson_outcome {
signal: "success",
triggers: ["<trigger of any lesson you followed>"]
}
If the bug is durable and non-obvious (not a typo), persist a lesson:
memory_remember_lesson {
trigger: "seeing ETIMEDOUT from the pool on cold start",
advice: "pool::checkout has a 5s dial timeout; raise it or pre-warm
via pool::ensure_min in the init path."
}
Keep the trigger as a situation description, not a command. Lessons fire on situation match; imperatives don't match future recalls.
path:line; use it. Reading a 2000-line file to find a 5-line bug
burns context.If the error message lives in a dependency (e.g. reqwest: connection refused), recall won't find it — the error text isn't in your code.
Recall for the call site instead: "reqwest get client" or the
wrapper function's name. The graph will lead you to the caller, which
is in your code.
npx claudepluginhub unknown-studio-dev/hoangsa --plugin hoangsaTraces bugs, errors, and regressions to their root cause. Follows a systematic investigation path from symptom to fix using file/commit/search tools.
Guides systematic debugging of bugs, test failures, unexpected behavior: memory integrity check, reproduce, isolate, diagnose root cause before fixes.
Root cause analysis for bugs and unexpected behavior. Traces errors through code, uses structured reasoning, and hands off to fix when cause is found. Escalates memory leaks to perf for cost-impact analysis.