agentleFS
openreviewopenreview/openreview-py/.github/skills/security-audit/SKILL.md

security-audit

Skill273 starsChanged 6 months agoMITView on GitHub

Perform a targeted privacy and integrity audit of an openreview-py stage, process function, builder, journal flow or helper, tracing the readers, signatures, emails and edges it produces for every venue setting and reproducing findings with an integration test. Use when asked to audit security, check who can see a note or an identity, verify anonymity, review conflict detection or assignment visibility, assess a workflow stage end to end, or when the request mentions threat model, data leak, deanonymization or attack surface for any part of this codebase. For reviewing a pull request diff rather than auditing a whole feature, use the code-review skill instead.

We split this skill into the rules it gives an agent

4 rules. 0 are common, 2 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 174 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If it is ambiguous, ask which before starting.

    line 23
  2. Very specific:

    Helper: Read it, grep for callers across openreview/ including */process/ files, and trace both directions.

    line 33
  3. Very specific:

    Use the severity levels and the bar for a finding in the code-review skill's SKILL.md, and for each finding also say whether you read the …

    line 93
  4. Distinctive:

    Ask whether the user wants a PR, and whether multiple confirmed findings should be one PR or several.

    line 114

“Common” is measured: kept by at least 6 in 10 of the 174 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Security Audit

A focused audit of one stage, process function, builder, journal flow or helper. Trace what it writes (readers, nonreaders, writers, signatures, invitees, deanonymizers, edges, emails) under every venue setting that reaches it, and — when something is found — reproduce it with an integration test before proposing a fix.

The rules to audit against are in .github/copilot-instructions.md and the code-review skill's references (.github/skills/code-review/references/). This skill holds only the procedure.

Target

The user supplies one of:

  • a stage — review, meta review, decision, bidding, matching, withdrawal, camera-ready, ethics review
  • a process function — venue/process/review_process.py, journal/process/review_process.py
  • a builder — set_review_invitation, Matching._create_edge_invitation, set_post_submission_invitation
  • a helper — tools.get_conflicts, tools.get_profiles, get_user_hash_key
  • a flow — name removal, profile merge, reviewer recruitment, journal submission to decision

If it is ambiguous, ask which before starting.

Step 1 — Map what the target writes

Build a complete picture before looking for flaws.

Stage or builder. Find the create_*_stage() method in venue/venue.py or journal/journal.py, the set_*_invitation() it calls, and the *Stage class in stages/venue_stages.py that resolves readers. List every reader, nonreader, writer, signature and invitee expression in the invitation template, including ${...} pointers, and what each resolves to per child invitation. Note which Venue or journal.settings attributes each branch depends on.

Process function. Read the file and every client.post_* and client.post_message call in it. For each, record the readers it writes or the recipients it mails and where those values come from (the note, the invitation, domain.content, a literal). Note which domain.content keys are read without defaults.

Helper. Read it, grep for callers across openreview/ including */process/ files, and trace both directions.

Flow. Walk the invitations in order (request → pre-process → process → decision → process), recording readers of each note and who may sign each step.

Record every file and line range — findings need them.

Step 2 — Enumerate the settings

List the venue shapes that reach the target and check each branch:

  • Anonymity: double-blind, single-blind and open venues; the journal anonymity settings.
  • Roles: which optional committees and reviewer roles the venue enables.
  • Visibility: public stages, submission readers, journal submission visibility, and the review and decision release settings.
  • Lifecycle: the submission is undecided, withdrawn, desk-rejected, rejected or accepted when the target runs.
  • Deployment: the classic and template paths, and a second run on a venue with existing data.

tests.md maps each setting to the venue test file that exercises it. Note each combination as covered, not reachable, or not checked.

Step 3 — Work the references

For the target, work every section below that applies. Not every area applies to every target.

AreaSections in .github/skills/code-review/references/
Readers and nonreaderspermission-model.md (Where the lists are built, Public vs restricted, Writers and invitees); invitation-builders.md (Dollar-sign pointers, Mirrors and params)
Anonymitypermission-model.md (Anonymity)
Emailsemails.md
Edges, matching and conflictspermission-model.md (Edges); workflow-stages.md (Invariants to check on every stage change); client-and-tools.md (Conflict detection, Bulk helpers)
Process-function executionprocess-functions.md; architecture.md (Venue configuration, Submission states and invitation source); known-false-positives.md
Profiles and personal dataprofile-management.md; client-and-tools.md (Profiles and emails, Recruitment links)
Workflow integrityworkflow-stages.md; invitation-builders.md (Dates, PC-editable sub-invitations, Redeploy safety); architecture.md (Two deployment paths)
Client and helpersclient-and-tools.md

