尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A calm, real-time dashboard of your GitHub organisation: every commit, push and pull request, who made it (and with which AI agent), what changed and what shipped. Self-hosted on Cloudflare Workers + D1 or Node.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Every commit, push and pull request across your GitHub organisation, as it happens: who made it (and with which AI agent), what changed, what is stuck, and what shipped. On one calm page that managers and engineers both read.
Big organisations push thousands of commits a day across hundreds of repositories. GitHub shows them one repository at a time, in screens built for the person who wrote the code. Track for Git puts the whole organisation on one timeline, in plain words, and stays fast and current while it does: GitHub's webhooks bring a push within seconds, and polling inside GitHub's rate limits fills in the rest.
It is free and open source (Apache-2.0). You host it yourself on Cloudflare Workers + D1 in a few minutes, or in Node or Docker anywhere else. It reads GitHub with read-only permissions. Your code activity stays in your own account, behind your own sign-in.
TIME_ZONE). Each one can also be read as a table.Light and dark, keyboard-navigable throughout, screen-reader labelled, built to WCAG 2.1 AA, English UI with every string in one file for translation. Every picture here comes from the built-in demo organisation: the people, the company and the code are made up.
Try it in one minute, with no token:
git clone https://github.com/qderai/track-for-git && cd track-for-git
npm run demo # http://localhost:8787: Acme, a made-up organisation, with commits arriving live
(Node 22.13 or later; there is nothing to install for the demo.)
Run it for your organisation: press Deploy to Cloudflare above, or:
npm install
npx wrangler login
npm run deploy # creates the D1 database, applies the migrations, deploys the Worker
Then follow the one-page setup: connect GitHub with a read-only GitHub App (or a fine-grained token), add the webhook, put the dashboard behind Cloudflare Access or "members of this organisation only" GitHub sign-in, and turn the demo off.
Not on Cloudflare? docker compose up, or node server/node.js: the same app on SQLite (built into Node), with
the same settings.
Inside an app you already run? Mount it at a path of that app with track-for-git/embed: the page, its API
and the sync on your own Worker, database and sign-in, with your own deploys on the timeline and a Live now tile.
See Inside an app you already run.
Track for Git recognises an AI agent by the marks agents already leave: its own account (copilot-swe-agent[bot],
devin-ai-integration[bot]), the Co-authored-by: trailer many agents add (Claude Code does by default), a footer such as "Generated with Claude Code", or, for a member's pull request, the branch prefix it uses
(claude/, codex/, cursor/). Names are matched whole, so Claude Monet and Devin Smith stay people. A branch
name is never evidence on a public fork.
Any other agent shows up under its own name when its commits carry one of these trailers:
Assisted-by: Acme Coder
Generated-by: Acme Coder
AI-Agent: Acme Coder
Your company's own agents, with their own accounts or addresses, go in the AGENTS setting:
[{ "id": "forge", "name": "Forge", "logins": ["forge-agent[bot]"], "emails": ["@agents.acme.example"], "names": ["Forge"], "branches": ["forge/"] }]
The six most common agents keep fixed colours, so a colour always means the same agent. Others share "Other agents"
in the charts but keep their own names everywhere else. The rules are in src/agents.js: a pull
request adding an agent is very welcome.
Qubi is the reviewer built into Track for Git. Give it your own model API key and a GitHub App of yours, switch it on in the dashboard's Qubi tab, and it:
It stays quiet about style. The prompt (src/qubi/prompt.js) asks for bugs and security holes
only, each with the file and line, a concrete failing input, what goes wrong, the fix and a severity, and tells the
model to read the callers and the validation in front of the code before it reports anything, to drop what it cannot
show a failing case for, and that finding nothing is a good result. Every finding must then quote its line word for
word: Qubi looks the quote up in the file at the reviewed commit and leaves out any finding whose quote is not there
(it also moves a finding to the right line when the model's line number was off). The review says how many it left
out.
Money. Every run has a cap, and so does every 7 days; pull requests from outside the organisation (forks,
strangers) have a smaller allowance of their own, per author and in total. The caps are checked on the server before
any run starts, each call to the model is limited to what the run's cap has left, and the cost is recorded after every
call, so a run that fails still counts. You set the caps in the dashboard, and the ceilings they cannot pass in the
environment (QUBI_MAX_RUN_USD, QUBI_MAX_WEEK_USD). With the defaults (Claude Haiku 5.5 for reviews, $0.25 a run,
$5 a week) a typical pull request review costs about a cent.
What it can touch. The model gets three tools: read a file, list a folder, and search the code, all at the reviewed commit. With a GitHub App, they read through a token minted for that one repository with read permissions only; posting the review, and opening a fix PR, use a second token after the model is done. Text from the pull request (its title, description, diff and code) reaches the model as material to review, never as instructions, and outside authors never get a fix PR. These measures reduce the room for prompt injection; they do not make a model's judgement infallible, so treat Qubi's findings and fixes as a reviewer's suggestions.
Set it up (the details are in docs/setup.md):
npx wrangler d1 migrations apply DB --remote # migration 0002 adds Qubi's tables (npm run deploy does this)
npx wrangler secret put QUBI_API_KEY # your Claude API key
npx wrangler secret put QUBI_GITHUB_APP_ID # a second GitHub App: Contents and Pull requests read & write
npx wrangler secret put QUBI_GITHUB_APP_PRIVATE_KEY
npx wrangler secret put QUBI_ADMINS # who may change Qubi and start paid runs: logins or emails
Qubi uses the dashboard's own webhook (pushes and pull requests), so its App needs no webhook of its own. The key is never shown in the page, in the API or in a log; the Qubi tab shows only whether it is set.
Which model. QUBI_PROVIDER picks the API, and the key is QUBI_API_KEY (or the provider's usual variable):
QUBI_PROVIDER | API | Models and prices |
|---|---|---|
anthropic (default) | Claude API | Built in: Claude Haiku 5.5, Sonnet 5.5, Opus 5.5, Fable 5.1 |
openai | OpenAI | You name them in QUBI_MODELS |
xai | xAI (Grok) | QUBI_MODELS |
gemini | Google Gemini (its OpenAI-compatible endpoint) | QUBI_MODELS |
mistral, deepseek, groq | Mistral, DeepSeek, Groq | QUBI_MODELS |
openrouter | OpenRouter: many providers behind one key | QUBI_MODELS |
openai-compatible | Anything else with OpenAI's Chat Completions: Ollama, vLLM, LM Studio, a gateway (QUBI_API_URL) | QUBI_MODELS |
QUBI_MODELS lists each model with its price in US dollars per million tokens, input/output and optionally cached
input, for example (made-up names and prices) QUBI_MODELS="model-large:3/15, model-small:0.3/0.5/0.075". The first is the default for reviews, the second for bug
hunts; a local model is free (llama3:0/0). Qubi does not run without prices, because the caps are only as good as
they are. Copy them from your provider's price page and update them when it changes.
Cursor has no model API of its own to point Qubi at (inside Cursor, "your own key" means Cursor calling your
provider), so it is not a QUBI_PROVIDER. Another API fits in one file (src/qubi/providers/):
a pull request adding one is welcome.
GitHub ──webhook (HMAC-SHA256)──▶ ┐
├──▶ Worker ──▶ D1 (metadata only) ──▶ the page (static, no framework)
GitHub ◀──GraphQL + REST, read-only, every minute──┘ └──▶ diffs on demand, cached, never stored
AUTH). With Cloudflare Access, the
Worker also verifies Access's signed token on every API request. With GitHub sign-in, membership is checked with the
dashboard's own credentials, and the person's GitHub token is dropped after sign-in.npm test # node:test, against real SQLite with the real migrations
npm run demo # the app on Node with the demo
npm run dev # the app on wrangler dev with a local D1 (DEMO=1 by default)
npm run screenshots # the README's pictures (needs playwright-core and Chrome)
npm run build:embed # after changing public/: src/embed-assets.js, the page for track-for-git/embed
src/ the Worker: app.js (routes), sync.js (polling), webhook.js, queries.js (the read side), agents.js,
auth.js, demo.js, embed.js (mounting inside another app), github/ (client, App sign-in, GraphQL,
payloads into rows)
public/ the page: no framework, no build; js/, styles.css, locales/en.js (every word)
server/ Node and Docker
migrations/ D1 / SQLite schema
To translate the page, copy public/locales/en.js, translate the values, and add the language in public/js/i18n.js.
Apache-2.0, copyright 2026 Qder AI. See LICENSE and NOTICE. The Qder.ai name and logo are trademarks of Qder AI and are not covered by the license.
Track for Git is not affiliated with or endorsed by the Git project or GitHub. Git is a trademark of the Software Freedom Conservancy; GitHub is a trademark of GitHub, Inc.