CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

audit-log

Durable, access-scoped, append-only record of who changed what app data, when, and whether it was the agent or a human. Use when adding an activity feed or change history, declaring what a mutating action targets, auditing sensitive reads, or answering "what did the agent change / who edited this".

Quality

77%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./.agents/skills/audit-log/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

63%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A dense, highly actionable reference with concrete code, exact API parameters, and named configuration knobs — but it is carrying too much in one file. The attribution/approval internals are a wall of nested prose, and material that belongs in a one-level-deep reference file is fully inlined with no bundle files at all.

Suggestions

Move the execution-frame and attribution internals (the 'runActionInvocation opens a new frame', ACTION_EXECUTION_KEY, and action-frame.ts details) into a references/ file such as ATTRIBUTION.md, keeping a short do/don't rule list in SKILL.md.

Rewrite the 'Approval and an audit override belong to one invocation' bullet as a short bulleted rule list instead of a single ~40-line nested paragraph.

Split the OCSF export mapping details (auditEventToOcsf, unmapped fields) into a reference file and keep only the invocation contract (scope, cursor semantics, time formats) inline.

DimensionReasoningScore

Conciseness

The body is mostly framework-specific and non-redundant (no explaining concepts Claude already knows), but the 'Approval and an audit override belong to one invocation' bullet is a single ~40-line paragraph of nested caveats ('Every defineAction call and every runActionInvocation opens a new frame, so another action it calls, a recursive call, or a later call with a kept context records none...') and the 'Client and approval' bullet runs ~15 lines, both of which could be tightened substantially. Not 2 because there is little generic padding; not 4 because these dense prose sections are noticeably over-long.

3 / 5

Actionability

Concrete, near-executable guidance throughout: a full defineAction example with audit.target/ownerEmail/visibility/summary, an import block for @agent-native/core/audit with orgAdminAudit usage, recordOrgAdminAuditEvent with routeAuditAttribution(event), specific actions with exact filters ('sinceMs (inclusive), beforeMs (exclusive), with limit and offset paging'), and named env vars (AGENT_NATIVE_AUDIT_RETENTION_DAYS, AGENT_NATIVE_AUDIT_ENABLED). Not 5 because examples contain elisions and undefined placeholders (/* ... */, userEmail, orgId, event) and no end-to-end useActionQuery sample is shown.

4 / 5

Workflow Clarity

Each task is clearly laid out: declare the target (with example and 'The minimum useful addition is target: () => ({ type, id })'), org-admin changes (two code paths with when to use each), and reading the log (full filter/paging semantics plus the OCSF cursor checkpoint 'store every returned nextCursor, including on empty pages'). Not 5 because the approval/attribution rules are scattered through prose without a sequenced decision path and there is no explicit error-recovery flow; the destructive/batch cap does not apply since the log is append-only and exports are reads.

4 / 5

Progressive Disclosure

No bundle files exist (no references/, scripts/, or assets/), so everything — including ~50 lines of implementation internals ('The frame and its evidence live in action-frame.ts, and runActionInvocation in action-invocation.ts, both outside the package exports...') and OCSF mapping details ('The mapper is auditEventToOcsf in audit/ocsf.ts...') — is inlined in a single 245-line SKILL.md. Section headers and a visibility table provide structure, matching anchor 3's 'some structure but content that should be separate is inline'; not 2 because headers and a table make it navigable; not 4 because this implementation-level reference material clearly belongs in a separate one-level-deep reference file.

3 / 5

Total

14

/

20

Passed

Description

83%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description that explicitly answers both what and when with concrete, natural trigger phrases and a precise definition of the artifact. Minor room to improve: surface the querying/export capability explicitly and add a few synonyms (audit trail, changelog) to widen trigger coverage and reduce overlap on 'activity feed'.

DimensionReasoningScore

Specificity

The description names concrete use-cases — 'adding an activity feed or change history, declaring what a mutating action targets, auditing sensitive reads' — and a precise artifact ('Durable, access-scoped, append-only record of who changed what app data, when, and whether it was the agent or a human'). Not 5 because read-side capabilities (querying/exporting the log) are only implied by 'answering "what did the agent change / who edited this"', leaving minor coverage gaps; well above 3's 1-2 concrete actions.

4 / 5

Completeness

Both what and when are explicit and concrete: 'Durable, access-scoped, append-only record of who changed what app data... agent or a human' (what) followed by 'Use when adding an activity feed or change history, declaring what a mutating action targets, auditing sensitive reads, or answering...' (when, with concrete trigger phrases). Matches the score-5 anchor exactly.

5 / 5

Trigger Term Quality

Natural phrases users would actually say are present: 'activity feed', 'change history', 'auditing sensitive reads', 'who edited this', 'what did the agent change'. Not 5 because common synonyms like 'audit trail', 'changelog', or 'compliance' are missing; clearly above 3, which requires only some relevant keywords.

4 / 5

Distinctiveness Conflict Risk

The audit niche is clear and well-scoped (append-only, agent-vs-human attribution, access-scoped), so conflict risk is low. Not 5 because the trigger 'adding an activity feed or change history' could also plausibly fire for a generic UI/frontend skill; not 3 because the core triggers are unmistakably audit-specific.

4 / 5

Total

17

/

20

Passed

Validation

81%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 13 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

metadata_field

'metadata' should map string keys to string values

Warning

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

13

/

16

Passed

Repository

BuilderIO/agent-native

Path

.agents/skills/audit-log/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.