Agent skill

Add Audit Event

by wso2 in wso2/agent-manager

Add a semantic audit event to agent-manager-service (the Go control plane).

Apache-2.0Auto-check passedDevOps & Cloud

Install Add Audit Event

skills CLI
$ npx skills add wso2/agent-manager --skill add-audit-event -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install wso2/agent-manager add-audit-event --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/wso2/agent-manager.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/add-audit-event .claude/skills/add-audit-event && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
add-audit-event
GitHub stars
108
Token cost
~2.1k tokens
SKILL.md length
892 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
Apache-2.0

At a glance

Add a semantic audit event to agent-manager-service (the Go control plane).

  • Works in 5 steps: name the action → register class, severity and detail… → choose fail-open or fail-closed → …
  • Changing an operation that touches credentials
  • SKILL.md covers First: do you need this at all?, Step 1 — name the action, Step 2 — register class,… and Step 3 — choose fail-open or…, plus 3 more sections
  • Calls make

What it does

Add Audit Event is an agent skill from wso2/agent-manager. Add a semantic audit event to agent-manager-service (the Go control plane). Use when adding or changing an operation that touches credentials, permissions, membership, deployment or deletion — API keys, tokens, secrets, role/group changes, user lifecycle, deploy/promote/delete, gateway trust config — or when the build fails with "cannot derive an action for audited route". Covers action registration, the fail-open vs fail-closed decision, redaction rules, and the test helper that operations refusing to run…

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in DevOps & Cloud, covering Deployment. The repository describes itself as: WSO2 AI Agent Manager is an open control plane designed for enterprises to deploy, manage, and govern AI agents at scale. The licence is Apache-2.0.

When your agent uses it

  • Changing an operation that touches credentials
  • Deletion — API keys
  • Role/group changes
  • Deploy/promote/delete

Example prompts

  • “cannot derive an action for audited route”
  • “/add-audit-event”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. name the action
  2. register class, severity and detail schema together
  3. choose fail-open or fail-closed
  4. what may go in the record
  5. test it

What it can do on your machine

Read from SKILL.md and the folder at commit 84899da. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • make

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Add Audit Event loads about 2.1k tokens when it runs. Until then it costs about 137 tokens; SKILL.md has 892 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~137
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from wso2/agent-manager at commit 84899da, republished under its Apache-2.0 licence (© wso2). 892 words, ~2,133 tokens.

