Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
6bcb8df
feat(cli): browse historical security findings
mldangelo-oai Aug 3, 2026
92ceba7
fix(cli): preserve secure repository-scoped finding history
mldangelo-oai Aug 4, 2026
5ac5364
fix(cli): handle nested scan history and truncated findings
mldangelo-oai Aug 4, 2026
ee95518
fix(cli): isolate nested repository scan history
mldangelo-oai Aug 4, 2026
eb813c5
fix(cli): prioritize scanned checkout and restore finding details
mldangelo-oai Aug 4, 2026
33d64a9
Merge remote-tracking branch 'origin/main' into mdangelo/codex/findin…
mldangelo-oai Aug 4, 2026
611e817
fix(cli): preserve complete findings across checkout scopes
mldangelo-oai Aug 4, 2026
d4239ae
fix(cli): retain history across stable target identity changes
mldangelo-oai Aug 4, 2026
683d8ca
fix(cli): protect complete findings and checkout history
mldangelo-oai Aug 4, 2026
b324a61
Merge remote-tracking branch 'origin/main' into mdangelo/codex/findin…
mldangelo-oai Aug 4, 2026
081de32
fix(cli): simplify secure multi-target finding history
mldangelo-oai Aug 4, 2026
20ae93d
fix(cli): honor current checkout ownership in scan history
mldangelo-oai Aug 4, 2026
5e53ab4
fix(cli): restore scan history for relocated checkouts
mldangelo-oai Aug 4, 2026
3d3f80a
fix(cli): isolate checkout history and complete finding details
mldangelo-oai Aug 4, 2026
223ecf3
fix(cli): reject forged current checkout metadata
mldangelo-oai Aug 4, 2026
08c0dd6
fix(cli): address scan history review feedback
mldangelo-oai Aug 4, 2026
f0dc21a
fix(cli): preserve legacy owner isolation and Unicode search
mldangelo-oai Aug 4, 2026
d802813
fix: address findings history review feedback
kmbroai Aug 5, 2026
6bdb89a
Merge main into findings history discovery
kmbroai Aug 5, 2026
4ae5498
Merge branch 'main' into mdangelo/codex/findings-history-discovery
mldangelo-oai Aug 5, 2026
570c5cf
fix: isolate saved findings from forged Git origins
mldangelo-oai Aug 5, 2026
607893f
fix: scope scan matching to trusted checkout identity
mldangelo-oai Aug 5, 2026
ffce046
fix: keep scan matching scoped to checkout owners
mldangelo-oai Aug 5, 2026
2196b04
fix: verify registered worktrees before sharing scans
mldangelo-oai Aug 5, 2026
7cd2576
fix: isolate reused checkouts and sibling scan histories
mldangelo-oai Aug 5, 2026
9a5158e
fix: isolate active findings and checkout ownership history
mldangelo-oai Aug 5, 2026
886aa76
fix: verify ownership across scan history and findings
mldangelo-oai Aug 6, 2026
bd3b626
Merge main and preserve safe checkout identity
mldangelo-oai Aug 10, 2026
7636068
fix(cli): merge main and remove obsolete findings output caps
mldangelo-oai Aug 10, 2026
b3ab615
Verify relocated checkout devices and simplify slow history coverage
mldangelo-oai Aug 10, 2026
5d7b808
Preserve remounted and relocated checkout history safely
mldangelo-oai Aug 10, 2026
0294aca
Recover moved checkouts while verifying cross-device ownership
mldangelo-oai Aug 10, 2026
1663956
fix(workbench): require exact checkout ownership identity
mldangelo-oai Aug 10, 2026
e5bcc05
Merge main and preserve verified findings history
mldangelo-oai Aug 10, 2026
b7c67c7
test(workbench): match completed scans in an existing checkout
mldangelo-oai Aug 10, 2026
55c7a93
fix(workbench): verify identities across finding access paths
mldangelo-oai Aug 10, 2026
25ddb3e
fix(workbench): preserve remediation across filesystem remounts
mldangelo-oai Aug 10, 2026
70584fa
fix(workbench): verify linked checkout owners before comparison
mldangelo-oai Aug 10, 2026
cf41147
fix(workbench): reject comparisons between stale owner scans
mldangelo-oai Aug 10, 2026
3dbb6d8
fix(workbench): require ownership proof for explicit comparisons
mldangelo-oai Aug 10, 2026
927c3d8
fix: require verified owners for scan comparisons
mldangelo-oai Aug 10, 2026
d43fc52
fix: require verified scan owners for bulk matching
mldangelo-oai Aug 10, 2026
beea727
fix(history): retain legacy scans in read-only history
mldangelo-oai Aug 11, 2026
8f80297
Merge remote-tracking branch 'origin/main' into mdangelo/codex/findin…
mldangelo-oai Aug 11, 2026
deb9c13
refactor(findings): resolve checkout ownership in one place
mldangelo-oai Aug 11, 2026
4308466
refactor(findings): centralize checkout ownership and focus history c…
mldangelo-oai Aug 11, 2026
ed6ea80
fix(findings): include linked worktrees and keep active counts consis…
mldangelo-oai Aug 11, 2026
5414e60
fix(findings): verify checkout ownership across history views
mldangelo-oai Aug 11, 2026
74cf79a
fix(findings): isolate ownership epochs and reject altered scan seals
mldangelo-oai Aug 11, 2026
0fc6ee8
fix(findings): require ownership proof before matching clone origins
mldangelo-oai Aug 11, 2026
b5770e0
fix(findings): isolate reused filesystem identities by ownership epoch
mldangelo-oai Aug 11, 2026
04fd585
fix(findings): order ownership epochs by database insertion
mldangelo-oai Aug 11, 2026
f689c38
Merge main and preserve secure findings history
mldangelo-oai Aug 14, 2026
7c8c819
Preserve repository scope and monotonic findings history
mldangelo-oai Aug 14, 2026
eeb2473
Keep historical matching ordered, scoped, and pageable
mldangelo-oai Aug 14, 2026
3d5a52f
Keep latest scan selection and triage monotonic
mldangelo-oai Aug 14, 2026
2b851d9
Keep historical finding confirmation and triage consistent
mldangelo-oai Aug 14, 2026
be05dec
Search every active matched finding occurrence
mldangelo-oai Aug 14, 2026
6b3a9a5
Keep finding access and triage scoped to the verified checkout
mldangelo-oai Aug 14, 2026
0986690
Protect claimed legacy findings on every platform
mldangelo-oai Aug 14, 2026
36196d8
Preserve checkout ownership and monotonic finding decisions
mldangelo-oai Aug 14, 2026
f7a00cd
Exclude owned checkout descendants from global findings
mldangelo-oai Aug 14, 2026
94d3e46
Keep historical finding state and access consistent
mldangelo-oai Aug 14, 2026
54d4964
Align finding terminology and scoped ownership
mldangelo-oai Aug 14, 2026
dc8f656
fix: preserve safe finding history and remediation state
mldangelo-oai Aug 14, 2026
bfc7da4
fix(findings): represent matched groups with active occurrences
mldangelo-oai Aug 14, 2026
b3114c4
fix(findings): preserve legacy scan history without trusting unsealed…
mldangelo-oai Aug 14, 2026
41fe5e2
fix(findings): preserve targetless scan triage history
mldangelo-oai Aug 15, 2026
26017ff
fix(findings): apply aggregate triage before remediation
mldangelo-oai Aug 15, 2026
884a7c3
fix(findings): preserve legacy unsealed finding history
mldangelo-oai Aug 15, 2026
982cd40
fix(findings): reject conflicting repository scopes
mldangelo-oai Aug 15, 2026
534d555
fix(findings): preserve aggregate scan summary history
mldangelo-oai Aug 15, 2026
dc1e121
fix(findings): resolve verified owners of legacy descendants
mldangelo-oai Aug 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,15 @@ Scan history is stored in the Codex Security workbench state directory. If that
directory cannot be written, set `CODEX_SECURITY_STATE_DIR` to a writable
directory outside the repository.

