BLA
BLA (Blind LLM Agents) is the open-source Blue Defense MCP and CLI built to protect software artifacts against automated AI reverse-engineering workflows.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證GitHub Action that scans agent-readable files (READMEs, docs, prompts, MCP configs, editor rules) for prompt injection and tool poisoning on every PR.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
😎 Sunglasses — Agent File Scan (GitHub Action)
Scan your repository's agent-readable files — READMEs, docs, prompts, MCP configs, .cursor / .windsurf / .claude rules — for prompt injection and tool poisoning on every pull request, before an AI agent (Claude Code, Cursor, Copilot, etc.) ever reads them.
Powered by Sunglasses, the open-source, 100% local trust boundary for AI agents.
Your agent trusts what it reads. A poisoned README or MCP description can quietly hand it instructions you never wrote. This Action catches that in CI.檢視完整 README ↗Scan your repository's agent-readable files — READMEs, docs, prompts, MCP configs, .cursor / .windsurf / .claude rules — for prompt injection and tool poisoning on every pull request, before an AI agent (Claude Code, Cursor, Copilot, etc.) ever reads them.
Powered by Sunglasses, the open-source, 100% local trust boundary for AI agents.
Your agent trusts what it reads. A poisoned README or MCP description can quietly hand it instructions you never wrote. This Action catches that in CI.
Create .github/workflows/sunglasses.yml:
name: Sunglasses — agent file scan
on: [pull_request]
permissions:
contents: read
security-events: write # lets findings appear in the PR's "Code scanning" tab
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: sunglasses-dev/sunglasses-action@v1
That's it. On every PR, Sunglasses scans the sensible default set of agent-readable files and fails the check if it finds an injection — or if it could not actually read a file it was asked to scan.
README*, AGENTS.md, CLAUDE.md, GEMINI.md, every *.md, and docs/, prompts/, .cursor/, .windsurf/, .claude/, plus mcp.json / *.mcp.json. Override with the paths input.
| Input | Default | Description |
|---|---|---|
paths | (default set) | Space-separated files, directories or globs to scan instead of the defaults. Directories are walked. |
fail-on-threat | true | Fail the check when a finding is reported. Set false to report-only. |
fail-on-incomplete | true | Fail the check when a file could not be fully inspected (archive, oversized file, unsupported binary, missing path). Set false to report-only. Either way, a file that was not inspected is never counted as clean. |
upload-sarif | true | Upload merged SARIF to GitHub code scanning (needs security-events: write). |
python-version | 3.x | Python used to install the sunglasses package. |
version | (latest) | Pin a sunglasses version, e.g. ==0.5.6. Empty installs the latest published release, so a new release reaches your workflow the hour it lands. |
The Action reports four separate outcomes, and never folds them together:
| Outcome | Annotation | Fails the job? |
|---|---|---|
| Inspected, nothing found | none | no |
| Finding | ::error … detected an agent-targeted injection | yes, unless fail-on-threat: false |
| Not inspected (archive, file over the scanner's 1 MB limit, unsupported binary, path not found) | ::warning … not inspected: <reason> | yes, unless fail-on-incomplete: false |
| Scan failed (the scanner errored or crashed) | ::error … could not scan … It was NOT inspected | always |
A green check means "every file we were asked to read, we read, and nothing fired". It does not mean "this repository is safe" — no scanner can promise that, and this one does not.
The injection wording is reserved for actual findings. A file we could not open, or one the scanner failed on, is never described as an attack. Before v1.1 it was: the Action treated any non-zero exit as a threat, so a 1.2 MB CHANGELOG or a permissions error produced Sunglasses detected an agent-targeted injection in <file> on the pull request.
- uses: sunglasses-dev/sunglasses-action@v1
with:
fail-on-threat: false
fail-on-incomplete: false
paths: "README.md docs/ prompts/"
Directories in paths are walked recursively. (In v1 they were silently dropped — paths: "README.md docs/ prompts/" scanned only README.md and still reported a green result, which is the kind of quiet under-coverage v1.1 exists to remove.)
Direct & indirect prompt injection · README / repo poisoning · MCP tool-metadata poisoning · credential-exfiltration prompts · encoded / obfuscated / multilingual evasions.
paths, or run in fail-on-threat: false mode on docs-heavy repos.sunglasses package from PyPI. With version empty it installs the latest release at run time, so package changes reach your workflow without you upgrading anything — pin version if you need lockstep.tests/fixtures/ contains deliberate injection samples, so a scan of this repository will flag them. Scope paths to exclude tests/fixtures when running the Action against itself.@v1 is a moving tag that tracks the latest v1.x. Pin a commit SHA if you need immutability; a pinned SHA does not move when we publish v1.1.MIT — see LICENSE.