Download SKILL.mdSave it as .claude/skills/add-audit-event/SKILL.md (or your agent's skills folder).
name
add-audit-event
description
Add a semantic audit event to agent-manager-service (the Go control plane). Use when adding or changing an operation that touches credentials, permissions, membership, deployment or deletion — API keys, tokens, secrets, role/group changes, user lifecycle, deploy/promote/delete, gateway trust config — or when the build fails with "cannot derive an action for audited route". Covers action registration, the fail-open vs fail-closed decision, redaction rules, and the test helper that operations refusing to run unrecorded require.

Add a semantic audit event (agent-manager-service)

Read first: agent-manager-service/AGENTS.md → "Audit logging", and agent-manager-service/docs/audit-logging.md for the full design.

First: do you need this at all?

Every route registered through RouteRegistrar, and every MCP tool registered through addTool, is already audited. That record names the actor, org, action, resource, outcome and source. Most changes need nothing.

You need this skill only for one of these:

SituationWhat to do
Build fails: cannot derive an action for audited route (a route with no rbac.Permission)Step 1 only — add an actionOverrides entry
The route's permission does not describe what it doesStep 1 only
The operation touches credentials, privileges, membership, deployment or deletionAll steps
Everything elseNothing. Stop here.

The test is whether the envelope answers the forensic question. POST .../permissions/add → 200 does not say which permission was granted, so it needs a semantic event. PUT .../agents/{name} returning 200 is self-describing, so it does not.

Step 1 — name the action

Actions read <resource>:<verb>. Reuse an existing constant if one fits; add to audit/actions_domain.go if not.

The same action must be used by every surface that performs the operation — REST, MCP, internal, background. TestDomainActionsMatchRouteDerivedActions fails the build if a semantic emit and its route disagree, because a split action silently halves every query.

If the route derives the wrong label, add one line to actionOverrides in audit/policy.go, keyed by the exact registrar pattern:

go
"POST /orgs/{orgName}/identities/roles/{roleID}/permissions/add": "role:grant-permission",

Step 2 — register class, severity and detail schema together

All three go in audit/actions_domain.go, in the same place, so they cannot drift apart:

go
const ActionThingRotate Action = "thing:rotate"

// inside init()
registerCredential(ActionThingRotate, map[string]FieldKind{
    "ownerName": KindName,
    "keyName":   KindName,
})

Helpers: registerCredential (credential class, always critical) and registerIdentity (identity class, always critical). Otherwise call Register(action, class, severity) and RegisterDetailSchema(action, fields) directly.

ClassUse forSeverity
ClassCredentialkeys, tokens, secrets, OAuth clients, trusted issuersCritical
ClassIdentityusers, groups, roles, permission assignmentCritical
ClassDeploymentbuild, deploy, promote, lifecycle stateNotice–Warning
ClassConfigeverything else that mutatesInfo–Warning

A registered action with no detail schema fails TestRegisteredActionsHaveDetailSchemas. An empty map is a valid answer; skipping the decision is not.

Step 3 — choose fail-open or fail-closed

This is the decision that matters. Get it from the consequence, not the convenience.

Fail-closed — audit.Begin / attempt.Complete. Use when a live credential or a privilege change would otherwise exist with no trace of who caused it. The intent record is written before the change; if that write fails, the operation is refused.

go
attempt, err := audit.Begin(ctx, audit.ActionThingRotate,
    audit.Org(ouID),
    audit.ResourceNamed(audit.ResourceAPIKey, ownerID, keyName),
    audit.Project(projName),
    audit.Environment(envID),
    audit.Detail("ownerType", audit.APIKeyOwnerAgent),
    audit.Detail("keyName", keyName),
)
if err != nil {
    return nil, err // do NOT perform the operation
}

resp, err := s.doTheThing(ctx, ...)
attempt.Complete(ctx, err)
return resp, err

A record left at outcome: "unknown" means the process died mid-operation. That orphan is deliberate forensic signal, not a defect.

Fail-open — audit.Record. Use for frequent operations that issue no credential: builds, console test keys, gateway configuration, monitor lifecycle. Blocking CI on the audit path costs more than it protects.

go
err := s.doTheThing(ctx, ...)
audit.Record(ctx, audit.ActionThingUpdate,
    audit.Org(ouID),
    audit.ResourceNamed("thing", id, name),
    audit.Result(err),
)

audit.RecordAncillary — for a fact about how a request was handled (an authorization bypass, a rate-limited rejection) rather than what it did. Unlike Record, it does not suppress the coverage-tier record, so you keep both.

Emit from the service, not the controller. Controllers handle HTTP; a fail-closed emit is domain behaviour. The one exception is the identity surface, which has no service layer at all (see the documented exception in agent-manager-service/AGENTS.md → Layering) — do not treat it as precedent for new code.

In a controller, use beginAuditOrFail(w, r, operation, failureMessage, action, opts...): it writes the 503 and logs for you, so the refusal cannot be forgotten or answered with the wrong status.

Show full SKILL.md (348 more words)Show less

Step 4 — what may go in the record

  • Never a request or response body. Bodies are structurally out of reach; that is what makes auditing every route safe. Name the fields you want instead.
  • audit.Detail records string, bool, int, int32, int64, float64, []string and fmt.Stringer. Anything else becomes a [unsupported:<type>] marker instead of being serialised. Pass the field you mean rather than relying on that.
  • Never a secret value. Use audit.SecretRef(key, value) (SHA-256 prefix + last four) or record the key name.
  • Free-form maps: keys only. Use audit.AttributeKeySummary(attrs) — it returns sorted key names, a count, and a flag when a key looks credential-shaped. Never the values.
  • URLs: declare them KindURL. Pass the URL as-is; the kind is what strips userinfo, query and fragment at redaction, so a token in ?access_token= or an https://user:pass@host/ cannot reach a record. A test fails if a detail whose name ends in uri, url or endpoint is declared as anything else.
  • Identifiers and scope strings are fine, and usually the point. role:grant-permission records the granted scopes in full; they are identifiers, not credentials.
  • Keys not in the action's schema are dropped and reported under _droppedKeys.

Step 5 — test it

Services that fail closed refuse to run without a recorder, so a bare context.Background() makes them fail by design (audit: recorder unavailable).

go
// Exercising the operation: install a discarding recorder.
resp, err := svc.RotateThing(auditableCtx(t), ...)

// Asserting the refusal itself: bare context.
_, err := svc.RotateThing(context.Background(), ...)
require.ErrorIs(t, err, audit.ErrRecorderUnavailable)

auditableCtx(t) lives in services/audit_testing_test.go. Do not redeclare it.

To assert on the records themselves, write the test inside the audit package — audit.NewMemorySink() is a test double declared in audit/sink_doubles_test.go and is not importable from services/ or controllers/. See audit/actions_domain_test.go. From another package, assert the behaviour (did the operation proceed or refuse) rather than the record.

Done checklist

  • Action reuses the constant its route derives (or actionOverrides makes them agree).
  • Class, severity and detail schema registered together in audit/actions_domain.go.
  • Fail-open vs fail-closed chosen from the consequence, and a fail-closed site aborts on error.
  • No body, no secret value, no struct or map in audit.Detail.
  • Tests exercising the path use auditableCtx(t).
  • make test-unit passes — including TestDomainActionsMatchRouteDerivedActions, TestRegisteredActionsHaveDetailSchemas and TestEveryMutatingRouteIsAudited.
  • docs/audit-logging.md semantic-event table updated if you added an action.
  • CI lint clean: golangci-lint run --config .github/linters/.golangci.yaml ./...

© wso2, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/add-audit-event of wso2/agent-manager.

Open the folder on GitHubat commit 84899da

Compare with similar skills

Add Audit Event next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Add Audit Event compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Add Audit Event this skillwso2/agent-manager108—~2.1kAutomated safety check: PassApache-2.0
Kubeshark Installerkubeshark/kubeshark12k—~3.6kAutomated safety check: NotesApache-2.0
GreptimeDB Dev Docker ImageGreptimeTeam/greptimedb6.7k—~4kAutomated safety check: NotesApache-2.0
KubeSphere ServiceMesh Managerkubesphere/kubesphere17k—~2.4kAutomated safety check: PassCustom licence
Vercelremotion-dev/remotion63k—~1.2kAutomated safety check: PassCustom licence
AWS Cdk Developmentzxkane/aws-skills3672 repos~2.5kAutomated safety check: PassMIT

Similar skills

  • Kubeshark Installer

    kubeshark/kubeshark

    Installs and configures Kubeshark on a Kubernetes cluster, choosing between the quick CLI path and a Helm install with custom values.

    12k GitHub stars~3.6k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • GreptimeDB Dev Docker Image

    GreptimeTeam/greptimedb

    Packages a locally built GreptimeDB debug binary into a development-only Docker image for local-cluster testing, with an optional push to a dev registry.

    6.7k GitHub stars~4k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • KubeSphere ServiceMesh Manager

    kubesphere/kubesphere

    Installs, checks and troubleshoots the KubeSphere ServiceMesh extension (Istio, Kiali, Jaeger), including grayscale release, sidecar injection, topology and tracing issues.

    17k GitHub stars~2.4k tokensUpdated 2 mo ago
    DevOps & CloudAuto-check passed
  • Vercel

    remotion-dev/remotion

    Official

    Set up a Codex monitor for Vercel deployments and preview URLs.

    63k GitHub stars~1.2k tokensUpdated today
    DevOps & CloudAuto-check passed
  • AWS Cdk Development

    zxkane/aws-skills

    AWS Cloud Development Kit (CDK) expert for building cloud infrastructure with TypeScript/Python.

    367 GitHub starsUsed in 2 repos~2.5k tokens
    DevOps & CloudAuto-check passed
  • Senior DevOps Toolkit

    maslennikov-ig/claude-code-orchestrator-kit

    Comprehensive DevOps skill for CI/CD, infrastructure automation, containerization, and cloud platforms (AWS, GCP, Azure). Includes pipeline setup…

    260 GitHub starsUsed in 6 repos~1.1k tokens
    DevOps & CloudAuto-check: notes

More from wso2/agent-manager

  • Add Console API Feature

    wso2/agent-manager

    Add an API-backed feature to the console (React/TypeScript web UI).

    108 GitHub stars~761 tokensUpdated yesterday
    Auto-check passed
  • Add Evaluator

    wso2/agent-manager

    Add a new evaluator to the amp-evaluation Python library. An agent skill from wso2/agent-manager.

    108 GitHub stars~710 tokensUpdated yesterday
    Auto-check passed
  • Add Service Unit Test

    wso2/agent-manager

    Write a service-layer unit test in agent-manager-service (the Go control plane).

    108 GitHub stars~997 tokensUpdated yesterday
    Auto-check passed
  • Add API Resource

    wso2/agent-manager

    Add or change a REST API resource in agent-manager-service (the Go control plane).

    108 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Add Audit Event

What does Add Audit Event do?

Add a semantic audit event to agent-manager-service (the Go control plane). Add Audit Event is an agent skill from wso2/agent-manager. Add a semantic audit event to agent-manager-service (the Go control plane).

When should I use Add Audit Event?

Add Audit Event fits situations like: changing an operation that touches credentials; deletion — API keys; role/group changes; deploy/promote/delete.

How do I install Add Audit Event in Claude Code?

Run `npx skills add wso2/agent-manager --skill add-audit-event -a claude-code`. Or copy the skill folder (.claude/skills/add-audit-event in wso2/agent-manager) into .claude/skills/add-audit-event in your project. Claude Code loads it when a task matches its description.

How do I install Add Audit Event in Codex?

Run `npx skills add wso2/agent-manager --skill add-audit-event -a codex`. Or copy the skill folder (.claude/skills/add-audit-event in wso2/agent-manager) into .agents/skills/add-audit-event in your project. Codex loads it when a task matches its description.

Can I use Add Audit Event in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add wso2/agent-manager --skill add-audit-event -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-audit-event, .gemini/skills/add-audit-event, .github/skills/add-audit-event and .opencode/skills/add-audit-event in your project.

What does Add Audit Event need to run?

Going by SKILL.md and its folder, Add Audit Event needs the command-line tools its instructions call (make).

Does Add Audit Event access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Add Audit Event safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Add Audit Event use?

Add Audit Event is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Add Audit Event use?

About 2.1k tokens (SKILL.md is roughly 8.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Add Audit Event?

Skills that share tags, products or a category with Add Audit Event: Kubeshark Installer (kubeshark/kubeshark, 12k stars), GreptimeDB Dev Docker Image (GreptimeTeam/greptimedb, 6.7k stars), KubeSphere ServiceMesh Manager (kubesphere/kubesphere, 17k stars) and Vercel (remotion-dev/remotion, 63k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Add Audit Event?

wso2 (a GitHub organization) maintains it in wso2/agent-manager, which has 108 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 9, 2026.

Source: wso2/agent-manager on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.