{
  "markdown": "# taskbounty-check\n\n**A local check for GitHub Actions and CI maintenance hygiene** (third-party action pinning,\nworkflow token permissions, and update automation), built for apps shipped with Lovable, Bolt,\nReplit, Cursor, or v0.\n\n**Local by default. No uploads. No telemetry.** It reads only your workflow files, on your machine.\nThe default code path makes no outbound network requests, writes its report locally, and sends\nnothing anywhere. There is no analytics or phone-home of any kind. Only the opt-in `--gh-org` mode\nuses the network (through your own `gh` session).\n\n**Works with Cursor, Claude Code, and Codex** (local MCP server, below).\n\n## Three ways to use it\n\n**1. GitHub Action** — add a maintenance check to CI that writes a summary to the run (no PR\ncomments, no source upload):\n\n```yaml\npermissions:\n  contents: read\nsteps:\n  - uses: actions/checkout@v4\n  - run: npx taskbounty-check@0.1.6 . --github-summary --no-network\n```\n\nWant a human to interpret or fix what the Action surfaces? [Request a free launch-safety review](https://www.task-bounty.com/ai-app-security-check/review?utm_source=github&utm_medium=marketplace&utm_campaign=agent_distribution). TaskBounty gets no access to your repo, source, or workflows unless you submit that form.\n\n**2. Agent / MCP** — a local stdio server for Cursor, Claude Code, and Codex:\n\n```bash\nnpx -y taskbounty-check@0.1.6 mcp\n```\n\n**3. One-off CLI** — scan the current repo locally and write a report:\n\n```bash\nnpx -y taskbounty-check@0.1.6 .\n```\n\n> Pin a version (`@0.1.6`) in committed config and CI for reproducibility. `@latest` is convenient\n> for a quick one-off, but a pinned version is the reproducible choice.\n\n### The GitHub job summary\n\nThe Action writes a counts-only maintenance summary to the workflow run (categories and next steps,\nno filenames, line numbers, or repo source). Below is that exact summary, rendered from this repo's\nown CI output:\n\n![TaskBounty check: GitHub Actions maintenance summary](docs/job-summary.png)\n\nSee it produced live by the **self-check** job in [this repository's Actions runs](https://github.com/eliottreich/taskbounty-check/actions).\n\nPrefer a guided walkthrough? Follow the\n[five-minute real-repository quickstart](docs/real-repo-quickstart.md).\n\n### Learn more\n\n- [Methodology](https://www.task-bounty.com/github-actions-security-check/methodology) — exactly what it reviews and how findings are labeled.\n- [Privacy and scope](https://www.task-bounty.com/ai-app-security-check) — local-by-default data handling.\n- [Limitations](#supported-checks-and-honest-limitations) — what it does NOT check (below).\n\n## Supported checks (and honest limitations)\n\n**Checks (GitHub Actions + CI maintenance hygiene):**\n- Third-party actions pinned to a movable tag/branch instead of a commit SHA\n- Broad (write-all) workflow token permissions\n- Missing explicit `permissions:` block\n- Update automation (Dependabot/Renovate) presence\n- Context-dependent workflow patterns flagged for private review (e.g. `pull_request_target`, script injection)\n\n**Does NOT check** (these need a manual review): exposed secrets, auth/authorization, payments,\nwebhooks, runtime behavior. It is a maintenance/hygiene check, **not** a full security audit or a\npenetration test.\n\n## What it does\n\n- Reads only your GitHub Actions workflow files and update-automation config, scans them\n  in-process with a deterministic ruleset (the same rules as the public checker), and writes a\n  local HTML + JSON report. It does **not** execute workflows, install dependencies, or run any\n  repository code.\n\n## Modes\n\n| Mode | Command | Network |\n|------|---------|---------|\n| Single repo | `npx taskbounty-check .` | none |\n| Directory of repos | `npx taskbounty-check ./all-repos` | none |\n| Explicit paths | `npx taskbounty-check --manifest repos.json` | none |\n| GitHub org (your `gh` session) | `npx taskbounty-check --gh-org <org>` | **yes, opt-in** |\n\n`--gh-org` uses your existing `gh` CLI session to fetch each repo's workflow files **to this\nmachine** (read-only). Your GitHub token is never read by this tool and never sent to TaskBounty.\n\n## What is read, written, transmitted\n\nRun `--explain-data` to print this at any time.\n\n- **Reads (allowlist — nothing else is opened):** `<repo>/.github/workflows/*.yml|*.yaml` and\n  update-automation config (`dependabot.yml`/`renovate.json*`). Never source files, `.env`,\n  secrets, SSH keys, credential stores, or anything outside the selected repository roots.\n  Symlinks that escape a root are skipped, never followed.\n- **Writes (local only):** `<out>.json` (full detail) and `<out>.html`.\n- **Transmits:** nothing by default. **`--share` uploads nothing** — it writes a *sanitized,\n  counts-only* file (scan id, label, candidate counts by category, private-review **count**,\n  scanner version, timestamps; repo names only with `--include-repo-names`) for you to submit\n  **manually**. Network stays off under `--share`. Only `--gh-org` intentionally uses the network.\n\n## Flags\n\n`--share` · `--gh-org <org>` · `--manifest <file>` · `--org-label <label>` ·\n`--include-repo-names` · `--dry-run` · `--explain-data` · `--delete-local-report` ·\n`--no-network` (default everywhere except `--gh-org`) · `--out <basename>` · `--version` · `--help`\n\n## Want help interpreting or fixing these results?\n\nRequest a free 20-minute launch-safety review:\nhttps://www.task-bounty.com/ai-app-security-check/review?utm_source=npm&utm_medium=npm_readme&utm_campaign=workflow_security\n\n**TaskBounty receives nothing unless you submit that form.** The scan runs locally and the full\nreport stays on your machine; the review form gives us no access to your repositories, source,\nworkflows, or secrets.\n\n## GitHub Code Scanning (SARIF)\n\nEmit SARIF 2.1.0 and surface findings in your repo's Security → Code scanning tab:\n\n```bash\nnpx taskbounty-check@latest . --format sarif --output taskbounty.sarif\n```\n\nThe SARIF carries deterministic rule ids (`taskbounty/<rule>`), severity levels, and file/line\nreferences — **no source contents, secrets, or environment values**, and no network access.\nConfirmed findings are emitted as `kind: fail`; lower-confidence items as `kind: review`.\n\nHelp interpreting SARIF results: https://www.task-bounty.com/ai-app-security-check/review?utm_source=github&utm_medium=sarif_docs&utm_campaign=workflow_security\n\nUpload it with the official action (full example in [`examples/code-scanning.yml`](examples/code-scanning.yml)):\n\n```yaml\npermissions:\n  contents: read\n  security-events: write\nsteps:\n  - uses: actions/checkout@v4\n  - run: npx taskbounty-check@0.1.6 . --format sarif --output taskbounty.sarif\n  - uses: github/codeql-action/upload-sarif@v3\n    with:\n      sarif_file: taskbounty.sarif\n```\n\n## Local agent (MCP)\n\nRun a **local** stdio MCP server so Codex, Claude Code, or Cursor can scan and reason about findings\nin your editor. It runs locally, makes **zero outbound network requests**, uploads no source, and\n**never modifies files** — `generate_fix_plan` returns a plan as text for you to apply yourself.\n\n```bash\nnpx taskbounty-check@latest mcp\n```\n\nTools: `scan_repo` (local scan summary), `explain_finding` (plain-language explanation), `generate_fix_plan` (text fix plan).\n\nWant a human to review the plan? https://www.task-bounty.com/ai-app-security-check/review?utm_source=mcp&utm_medium=mcp_docs&utm_campaign=workflow_security\n\n**Cursor** — `.cursor/mcp.json`:\n```json\n{ \"mcpServers\": { \"taskbounty-check\": { \"command\": \"npx\", \"args\": [\"-y\", \"taskbounty-check@latest\", \"mcp\"] } } }\n```\n\n**Claude Code**:\n```bash\nclaude mcp add taskbounty-check -- npx -y taskbounty-check@latest mcp\n```\n\n**Codex** — in `~/.codex/config.toml`:\n```toml\n[mcp_servers.taskbounty-check]\ncommand = \"npx\"\nargs = [\"-y\", \"taskbounty-check@latest\", \"mcp\"]\n```\n\n## Security\n\nZero runtime dependencies. Published to npm with provenance (verify on the package's npm page). The\ndefault run makes no outbound requests and uploads nothing; see the\n[methodology](https://www.task-bounty.com/github-actions-security-check/methodology) for the full\ndata-handling and scope boundaries.\n",
  "bytes": 8109,
  "sha": "e2bc8644362f99272b457f1c7aa989b0d859181c76eb28039c3f7c501f9730b5",
  "repo_slug": "eliottreich/taskbounty-check",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_eliottreich_taskbounty_check_2b010ebc/readme"
}