Agent Skills CLI
VERIFIEDCold-installed into an empty scratch project. Writes .agents/skills/sechelix/.
Codex scans .agents/skills from the working directory up to the repository root. The Agent Skills CLI installs SecHelix exactly there. Placement is verified here; Codex loading it is vendor-documented and untested by us.
Part of the AppSec agent guide.
Codex discovers Agent Skills from .agents/skills, scanning from the working directory up to the repository root. That makes installing a security skill a file placement problem, not an integration problem: run npx skills@latest add omarmohelal/SecHelix --skill sechelix and SecHelix lands exactly where Codex looks. The installer writing to that path is verified here. Codex loading it is documented by the vendor and has not been observed in our own test record.
What arrives is a workflow file plus a contract: 546 hypothesis records, 17 specialist role profiles, 15 JSON schemas, Gold Check Packs, and eleven read-only adapters that normalize scanner output without deciding whether anything is a vulnerability.
The cross-client installer is the shortest path. It resolves the root skill file and copies the tree into the discovery directory.
| Path | What it is | Status |
|---|---|---|
.agents/skills/sechelix/ | The documented Codex discovery directory. What the installer writes. | Placement verified |
skills/sechelix/ | The vendor-neutral portable bundle. Self-contained, with no parent-directory references. | Bundle verified |
.codex/skills/ | Removed. It was a convenience mirror, not a documented discovery path. | Do not use |
git clone https://github.com/omarmohelal/SecHelix.git
mkdir -p .agents/skills
cp -R SecHelix/skills/sechelix .agents/skills/sechelixIn hosts with a subagent mesh, the independent verification pass runs as a separate agent that never sees the hunter narrative. Without that guarantee, get the same property by splitting the work across two requests and refusing to carry the conclusion between them.
Use SecHelix to audit this repository. Mode STATIC.
Map entrypoints, identities, trust boundaries, and state machines from the code, not from assumption.
Select only applicable catalog hypotheses and label the rest NOT_APPLICABLE, UNKNOWN, or BLOCKED.
Return candidates with an evidence chain. Do not promote anything to VERIFIED in this pass.Then open the second pass with only the candidate. Not the confidence, not the severity you expect, and not the reasoning that produced it.
Here is a candidate finding from a previous review. Treat it as a claim to disprove.
Reconstruct the path from first principles. Do not assume the claim is correct.
Establish or refute each link: attacker control, reachability, boundary failure, safe reproduction,
impact, preconditions, root cause.
Classify it VERIFIED, LIKELY_BUT_UNPROVEN, FALSE_POSITIVE, DUPLICATE_ROOT_CAUSE, or
BLOCKED_BY_ENVIRONMENT, and state the refutation you attempted.The property that matters is what the verifier is denied. A specialist role profile in the bundle states it directly: the verifier must not receive instructions that the candidate is true, or a severity that must be defended.
A meaningful share of the workflow is deterministic Python that imports nothing outside the standard library. You can run it from a terminal, from a Codex session, or from CI, and it returns the same answer every time.
python scripts/validate_contract.py report report.json
python scripts/security_gate.py report.json --policy policies/default.json
python -m adapters.cli semgrep semgrep.json --pretty
python -m reports.report_renderer report.json --format markdown0 for PASS and PASS_WITH_KNOWN_RISK, 1 for BLOCKED, 2 for INCOMPLETE or malformed input.This split is the point. The model does the reading and the reasoning. The contract decides what is allowed to be called a finding, and that decision does not vary between runs or between hosts. Every script above lives in the open repository, and the published run shows what they produced on a real application.
Cold-installed into an empty scratch project. Writes .agents/skills/sechelix/.
Copied to a scratch directory outside the repository; five entry points ran from inside the copy with no parent-directory access.
The vendor documents that Codex scans .agents/skills from the working directory up to the repository root. We have not recorded a Codex session loading it.
.codex/skills/ was dropped because it is not a documented discovery path. Shipping it implied support that was never established.
npx skills@latest add omarmohelal/SecHelix --skill sechelix