{"id":50850390,"url":"https://github.com/eternalsayed/ai-sentry","last_synced_at":"2026-06-14T13:32:41.569Z","repository":{"id":359230760,"uuid":"1245086942","full_name":"eternalsayed/ai-sentry","owner":"eternalsayed","description":"Monitor how your agents, APIs, tokens are being used and if a skill/plugin you added is doing something fishy","archived":false,"fork":false,"pushed_at":"2026-05-21T01:10:37.000Z","size":185,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T13:32:37.104Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eternalsayed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-20T22:37:22.000Z","updated_at":"2026-05-22T15:08:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/eternalsayed/ai-sentry","commit_stats":null,"previous_names":["eternalsayed/ai-guard"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eternalsayed/ai-sentry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eternalsayed%2Fai-sentry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eternalsayed%2Fai-sentry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eternalsayed%2Fai-sentry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eternalsayed%2Fai-sentry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eternalsayed","download_url":"https://codeload.github.com/eternalsayed/ai-sentry/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eternalsayed%2Fai-sentry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34323994,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-14T13:32:40.900Z","updated_at":"2026-06-14T13:32:41.563Z","avatar_url":"https://github.com/eternalsayed.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AISentry\n\nReal-time monitoring for every AI coding agent on your machine — Claude Code, Codex, Gemini CLI, Aider, Cursor, and more.\n\n**Your data streams from your machine to your browser. Nothing goes through any server.**\n\n---\n\n## What it monitors\n\n| Agent | Sessions | Permissions | Processes | Network |\n|---|---|---|---|---|\n| Claude Code | ✓ `~/.claude/projects/` | ✓ `settings.json` | ✓ | ✓ |\n| Codex CLI | ✓ `~/.codex/` | ✓ `config.json` (fullAuto, approvalPolicy) | ✓ | ✓ |\n| Gemini CLI | ✓ `~/.gemini/` | ✓ `settings.json` (sandbox, model) | ✓ | ✓ |\n| Aider | — | — | ✓ | ✓ |\n| Cursor | — | ✓ `.cursor/settings.json` | ✓ | ✓ |\n| GitHub Copilot | — | — | ✓ | ✓ |\n\nNetwork: Anthropic, OpenAI, Google, and GitHub API endpoints are whitelisted. Anything else is flagged.\n\n---\n\n## About the agent\n\nThe agent is a **single Node.js file (~15 KB)** with zero npm dependencies. Here's exactly what it costs:\n\n| Resource | Idle (no browser) | Active (browser connected) |\n|---|---|---|\n| Disk | ~15 KB + log file | same |\n| RAM | 35–50 MB (Node.js baseline) | same — no growth |\n| CPU | ~0% | brief spike every 5 s (`ps` + `lsof`) |\n| Port | 127.0.0.1:4242 | same |\n| Outbound network | 1 req/hr to `/version.json` | same |\n\n**The agent does NOT auto-start after a reboot.** The installer runs it once for the current session. To start it again after a reboot, re-run the installer or manually start it:\n\n```bash\nPORT=4242 AISENTRY_HOST=https://aisentry.netlify.app \\\n  nohup node ~/.aisentry/agent.js \u003e\u003e ~/.aisentry/agent.log 2\u003e\u00261 \u0026\n```\n\n### What it reads\n\n| Source | What | Why |\n|---|---|---|\n| `~/.claude/projects/*/` | File size + mtime only | Session counting |\n| `~/.gemini/`, `~/.codex/` | File size + mtime only | Session counting |\n| `.claude/settings.json`, `.codex/config.json`, `.cursor/settings.json` | Full file | Permission audit |\n| `~/.claude/history.jsonl` | Last 8 KB only | Recent activity feed |\n| `ps aux` | Full process list | Detect AI agent processes |\n| `lsof -i` (scoped to AI PIDs) | Open sockets | Network audit |\n\n### What it never reads\n\n- Session file **contents** — conversation text is never read, not even sampled\n- API keys, tokens, `.env` files, or any credential material\n- Keychain, browser storage, or anything outside AI agent data directories\n\n### Control commands\n\n```bash\n# Check if running\ncat ~/.aisentry/agent.pid | xargs ps -p\n\n# Tail the log\ntail -f ~/.aisentry/agent.log\n\n# Stop\nkill $(cat ~/.aisentry/agent.pid)\n\n# Full uninstall\nkill $(cat ~/.aisentry/agent.pid) 2\u003e/dev/null\nrm -rf ~/.aisentry\n# macOS:\nrm ~/Library/LaunchAgents/com.aisentry.agent.plist\n# Linux:\nsystemctl --user disable aisentry\nrm ~/.config/systemd/user/aisentry.service\n```\n\n---\n\n## How it works\n\n```\n┌── aisentry.netlify.app ───────────┐         ┌── Your machine ────────────────────────────┐\n│                                    │         │                                            │\n│  Static HTML / CSS / JS            │   SSE   │  ~/.aisentry/agent.js                   │\n│                                    │◄────────┤  └─ listens on 127.0.0.1:4242            │\n│  Browser renders the dashboard     │         │     reads: ~/.claude/, ~/.gemini/,         │\n│                                    │         │            ~/.codex/, ps aux, lsof -i     │\n└────────────────────────────────────┘         └────────────────────────────────────────────┘\n                   Data never leaves your machine\n```\n\n---\n\n## Quick start (from the hosted site)\n\nVisit your deployed site and follow the on-screen instructions, or run the installer directly:\n\n```bash\ncurl -fsSL https://aisentry.netlify.app/install.sh | bash\n```\n\nThen open `/monitor` — it detects the agent automatically and connects.\n\n---\n\n## Development\n\n```bash\nnpm run dev          # serve public/ on :8080 — no build step needed\nnpm run dev:agent    # start agent pointing at localhost:8080 (separate terminal)\n```\n\nOpen **http://localhost:8080/monitor.html**. The browser auto-connects once the agent is up. HTML changes take effect on refresh; `agent.js` changes require restarting the agent (`Ctrl-C`, then `npm run dev:agent` again).\n\n### Build \u0026 preview\n\n```bash\ncp .env.example .env  # set HOSTED_URL=https://aisentry.netlify.app\nnpm run build         # copies public/ → dist/, injects HOSTED_URL\nnpm run preview       # builds + serves dist/ on :8080\n```\n\n`dist/` is gitignored — never commit it.\n\n---\n\n## Deploy to Netlify\n\n**Auto-deploy (recommended):** connect the repo to Netlify, set `HOSTED_URL` in **Site settings → Environment variables**, and every push to `main` deploys automatically.\n\n**Manual deploy:**\n\n```bash\nnpm run deploy          # build + deploy to production\nnpm run deploy:preview  # build + deploy as a draft URL (no production traffic)\n```\n\nBoth scripts use `npx netlify` — you'll be prompted to log in if you haven't already (`npx netlify login`).\n\nTo use a custom domain, configure it in Netlify's domain settings, then update `HOSTED_URL` to match and redeploy.\n\n---\n\n## Risk ratings\n\n| Level | Meaning |\n|---|---|\n| **critical** | `Bash(node .claude/*)` or `fullAuto: true` — anything executes silently |\n| **high** | Broad wildcard, Opus model override, daemon schedule, `approvalPolicy: never` |\n| **medium** | Scoped wildcard (`npx @pkg*`), unknown HTTPS, sandbox disabled |\n| **low** | Named-file permission, MCP server blanket, model config |\n| **ok** | Specific rules, Anthropic/OpenAI/Google/GitHub endpoints, local connections |\n\n---\n\n## Privacy\n\n- Agent binds to `127.0.0.1` — not reachable from the internet or local network\n- The hosted site is pure static HTML/CSS/JS — no server, no database, no accounts\n- Analytics slot included in HTML for self-hosters (empty by default — opt-in)\n- One outbound call: `GET /version.json` to check for agent updates\n- MIT licensed — [read every line](https://github.com/eternalsayed/ai-monitor)\n\n---\n\n## Why this exists\n\nThird-party Claude Code plugins (like `claude-flow` / Ruflo) can:\n- Spawn background daemons that run on a schedule, burning your quota without asking\n- Grant themselves `Bash(node .claude/*)` — any script in that folder runs silently\n- Override your model selection to Opus\n- Open connections to endpoints unrelated to Anthropic\n\nThis tool makes all of that visible in real time, across every AI coding agent you use.\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feternalsayed%2Fai-sentry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feternalsayed%2Fai-sentry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feternalsayed%2Fai-sentry/lists"}