`findings list [repository]` shows open findings across a repository's scans
and identifies findings not confirmed in its latest scan.
Use `scans` to browse previous scans, `scans show` to inspect the latest
completed scan, and `findings` to list saved findings for the current repository.
`findings list [repository]` also identifies findings not confirmed in the latest
scan.
To review every finding from an earlier scan, first run
`findings list --scan SCAN_ID --json`. For each numeric `nextOffset` in the
response, repeat the command with `--offset NEXT_OFFSET`; stop when `nextOffset`
is `null`. Use `findings show OCCURRENCE_ID` for the complete finding and any
saved cross-scan links.

`scans compare BEFORE_SCAN_ID AFTER_SCAN_ID` automatically matches findings by
root cause, reuses saved matches, and identifies new, persisting, reopened,
Expand Down
34 changes: 29 additions & 5 deletions sdk/typescript/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,13 +223,18 @@ npx @openai/codex-security bulk-scan repositories.csv --output-dir /path/outside
npx @openai/codex-security bulk-scan repositories.csv --output-dir /path/outside/repositories/security-scans --scan-prompt-file scan.md --post-scan-prompt-file follow-up.md
npx @openai/codex-security scans list /path/to/repository
npx @openai/codex-security scans list --scan-root /path/outside/repository/results
npx @openai/codex-security scans show
npx @openai/codex-security scans show SCAN_ID
npx @openai/codex-security scans logs SCAN_ID
npx @openai/codex-security scans rerun SCAN_ID
npx @openai/codex-security scans match PREVIOUS_SCAN_ID CURRENT_SCAN_ID
npx @openai/codex-security scans match --all
npx @openai/codex-security scans compare PREVIOUS_SCAN_ID CURRENT_SCAN_ID
npx @openai/codex-security findings
npx @openai/codex-security findings list /path/to/repository
npx @openai/codex-security findings list --severity high --status open
npx @openai/codex-security findings list --scan SCAN_ID --offset 20
npx @openai/codex-security findings show OCCURRENCE_ID
npx @openai/codex-security findings false-positive OCCURRENCE_ID --reason "The route already checks permissions"
npx @openai/codex-security export /path/outside/repository/results --export-format sarif --output /path/outside/repository/results.sarif
npx @openai/codex-security export /path/outside/repository/results --export-format csv --output /path/outside/repository/findings.csv
Expand Down Expand Up @@ -532,11 +537,30 @@ same command to resume.

