Skip to content
Back to skills

Devlogs

ASecurity

Analyze a dev-session log file (tmp/app.log) written by the LogLayer + Pino logger in a Next.js project using the structured-logging skill's conventions. Finds missing correlation context (requestId/module/userId), sensitive-data leaks that slipped past redaction, structural/readability problems, and source-code call-site violations of the structured-logging rules. Read-only — produces a report, never edits logger calls automatically. Use this whenever the user wants to investigate, debug, or...

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 13, 2026
developmentgobashnextjsnode

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 13, 2026

npx -y skills add JanSzewczyk/claude-plugins --skill devlogs --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Devlogs?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Devlogs
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/janszewczyk-devlogs/badge)](https://www.skillsdirectory.com/skills/janszewczyk-devlogs)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: devlogs
description: Analyze a dev-session log file (tmp/app.log) written by the LogLayer + Pino logger in a Next.js project using the structured-logging skill's conventions. Finds missing correlation context (requestId/module/userId), sensitive-data leaks that slipped past redaction, structural/readability problems, and source-code call-site violations of the structured-logging rules. Read-only — produces a report, never edits logger calls automatically. Use this whenever the user wants to investigate, debug, or make sense of what happened during a local dev session by looking at the logs — trigger even when they only describe a symptom ("something broke overnight", "seeing repeated errors", "did we leak a token in the logs", "check if this log file is safe to share") rather than explicitly saying "audit" or naming tmp/app.log. Also use it to check whether logger.* call sites and the actual log output follow the structured-logging conventions.
allowed-tools: Read, Glob, Grep, Bash
argument-hint: "[path to log file, defaults to tmp/app.log]"
---

# DevLogs

Analyze one development session's log output for quality problems — not a general log
search tool, and not a replacement for `structured-logging` (which defines the
conventions this skill checks *against*).

> - [references/checks.md](./references/checks.md) — the five check categories in detail,
>   with concrete good/bad examples for each. Read this before writing the report.

## Scope

This skill targets the specific pattern documented by the `structured-logging` skill:
**LogLayer wrapping Pino**, with a `LogFileRotationTransport` writing NDJSON to
`<repo>/tmp/app.log` in development, and rotation state tracked in `<repo>/tmp/audit.json`
(`rollingFile`-style: `keepSettings`, a `files` array with `date`/`name`/`hash`). Confirm
`lib/logger.ts` matches this shape before analyzing — if the repo logs differently (a
different framework, a different transport), say so and stop rather than forcing this
skill's checks onto a format they weren't built for.

## Workflow

### 1. Locate the log

Default to `tmp/app.log` relative to the repo root; use the path from `argument-hint` if
given. Also read `tmp/audit.json` — its `files` array shows whether rotation has happened
(more than one entry) and each file's `date`/`hash`, so you know whether "the session"
spans one file or several rotated ones.

If `tmp/app.log` doesn't exist, say so plainly — don't fabricate findings. A missing log
usually means `NODE_ENV` wasn't `development` when the session ran, or nothing has been
logged yet.

### 2. Parse

Each line is one JSON object (Pino NDJSON) — `level`, `message`, `timestamp`, plus
whatever fields were attached via `.withMetadata()`/`.withContext()`. For a large file,
`Bash`+`grep`/`wc -l` to scope before reading the whole thing; malformed lines (a process
killed mid-write) are themselves a finding, not something to silently skip.

### 3. Run the five checks

See [references/checks.md](./references/checks.md) for detection detail on each:

1. **Errors & anomalies** — `error`/`fatal` entries, repeated identical messages (a retry
   loop that never got fixed), timestamp bursts.
2. **Missing context** — entries that should carry correlation fields per the operation
   they represent (an error with no `requestId`/`module`/`userId`), inconsistent field
   naming for the same concept across entries.
3. **Sensitive-data leakage** — values that look like secrets/PII/tokens even though the
   field *name* wasn't one of Pino's configured `redact` paths (redaction is name-based,
   not value-based — this is the defense-in-depth gap it can't cover).
4. **Structural quality / readability** — interpolated values baked into `message` instead
   of separate fields, raw object dumps instead of a human-readable summary, field-naming
   drift against the `structured-logging` reference table.
5. **Source-code compliance** — grep the codebase (not the log file) for call-site
   violations of `structured-logging`'s rules: `.withMetadata({ error })` instead of
   `.withError(error)`, raw `console.*` instead of `logger`/`createLogger`, missing module
   child loggers.

Only report a finding you can point at — a specific log line (timestamp + message) or a
specific `file:line` in source. An unverified suspicion isn't a finding.

### 4. Write the report

```markdown
## Dev log analysis — <path to log file>

**Session:** <timestamp range> · **Lines:** <N> · **Rotation:** <single file | N rotated files per audit.json>

### Errors & anomalies

- `<timestamp>` — <message> — <why it's notable: repeated N times, unhandled, etc.>

### Missing context

- `<timestamp>` — <message> — missing `<field>`, expected because <reasoning>

### Sensitive-data risk

- `<timestamp>` — field `<name>` looks like `<secret type>` — not covered by the current
  `redact` config in `lib/logger.ts` (paths: `<list>`)

### Structure & readability

- `<file:line or timestamp>` — <issue> — <structured-logging rule it violates>

### Source-code compliance

- `<file:line>` — <call site> — <rule violated, from structured-logging skill>

### Looks fine

<Categories with nothing to report — say so explicitly rather than omitting the section,
so the reader knows the check ran.>
```

Keep findings to what's actually evidenced — an empty category is a correct, useful
result, not a gap to pad.

## Handoff

This skill never edits logger calls or log files — it's read-only by design, since a dev
log is evidence of what actually happened and shouldn't be silently rewritten. For fixes,
point at the specific pattern in
[structured-logging/references/patterns.md](../structured-logging/references/patterns.md)
(child loggers, request-ID wiring, error logging, redaction) and let the user apply them,
or offer to make the edit only after they confirm which findings to act on.

## Related Skills

- `structured-logging` — defines the conventions this skill checks logs and code against.

Files in this skill

  • SKILL.md5.9 KB
  • references/checks.md5.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.