bama
BAMA: 모든 Mac 앱을 만들 수 있습니다
Agent skill: am i cooked? Checks your lockfiles against live CVE data (npm, pnpm, yarn, pip, poetry, pub), then fixes safely on a branch.
스킬JavaScript · PythonGitHub @noushiFlex직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
설치형 프로젝트는 배포 도메인 없이도 확인할 수 있습니다. 개인 저장소는 GitHub 로그인으로, 조직 저장소는 위의 저장소 확인 파일로 직접 확인해 주세요.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗npx skills add noushiFlex/am-i-cooked
Ask your coding agent "am i cooked?". It reads your lockfiles, matches the exact versions you run against live vulnerability data, and answers with a verdict, a risk score and an upgrade plan. If you say yes, it upgrades on a separate branch, runs your tests after each step, re-scans to prove the CVEs are gone, and stops before pushing.
Install · What you get · Use it without an agent · CI · Supported lockfiles · Safety · FAQ
safe, a bit cooked, cooked, or unknown when nothing could be checked. It never says safe on an empty scan.--baseline re-scan to confirm.Real before/after run: examples/before-after.
| Verdict | Meaning |
|---|---|
| safe | No known vulnerability matches your versions. Not a guarantee. |
| a bit cooked | Vulnerable packages, but nothing actively exploited or critical. |
| cooked | Listed in CISA KEV, or CVSS >= 9, or CVSS >= 7 with exploit signals. |
| unknown | Nothing was checked: no supported lockfile, or only unpinned ranges like django>=5.1. |
The risk score takes the worst finding (CVSS / 10, times 1 for KEV, 0.9 if an exploit was seen, 0.75 otherwise), adds 2 per extra finding up to +15, and caps at 100. "Theoretical" means no known exploitation. It does not mean unreachable: this is not a reachability analysis.
Claude Code
npx skills add noushiFlex/am-i-cooked
or by hand:
git clone https://github.com/noushiFlex/am-i-cooked
cp -R am-i-cooked/skills/am-i-cooked ~/.claude/skills/
Cursor, Codex and other agents
npx skills add noushiFlex/am-i-cooked -a cursor # or -a codex, or -a '*' for every agent
Ready-made instructions to paste: Cursor rule, AGENTS.md snippet, Copilot instructions.
Then, in your project, ask: am i cooked?
The scanner is one file, no dependencies, Node 18+.
node skills/am-i-cooked/scripts/scan.mjs . # human report
node skills/am-i-cooked/scripts/scan.mjs . --json # structured, see report-schema.json
node skills/am-i-cooked/scripts/scan.mjs . --markdown # PR comment / job summary
node skills/am-i-cooked/scripts/scan.mjs . --sarif # GitHub code scanning
| Flag | What it does |
|---|---|
--fail-on=any|cooked|kev|none | Exit 1 at this threshold. Default any. |
--strict | Exit 2 if any lockfile failed to parse or any git/file dependency was not checked. |
--ignore=ID,ID | Hide findings you accepted. Also read from .cookedignore. |
--baseline=before.json | Compare with an earlier --json report: fixed, remaining, new. |
--offline | Answer from the local cache only. Fails loudly on a miss. |
--no-cache | Force fresh answers. |
Exit codes: 0 pass, 1 failed the --fail-on threshold, 2 nothing checked, scan error, or --strict incomplete.
Hide a finding you reviewed, with --ignore=CVE-2020-28500 or a .cookedignore file at the root of the scanned directory:
# lodash ReDoS, our input is never user-controlled
CVE-2020-28500
Use the id the report prints. Ignored findings are counted (ignored in the JSON) and never counted in the verdict, so write the reason in the comment. The agent never edits this file.
node skills/am-i-cooked/scripts/scan.mjs . --json > before.json
# ... upgrade ...
node skills/am-i-cooked/scripts/scan.mjs . --baseline=before.json
# Since baseline: cooked -> safe. 5 fixed, 0 remaining, 0 new.
Git and file dependencies are not published versions, so they cannot be matched. They are listed as a warning and the scan goes on. --strict turns that into a failure. Findings are tagged [direct] or [transitive] where the lockfile says so (package-lock.json, pubspec.lock, Gemfile.lock, packages.lock.json), and transitive rows tell you to upgrade the parent first.
Answers are cached for 6 hours in ~/.cache/am-i-cooked (override with AM_I_COOKED_CACHE). Requests retry with backoff on rate limits and server errors, and fall back to stale cache if the network is down. --offline needs one earlier online scan of the same lockfiles.
- uses: actions/checkout@v4
- uses: noushiFlex/am-i-cooked@main
with:
fail-on: cooked # any | cooked | kev | none
It writes the Markdown report to the job summary and fails the job at the threshold you pick. With code scanning alerts:
- run: |
git clone --depth 1 https://github.com/noushiFlex/am-i-cooked /tmp/aic
node /tmp/aic/skills/am-i-cooked/scripts/scan.mjs . --sarif --fail-on=none > am-i-cooked.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: am-i-cooked.sarif
| Lockfile | Ecosystem |
|---|---|
package-lock.json, pnpm-lock.yaml, yarn.lock, bun.lock | npm |
requirements*.txt (pinned with ==), poetry.lock, uv.lock | PyPI |
pubspec.lock | Pub (Dart/Flutter) |
Cargo.lock | crates.io (Rust) |
go.sum | Go |
Gemfile.lock | RubyGems |
composer.lock | Packagist (PHP) |
gradle.lockfile (also *-gradle.lockfile) | Maven (Java/Kotlin) |
packages.lock.json | NuGet (.NET) |
mix.lock | Hex (Elixir) |
Package.resolved | SwiftURL (Swift Package Manager) |
cabal.project.freeze, stack.yaml.lock | Hackage (Haskell) |
Monorepos work: lockfiles are found up to four levels deep, skipping node_modules, .git, build, target, vendor and similar.
Not supported: pom.xml (version ranges, no lockfile: use Gradle locking or mvn dependency:tree), CocoaPods (OSV.dev has no CocoaPods ecosystem, so nothing could be matched), and manifests without a lockfile.
Details and endpoints: SOURCES.md.
fix/cves-<date> branch. Never on your default branch.How is this different from osv-scanner, Dependabot or npm audit? osv-scanner is the closest tool and does the matching well. This adds exploit signals (CISA KEV, EPSS), a risk score, and above all the agent skill: guardrails against invented CVE data and a fix flow that works on a branch, asks before risky majors and proves the result. Dependabot opens PRs on a schedule; this answers "am I exposed right now" on demand. npm audit only knows npm.
Does it send my code anywhere? No. Only package names and versions are sent to OSV.dev and cve.now.
Why unknown instead of safe? If nothing was checked (no lockfile, only unpinned ranges, an unparseable file), saying safe would be a false assurance. Pin your versions (uv lock, pip freeze, poetry lock) and scan again.
My requirements.txt only has >= ranges. Ranges cannot be matched. Scan your installed environment instead: pip freeze > requirements.txt in a scratch folder, then scan that folder.
A safe verdict is not proof of safety. Vulnerabilities without version data cannot be matched, vendor advisories without a CVE or GHSA record are not covered, and git dependencies are reported but not checked. Packages from a private registry are matched by name and version against public advisories, so a private package that shares a public name can cause a false positive.
--fail-on, SARIF, Markdown, GitHub Action.cookedignore, --baseline, --strict, offline cachepom.xml through MavenPRs welcome, see CONTRIBUTING.md.
MIT. Vulnerability data comes from OSV.dev and cve.now; check their terms.