### Scan history and reruns

`npx @openai/codex-security scans list` lists scans for the current repository. Pass a
repository path to inspect another checkout, `--scan-root DIR` to list scans
whose artifacts are under a particular root. `scans show SCAN_ID` includes the
scan configuration, results, coverage, and artifact locations. Add
`--show-linked-findings` to include finding links from previous scans.
`npx @openai/codex-security scans` lists previous scans for the current
repository. Use `scans list REPOSITORY` to inspect another checkout, or
`scans list --scan-root DIR` to list scans whose artifacts are under a particular
root. `scans show` opens the latest completed scan;
`scans show SCAN_ID` selects another saved scan. Both include scan configuration,
results, coverage, and artifact locations.

Run `findings` or `findings list` to browse open vulnerabilities for the current
repository across saved scans. Add `--all-repositories` to include every saved
repository, or `--scan SCAN_ID` to inspect all findings from one previous scan.
Filter results with `--query TEXT`, `--severity LEVEL`, or
`--status open|closed`; use `--offset N` and `--limit N` to page through the
complete set. Pages contain at most 20 findings.

`findings show OCCURRENCE_ID` opens the selected finding, its remediation advice,
and any saved links to previous occurrences. Finding lists include the
occurrence IDs needed by `findings show` and `findings false-positive`.
Closed finding details show whether the finding was fixed, marked as a false
positive, or ignored.

Add `--show-linked-findings` to `scans show` to include previously saved finding
links. Links appear after running `scans compare BEFORE AFTER` or
`scans match --all`; creating uncached matches starts a Codex comparison and
saves the result.

`scans logs SCAN_ID` shows complete session events from the scan and its
workers, which can include source code and credentials.
Expand Down
8 changes: 7 additions & 1 deletion sdk/typescript/_bundled_plugin/scripts/workbench_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,9 @@ def parse_args(description: str) -> argparse.Namespace:
get_scan.add_argument("--scan-id", required=True)
get_scan.add_argument("--occurrence-id")

get_finding = subparsers.add_parser("get-finding")
Comment thread
mldangelo-oai marked this conversation as resolved.
get_finding.add_argument("--occurrence-id", required=True)

get_scan_feedback = subparsers.add_parser("get-scan-feedback")
get_scan_feedback.add_argument("--scan-id", required=True)

Expand Down Expand Up @@ -169,7 +172,10 @@ def parse_args(description: str) -> argparse.Namespace:
list_global_findings.add_argument("--query")
list_global_findings.add_argument("--severity", choices=FINDING_SEVERITIES)
list_global_findings.add_argument("--status", choices=FINDING_STATUSES)
list_global_findings.add_argument("--target-id")
list_global_findings.add_argument("--repository")
list_global_findings.add_argument("--target-id", action="append")
list_global_findings.add_argument("--target-path", action="append")
list_global_findings.add_argument("--include-resolved", action="store_true")
list_global_findings.add_argument("--offset", type=non_negative_int, default=0)
list_global_findings.add_argument("--limit", type=positive_int, default=FINDINGS_PAGE_MAX)
list_repositories = subparsers.add_parser("list-repositories")
Expand Down
Loading
Loading