adr-new
USE WHEN a load-bearing architectural decision is being made in conversation (database / framework / auth model / integration choice, or explicit rejection of…
USE WHEN auditing logging in a legacy codebase, after adopting the JSON-lines spec, or when user asks to clean up logging. Finds print/console.log/interpolated logger calls and suggests spec- compliant replacements per AGENTS.md. Read-only — never auto-rewrites. Templates per
$ npx -y skills add Filip-Podstavec/claude-leverage --skill log-structured --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/log-structuredContext preview
The summary Claude sees to decide when to auto-load this skill.
USE WHEN auditing logging in a legacy codebase, after adopting the JSON-lines spec, or when user asks to clean up logging. Finds print/console.log/interpolated logger calls and suggests spec- compliant replacements per AGENTS.md. Read-only — never auto-rewrites. Templates per
name: log-structured description: > USE WHEN auditing logging in a legacy codebase, after adopting the JSON-lines spec, or when user asks to clean up logging. Finds print/console.log/interpolated logger calls and suggests spec- compliant replacements per AGENTS.md. Read-only — never auto-rewrites. Templates per language in `templates/logging/`. allowed-tools: - Read - Grep - Glob - Bash(ls:*) - Bash(test:*) argument-hint: "[path] [--lang python|typescript|go|rust|auto]"
Helps retrofit a codebase to the structured-logging spec from `AGENTS.md`:
{"ts":"2026-05-24T12:34:56.789Z","level":"info","trace_id":"a1b2c3","span_id":"4d5e6f","service":"billing","event":"invoice_paid","attrs":{"invoice_id":"inv_789"}}Walks a target path, finds anti-patterns, and emits a structured report with file:line citations and concrete suggested replacements. **Never modifies code** — the user decides per-finding.
| Pattern | Why it's a problem | Suggested fix | |---------|-------------------|---------------| | `print(...)` in production code | No level, no context, no structure | Replace with logger call | | `console.log(...)` in production code | Same; not structured | Replace with structured logger | | `logger.X(f"user {id} did {action}")` (Python) | Values baked into message → agent can't grep `event=did_action` | Move values to `attrs={"user_id": id, "action": action}` | | `` logger.x(`user ${id} did ${action}`) `` (TS/JS) | Same | `logger.info("user_action", { user_id: id, action })` | | `fmt.Printf("user %d ...", id)` followed by `log.Print` | Same | `slog.Info("user_action", "user_id", id)` | | Missing `trace_id` propagation | Can't reconstruct request flow | Wire context-aware logger (template per lang) | | Logging to stdout in a service that should log structured (e.g., `print` in Flask handler) | Operator tooling can't parse | Wire JSON formatter |
1. **Resolve target.** Default `.` (whole repo). If `$ARGUMENTS` has a path, use that. If `--lang <name>` is given, restrict scan to that language; else auto-detect from file extensions.
2. **Detect language(s)** by file extension. Walk only files matching:
`node_modules/`, `dist/`, `build/`, `*.test.*`, `*.spec.*`)
3. **Grep for anti-patterns** in the scoped files. Use `Grep` tool with the patterns documented per-language in [`../../templates/logging/`](../../templates/logging/).
4. **For each finding**, emit:
`see templates/logging/<lang>.md for the logger init`
5. **Summary** at the end:
# Structured logging audit — <YYYY-MM-DD>, <root>
## Findings
### src/billing/charge.py
- **line 47**: `print(f"charged user {user_id}")` →
`logger.info("user_charged", attrs={"user_id": user_id})`
See `templates/logging/python.md` for logger setup.
- **line 89**: `logger.error(f"failed: {e}")` →
`logger.error("charge_failed", attrs={"error": str(e), "trace_id": current_trace_id()})`
### src/api/handler.ts
- **line 23**: `console.log(`req from ${req.ip}`)` →
`logger.info("request_received", { ip: req.ip, route: req.path })`
See `templates/logging/typescript.md`.
## Summary
- 2 files scanned
- 3 findings (2 print/console.log, 1 message-interpolation)
- Language templates: see `templates/logging/{python,typescript}.md`
- This audit is read-only. Apply fixes incrementally — start with the
highest-traffic event types where structured logs pay off fastest.
## Out of scope
- Already-structured logs that just use the wrong field name conventions
(e.g., `userId` vs `user_id`) — that's a separate harmonization pass.
- Logger choice / library swap — this audit assumes you'll wire a
structured logger per the template; it doesn't force a specific library.the prints" — refuse. The user picks which findings matter; some scripts have `print` legitimately (CLI output).
language template, which documents the logger initialization. Don't hallucinate `from app.logger import logger` if the project doesn't have one.
debugging. If user passes `--include-tests`, then scan them too.
line into one finding — file:line citation must be precise.
produce thousands of findings, most are noise after the first 50).
Pairs naturally with `/init-repo` (which can drop the language template into a new project) and with the AIDEV-NOTE convention (anchor the non-obvious logging decisions in code).
Make any repo AI-first - write sustainable code from the start, or refactor a legacy codebase to prepare it for agent-driven development.Building blocks for Claude Code: subagents, slash commands, hooks, and workflow patterns. Copy what you need. A working developer's stack for Claude Code.
Repo: Filip-Podstavec/claude-leverage
USE WHEN a load-bearing architectural decision is being made in conversation (database / framework / auth model / integration choice, or explicit rejection of…
USE WHEN setting up a repo for AI-first work, after a major directory restructure, or when an agent needs structured answers like "which modules are stable?" /…
USE WHEN setting up Codex CLI in a project, tightening sandbox for prod/CI, or when user asks about Codex permissions. Interactive helper for per-project…
USE WHEN setting up a repo for AI-first work (after /init-repo), or when the context-surface hook should start feeding repo conventions to agents before edits.…
USE WHEN the user explicitly asks to verify that this repo's DECLARED build/test/lint commands actually run ("does the quickstart work?", "validate the…
USE WHEN about to open a PR, when teammate asks "what's in this diff?", or when returning to a branch and needing self-orientation. Three modes: `--for…