Step 4 — Write the report

# Security Audit: <target>

## Scope
- Target:
- Files reviewed: <with line ranges>
- Settings covered: <from Step 2, with "not checked" called out>

## Findings

### <CRITICAL|HIGH|MEDIUM|LOW> — <short title>
- Location: file:line
- Setting: which venue configuration and lifecycle state reaches it
- Issue: what is written or sent, to whom, that should not be
- Impact: what the unintended reader learns or can do
- Reproducible: yes / no / uncertain
- Recommendation: how to fix it

## Verified Controls
<readers, nonreaders, signatures, emails and guards that ARE correct, with the setting they were checked under>

## Summary
Critical: N   High: N   Medium: N   Low: N   Informational: N

Use the severity levels and the bar for a finding in the code-review skill's SKILL.md, and for each finding also say whether you read the code path or inferred it.

The Verified Controls section matters. It shows the audit was thorough and stops a short findings list from reading as a shallow one.

Step 5 — Reproduce with a test

Required for every Critical and High finding, and for Medium where feasible. A leak that cannot be reproduced may not be real. tests.md describes the suite, its fixtures, and where a new test goes.

Shape of a reproduction:

  1. In the test file whose venue has the setting from the finding, add the test as tests.md § Writing a test for a fix describes.
  2. Drive the target: post the edit, or wait for the date process, as the role that triggers it.
  3. As the user who should be excluded — an author's client for reviewer identity, a reviewer's client for another reviewer's unreleased review — fetch the note, group, edge or message.
  4. Assert the outcome that should happen: pytest.raises(openreview.OpenReviewException, match=r'.*Forbidden.*'), an exact readers list, or len(openreview_client.get_messages(to=..., subject=...)) == 0.

Show the user the failing output before proposing a fix. If the test passes immediately, either the leak is not real (remove it from the findings) or the test is not reaching the code path (check the setting combination, the lifecycle state and whether the queue was awaited).

Step 6 — Fix and verify

Apply the fix at the specific file and line, re-run the file, then run the other venue files whose settings share the code path (a ReviewStage.get_readers() change touches every conference file). Use the test-runner agent where available.

Ask whether the user wants a PR, and whether multiple confirmed findings should be one PR or several. A PR carries the reproduction test alongside the fix — the test documents the reader set even once it passes.

Download now (ZIP)

  • Other versions195 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 195

    1. ruvnet/claude-flow★ 80ksame name
    2. ruvnet/ruflo★ 79ksame name
    3. PostHog/posthog★ 40ksame name
    4. Donchitos/Claude-Code-Game-Studios★ 27ksame name
    5. cloudflare/security-audit-skill★ 18ksame name
    6. rommapp/romm★ 14ksame name
    7. kubeshark/kubeshark★ 12ksame name
    8. maximhq/bifrost★ 9.3ksame name
    9. mono/SkiaSharp★ 5.6ksame name
    10. MaxMiksa/Auto-Company★ 3.2ksame name

    185 more not listed

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • Used alongsideProjects with it also use create-stories, story-done and 10 more.

    Other files people use alongside this one.

    Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
    • lilangMaxSkill

      create-stories

      Break a single epic into implementable story files. Reads the epic, its GDD, governing ADRs, and control manifest. Each story embeds its GDD requirement TR-ID, ADR guidance, acceptance criteria, story type, and test evidence path. Run after /create-epics for each epic.

      Also in 11 projects that use this

    • lilangMaxSkill

      story-done

      End-of-story completion review. Reads the story file, verifies each acceptance criterion against the implementation, checks for GDD/ADR deviations, prompts code review, updates story status to Complete, and surfaces the next ready story from the sprint.

      Also in 11 projects that use this

    • nicepkgSkill

      community-led-growth

      Expert in community-led growth (CLG) - leveraging user communities to drive acquisition, retention, and expansion. Covers building developer communities, user groups, ambassador programs, and turning customers into advocates. Knows the difference between community as a feature vs community as a growth engine, and how to measure community ROI. Use when "community-led, CLG, ambassador program, champion program, user community, developer community, word of mouth, user group, " mentioned.

      Also in 5 projects that use this

    • nicepkgSkill

      ph-community-outreach

      Engage Reddit, Indie Hackers, Hacker News and other communities for Product Hunt launches. Use this skill to identify relevant communities, craft appropriate posts, and drive cross-platform engagement without appearing spammy.

      Also in 5 projects that use this

    • +8 more from lilangMax
  • In this repository4 other files it gives its agents.

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.