Agent skill · Audited from source
create-evlog-framework-integration
skill · hugorcd/evlogMIT licenceAudited 22 Oct 2026 · source d5329db59f8b
Is it safe? No — BLOCK, grade F (52/100). We read this skill's source at commit d5329db59f8b and observed network and shell access and a hard-coded secret (see the findings). The audit raised 25 findings, 2 critical or high. What it does: Analyze application logs from the .evlog/logs/ directory. Use when debugging errors, investigating slow requests, understanding request patterns, or answering questions about application behavior. Reads structured…
Cite
Cite this page
ModelsAtlas. “create-evlog-framework-integration (hugorcd/evlog)”. Retrieved 22 Oct 2026. https://modelsatlas.com/skills/hugorcd/create-evlog-framework-integration
Blocked. The page stays public so you can check this skill if someone recommended it to you. The audit found 2 critical or high findings, starting with “Code injection” in packages/cli/src/lib/init/pm.ts:41. Do not install it without reading them.
3 skills are called “create-evlog-framework-integration”. You are viewing hugorcd/evlog. 3 of them are BLOCK.
- hugorcd/evlog★ 1.9k✕BLOCK
- hugorcd/evlog★ 1.9k✕BLOCK
- hugorcd/evlog★ 1.9k✕BLOCK
Trust audit
Audit 0.4.1 · source read 22 Oct 2026
BLOCK means the audit found something that could harm you or your machine. Grade F is shared by 105 of 14,816 audited skills.
What the source does
- FilesystemNone observedNo reads or writes in the source
- NetworkDeclared6 observations
- ShellDeclared4 observations
- DependenciesNot pinnedSome versions float
- SecretsFoundSee the findings; values are never shown
Five audit layers
| Layer | What we check | Result | Findings |
|---|---|---|---|
L0 Provenance | Repo owner, licence, archive status, activity | WARN | 9 |
L1 Static source | Secrets, path traversal, supply chain, hidden code | FAIL | 15 |
L2 Instructions | Prompt injection, authority framing, hidden directives | FAIL | 1 |
L3 Inventory | The files and declarations match the source | PASS | 0 |
L4 Sandbox | Run in isolation and watch behaviour | SKIPPED why | 0 |
Gates applied: no behavioural pass.
Findings (25)
HIGHCode injectioncode.eval_exec · packages/cli/src/lib/init/pm.ts:41
await exec(manager, args, { cwd, timeout: 5 * 60_000 })- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
HIGHPrompt injectionprompt.credential_read · apps/evi/agent/skills/cost-watchdog/SKILL.md:100
- **`anthropic/claude-haiku-5.5`, decided 2026-10-09: replaces `zai/glm-5.3-flash` as the base model.** It runs on the team's Anthropic BYOK key, which the gateway tries first, so its rows report `tot
- Why
- asks the agent to read credentials
- Fix
- —
MEDIUMInventory / provenanceinv.binary · apps/evi/vendor/agent-browser-eve-0.38.1-eve0.64.1.tgz
agent-browser-eve-0.38.1-eve0.64.1.tgz
- Why
- a compiled or binary member cannot be reviewed from source
- Fix
- ship source, or explain the binary in the README
MEDIUMInventory / provenanceinv.binary · apps/just-use-evlog/public/fonts/Geist Pixel Line.otf
Geist Pixel Line.otf
- Why
- a compiled or binary member cannot be reviewed from source
- Fix
- ship source, or explain the binary in the README
MEDIUMNetwork egressnet.beacon_words · apps/next-playground/app/page.tsx:313
id: 'browser-drain-beacon',
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMNetwork egressnet.beacon_words · apps/playground/app/config/tests.config.ts:837
id: 'browser-drain-beacon',
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · packages/evlog/test/e2e/axiom.e2e.ts:126
apiKey: '…',
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · packages/evlog/test/e2e/better-stack.e2e.ts:58
{ apiKey: '…', endpoint },- Why
- No further detail recorded for this rule.
- Fix
- —
LOWInventory / provenanceinv.binary · apps/docs/public/fonts/Geist Pixel Line.otf
Geist Pixel Line.otf
- Why
- a compiled or binary member cannot be reviewed from source
- Fix
- ship source, or explain the binary in the README
LOWInventory / provenanceinv.symlink · README.md
README.md
- Why
- link not followed
- Fix
- —
LOWCode injectioncode.eval_exec · apps/evi/agent/lib/capture.test.ts:91
return new Function('document', 'window', `return ${expression}`)(page.document, page.window)- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
LOWCode injectioncode.eval_exec · apps/evi/agent/lib/content/handoff.test.ts:33
const result = await exec(command.replaceAll('/workspace/repo', path))- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
LOWFilesystem / pathfs.traversal · apps/docs/nuxt.config.ts:15
dir: '../../skills',
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · apps/docs/server/api/__sitemap__/urls.ts:2
import { collectSitemapUrls } from '../../utils/sitemap'- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · apps/docs/server/mcp/tools/estimate-log-cost.ts:8
} from '../../../app/utils/log-cost'
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · apps/evi/agent/lib/content/scan.test.ts:24
const root = resolve(import.meta.dirname, '../../../../..')
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · apps/evi/agent/lib/simplification/specialists.test.ts:4
import architectureAgent from '../../subagents/architecture_reviewer/agent'
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.metadata_ip · apps/evi/agent/lib/capture.test.ts:16
expect(validateCaptureUrl('http://169.254.169.254/latest')).toMatch(/outside the allowed/)- Why
- cloud metadata endpoint: the classic SSRF credential grab
- Fix
- —
LOWNetwork egressnet.metadata_ip · scripts/content-lint/lib/net.test.mjs:6
for (const address of ['127.0.0.1', '10.0.0.1', '172.16.0.1', '172.31.255.255', '192.168.1.1', '169.254.169.254', '0.0.0.0', '100.64.0.1', '::1', 'fc00::1', 'fe80::1', '::ffff:127.0.0.1']) {- Why
- cloud metadata endpoint: the classic SSRF credential grab
- Fix
- —
LOWNetwork egressnet.metadata_ip · scripts/content-lint/lib/net.test.mjs:39
expect(await refuseHost('metadata.google.internal')).toMatch(/local name/)- Why
- cloud metadata endpoint: the classic SSRF credential grab
- Fix
- —
Audit 0.4.1 · source sha d5329db59f8b · 22 Oct 2026Report an issue or request a re-scan
Provenance
Who published it, and what the verdict is pinned to
- Publisherhugorcd GitHub organizationOwner of the repository this skill is read from
- Source folderhugorcd/evlogThe exact folder we audited
- LicenceMITAs the repository states it
- Commit pinned for this verdictd5329db59f8bA new audit runs when the source changes
- Repository statusNot archivedPushed today
- Sandboxed runNot runSkills are read, not executed; layer L4 is skipped
What it tells the agent
Full source on GitHub ↗Its description: Analyze application logs from the .evlog/logs/ directory. Use when debugging errors, investigating slow requests, understanding request patterns, or answering questions about application behavior. Reads structured…
---
name: analyze-logs
description: Analyze application logs from the .evlog/logs/ directory. Use when debugging errors, investigating slow requests, understanding request patterns, or answering questions about application behavior. Reads structured NDJSON wide events written by evlog's file system drain.
license: MIT
metadata:
author: HugoRCD
version: "0.3"
---
# Analyze application logs
Read and analyze structured wide-event logs from the local `.evlog/logs/` directory to debug errors, investigate performance issues, and understand application behavior.
## When to Use
- User asks to debug an error, investigate a bug, or understand why something failed
- User asks about request patterns, slow endpoints, or error rates
- User asks "what happened" or "what's going on" with their application
- User asks to analyze logs, check recent errors, or review application behavior
- User mentions a specific error message or status code they're seeing
## Finding the logs
Try the CLI first; it reads both file layouts, every dated file, and knows where the project's drain writes. Prefer the copy the project installed (`pnpm evlog`, or the equivalent for its package manager). The wrappers that fetch on demand (`npx`, `bunx`, `npm exec`) install `@evlog/cli` when the project has none, which runs a release the lockfile never pinned. Ask before that happens.
```bash
pnpm evlog logs --json # the last 50 events
pnpm evlog logs errors --since 1h --json # what failed
pnpm evlog logs slow --over 1s --json # what was slow, worst first
pnpm evlog logs "$REQUEST_ID" --json # one request, every event with that id
pnpm evlog logs stats --json # per route: count, errors, p50, p95; by status and level
pnpm evlog logs --where 'payment.amount>5000' --where audit.outcome=failure --json
```
`--json` is an envelope (`sources`, `view`, `matched`, `events`; `stats` carries `stats` instead); filters are `--since`, `--until`, `--level`, `--path`, `--status` (`500` or `5xx`), `--where field=value|field>n|field~regex|field|!field` on any dotted field (repeatable), `--limit`, `--dir` for a non-default directory, and `--url` for an app on the memory drain that exposes `readMemoryLogs()` over HTTP. From a monorepo root it reads every app's `.evlog/logs` and labels each event. Docs: https://www.evlog.dev/cli/logs. If the CLI is unavailable or the user declines it, read the files directly as below.
Logs are written by evlog's file system drain as `.jsonl` files, organized by date.
**Format detection**: The drain supports two modes:
- **NDJSON** (default, `pretty: false`): One compact JSON object per line. Parse line-by-line.
- **Pretty** (`pretty: true`): Multi-line indented JSON per event. Parse by reading the entire file and splitting on top-level objects (e.g. `JSON.parse('[' + content.replace(/\}\n\{/g, '},{') + ']')`) or use a streaming JSON parser.
Always check the first few bytes of the file to detect the format: if the second character is a newline or `"`, it's NDJSON; if it's a space or newline followed by spaces, it's pretty-printed.
**Search order.** Check these locations relative to the project root:
1. `.evlog/logs/` (default)
2. Any `.evlog/logs/` inside app directories (monorepos: `apps/*/.evlog/logs/`)
Use glob to find log files:
```
.evlog/logs/*.jsonl
*/.evlog/logs/*.jsonl
apps/*/.evlog/logs/*.jsonl
```
Files are named by date: `2026-03-14.jsonl`. Start with the most recent file.
**Programmatic reading**: instead of hand-parsing, a small script can use the readers shipped with evlog: `readFsLogs()` and `tailFsLogs()` from `evlog/fs` are async generators that handle both formats, date ordering, and filtering. Prefer them when the project already has evlog installed and the analysis needs more than a quick grep.
**Memory drain alternative**: some apps use the Memory adapter (`evlog/memory`) instead of (or alongside) the FS drain, exposing recent events through a dev-only HTTP endpoint via `readMemoryLogs()`. If `.evlog/logs/` is empty but the app wires `createMemoryDrain()`, query that endpoint instead.
## If no logs are found
Before wiring a new drain, you can try `npx evlog doctor --json`, which checks whether `evlog` is installed and whether a local `.evlog/logs` drain already exists (read-only). Optional; skip if the CLI is unavailable.
The file system drain may not be enabled. On Nuxt, Nitro, Next.js, TanStack Start, Hono, Express, or Fastify, the fastest path is the CLI, which detects the framework and wires the fs drain (its default dev drain) in one pass:
```bash
npx evlog init --dry-run --yes # preview first
npx evlog init --yes --drain fs # apply
```
Ask before running it. On other frameworks (or if the user declines), guide the manual setup:
```typescript
import { defineEvlog } from 'evlog'
import { createFsDrain } from 'evlog/fs'
// Nuxt / Nitro: evlog.config.ts at the app root, which the module loads
export default defineEvlog({ drain: createFsDrain() })
// Hono / Express / Elysia: pass in middleware options
app.use(evlog({ drain: createFsDrain() }))
// Fastify: pass in plugin options
await app.register(evlog, { drain: createFsDrain() })
// NestJS: pass in module options
EvlogModule.forRoot({ drain: createFsDrain() })
// Standalone: pass to initLogger
initLogger({ drain: createFsDrain() })
```
After setup, the user needs to trigger some requests to generate logs, then re-analyze.
## Log format
Each line is a self-contained JSON object (wide event). Key fields:
| Field | Type | Description |
|-------|------|-------------|
| `timestamp` | `string` | ISO 8601 timestamp |
| `level` | `string` | `info`, `warn`, `error`, `debug` |
| `service` | `string` | Service name |
| `environment` | `string` | `development`, `production`, etc. |
| `method` | `string` | HTTP method (`GET`, `POST`, etc.) |
| `path` | `string` | Request path (`/api/checkout`) |
| `status` | `number` | HTTP response status code |
| `duration` | `stExcerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.
Install
Pinned to the audited commit d5329db
npm install evlog npm install npx skills add https://www.evlog.dev npm install --save-dev @evlog/cli npm install @nuxthub/core @evlog/nuxthub
git clone https://github.com/hugorcd/evlog git -C evlog checkout d5329db59f8b
Commands as the repository documents them: shown, never run by us. Our verdict covers commit d5329db59f8b only.
Works in which agents?
What its own text says, not a test
| Agent | Status | More |
|---|---|---|
| Claude Code | Mentioned in its text, not tested | Skills for Claude Code · About Claude Code |
| Claude Desktop | Mentioned in its text, not tested | Skills for Claude Desktop · About Claude Desktop |
| Codex | Mentioned in its text, not tested | Skills for Codex · About Codex |
| GitHub Copilot | Mentioned in its text, not tested | Skills for GitHub Copilot · About GitHub Copilot |
| Cursor | Mentioned in its text, not tested | Skills for Cursor · About Cursor |
Audit history
Every audit, every source change
- ✕BLOCK F 52 / 100
first audit · source
d5329db59f8b
README badge
For maintainers · shows the latest audit
[](https://modelsatlas.com/skills/hugorcd/create-evlog-framework-integration/)
The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.
Similar skills
All coding & review skills →hugorcd/evlog
Review code for logging patterns and suggest evlog adoption. Optionally use the evlog CLI, shipped with the evlog package (`evlog init` to wire evlog, `evlog agents` to write the conventions into AGENTS.md, `evlog map`…
hugorcd/evlog
Analyze application logs from the .evlog/logs/ directory. Use when debugging errors, investigating slow requests, understanding request patterns, or answering questions about application behavior. Reads structured…
hugorcd/evlog
Analyze application logs from the .evlog/logs/ directory. Use when debugging errors, investigating slow requests, understanding request patterns, or answering questions about application behavior. Reads structured…
vercel/next.js
Verify Next.js runtime behavior after editing app code. Use this skill to confirm a change actually works in a running app — not just that it compiles or type-checks. Combines /_next/mcp (Next.js's view) with…
vercel/next.js
Optimize the meaningful UI available immediately from a Next.js route on an initial load (hard navigation) or named client-side navigation (soft navigation). Encode the goal as a failing @next/playwright instant() e2e…
vercel/next.js
Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the `cacheComponents` flag, work through a flood of…
Add this badge to your README
[](https://modelsatlas.com/skills/hugorcd/create-evlog-framework-integration/)
<a href="https://modelsatlas.com/skills/hugorcd/create-evlog-framework-integration/"><img src="https://modelsatlas.com/skills/hugorcd/create-evlog-framework-integration/badge.svg" alt="ModelsAtlas: BLOCK F"></a>
Questions about create-evlog-framework-integration
What does the create-evlog-framework-integration skill do?
Is create-evlog-framework-integration safe to install?
What can create-evlog-framework-integration access on my machine?
Which assistants does create-evlog-framework-integration work with?
How current is this page?
Sources
- github.com/hugorcd/evlog — the audited source at commit d5329db59f8b and every finding aboveObserved · 22 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What does the create-evlog-framework-integration skill do?
- Is create-evlog-framework-integration safe to install?
- What can create-evlog-framework-integration access on my machine?