
FronyBoard
io.github.Cafelatte1由 GitHub 帳號 Cafelatte1 發布v0.43.0更新於 Oct 30, 2026
Project tracker for AI agents: roadmap, periods, tasks and a validation gate, in one SQLite file
概覽
本機 MCP 專案追蹤器,為 AI 代理提供路線圖、季度週期、任務與寫入前驗證,全部存放在單一 SQLite 檔案中。
- 可以做什麼
- 建立與更新專案、讀取路線圖與恢復用總覽、驗證紀錄
- 設定年度概覽、檢查清單與季度里程碑
- 開啟與關閉週期,並讀取結案回顧
- 建立、更新任務並切換狀態,標記完成時須提供證明備註
- 以清單、單筆、搜尋與近期活動查詢任務,並提供內建使用指南
- 適用情境
- 適合讓代理在程式碼庫中跨工作階段追蹤自身工作:規劃任務、推進狀態,並透過一次狀態查詢恢復脈絡,而不必重讀歷史。較適合個人或小型本機情境,而非需要共用網頁版問題追蹤器的團隊。
- 執行需求
- 以本機 stdio 程序執行,透過 uvx 啟動(需安裝 uv),首次使用會從 PyPI 取得套件。此模式不需要網路、HTTP 或憑證。資料寫入本機資料目錄,可用 AIRA_DATA_DIR 變更位置;日誌寫入同層目錄,可用 FRONYBOARD_LOG_DIR 覆寫。需先註冊專案鍵,並在程式碼庫的 CLAUDE.md 中宣告以啟用。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 FronyBoard,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
FronyBoard
An MCP server that gives AI agents (Claude Code and friends) a first-class project tracker.
Where Jira is an issue tracker for humans behind a web UI, FronyBoard replaces each part with something an agent can use natively:
The schema and operating rules were extracted from a real product's management system (31 tasks shipped through it), then generalized.
Install
Requires uv. One line registers FronyBoard in Claude Code;
uvx fetches the package from PyPI on first use and caches it:
Any MCP client that can launch a stdio command works the same way — the command is
uvx fronyboard. It is also listed in the
MCP Registry as io.github.Cafelatte1/fronyboard.
From a clone, point at the checkout instead (this needs git):
This is the local (stdio) mode: the client starts the server as a child process and
talks to it over a pipe. No HTTP, no network, no credentials — web.py and
fauth.py are never called. Data is written to %LOCALAPPDATA%\Frony\FronyBoard\data
(~/.Frony/FronyBoard/data where LOCALAPPDATA is unset); set AIRA_DATA_DIR to
relocate it. Logs (JSON Lines, one line per MCP tool call plus server events) go to
the sibling logs folder — FRONYBOARD_LOG_DIR overrides.
To share one FronyBoard between several machines, or to use it from the Claude and ChatGPT apps, run it as an HTTP server instead — see docs/self-hosting.md.
Project setup
Connecting the MCP server gives every session the tools and the general workflow
(delivered as server instructions). What it cannot know is which FronyBoard project
a codebase belongs to — declare that in the codebase itself by adding this section
to its CLAUDE.md (create the file if the project has none):
Replace DLY with the project's key (register one first with create_project).
The section is also the opt-in signal: a codebase without it is treated as not
FronyBoard-managed.
Model
A project is two kinds of records — the roadmap, and one record per period. Both are
JSON documents; the schema and the rules that guard it are in
backend/src/fronyboard/validation.py.
- Task ids are a project-global sequence (
DLY-042) — they keep counting across periods and are never reused. They are the only link between FronyBoard and a codebase: use them in branch names (feat/DLY-042/short-desc) and record the branch on the task. - A task is a title (v0.33.0, AIR-086) plus status, tags,
depends_on, branch and two one-line notes of at most 300 characters each. Agents read titles and status; the 25-line body nobody read, and the month/week slots that only existed to schedule it, are gone. Time ismeta.completed_at. - The two notes answer different questions at different moments (v0.38.0, AIR-090).
contentis written at create time and says why the task exists — the pressure behind it, or the scope deliberately left out. The approach chosen is not part of it (AIR-092): agents wrote it here and again in the commit, so it lives in the commit only.checkis required bytransition_task(status="done")and says what proves it done — the command and its output, or an observable a reader can go and see. One free note asked before the work can only restate the plan: in a 12-session benchmark every task an agent wrote paraphrased its own title, because the note was fixed at create time andupdate_taskwas never called. Reopening a task drops itscheck; nothing is proven any more. - Reference chain:
period → roadmap milestone(the quarter). That is the only one, and the milestone is optional (v0.40.0, AIR-095): a period without one is valid, and its tasks are checked like any other's. - Statuses — milestones:
planned | active | done; tasks:todo | in_progress | done | blocked | cancelled. cancelledis the soft delete — there is no hard delete. Cancelling requires a reason, keeps the record (and its id) forever, and hides the task from queries by default (list_taskstakesinclude_cancelled).blocked= may resume,cancelled= will not happen; transitioning a cancelled task restores it.- Carry-over: a task that outlives its period is not moved — recreate it in the next period under a new id and note the mapping in the closing retrospective.
get_statusis the whole resume — the overview, each period's open tasks, andrecent_done: the ten most recently finished tasks with theircontent, theircheckand when they completed. What is already built is what a cold session needs most, and nobody makes a second call to find it (AIR-090). It is still a record of claims: the board says what an agent reported, the code is the evidence.depends_onon a task lists the earlier tasks it builds on (other projects allowed). It points backwards only — there is no forward index, because storing one direction and deriving the other read as inverted often enough to be worth dropping (v0.36.0, AIR-089). The field wasfollowsuntil v0.37.0; the boot migration renames it. It is a pointer, not a lock:list_tasksandget_statusflag the entries not yet done aswaiting_on, and nothing is ever blocked.- Timestamps (
meta.created_at/updated_at/started_at/completed_at) are stamped by the server in naive UTC —started_aton the firstin_progresstransition,completed_atondone(and removed again if the task leavesdone). Agents never write them. - The
resultfield closes a period — the rest of the file holds only current state, so the "why it turned out this way" lives there: judgment and reasons, not counts. Its presence is what marks a period closed.
Tools
update_task and transition_task derive the project from the task id prefix
(DLY-042 → DLY), so their key parameter is optional. Re-calling
close_period on a closed period rewrites its retrospective.
Typical flow:
Planning is optional, not a prerequisite. create_task opens the current quarter by
itself (in FRONYBOARD_TZ, else the server's zone); open_period opens any other
quarter, with or without a milestone. set_overview and upsert_milestone add the
year's and the quarter's goals whenever there are some. A milestone added to an open
quarter starts active; closing the quarter marks it done.
Every mutation is validated before anything is written; invalid changes are rejected
with the full error list. close_period refuses while tasks are still todo or
in_progress. Writes are serialized per project, so concurrent clients cannot
collide on ids or lose updates.
Self-hosting
The same package also runs as an always-on HTTP server (fronyboard serve): MCP over
streamable HTTP for every machine on your network, a read-only web dashboard for
humans, API keys per device, and OAuth for the hosted Claude / ChatGPT apps.
Authentication is delegated to FronyAuth,
a separate service. None of it is needed for the stdio install above.
To see the dashboard on your own machine without any of that, run fronyboard serve --local
(loopback only, no login) and open http://127.0.0.1:8642.
docs/self-hosting.md covers the setup;
docs/operations.md is the day-2 runbook.
Development
The repo is a monorepo. backend/src/fronyboard/ — store.py (SQLite, data root),
validation.py (schema gate), service.py (operations), auth.py (bearer
middleware) + fauth.py (FronyAuth client), log.py, web.py (JSON API + static
serving), server.py (MCP tool surface + CLI). frontend/ — the dashboard (React +
Vite), built to static files that the backend serves; its build output
frontend/dist is committed so a server needs no Node toolchain.
The three docs under docs/ cover what the code cannot tell you — running this on your own machines:
- docs/self-hosting.md — running FronyBoard as a shared server: clients, dashboard, hosted apps, deploy
- docs/operations.md — home server runbook
來源:README.md,提交 54f8850
工具
0版本歷史
8- v0.43.0最新Oct 30, 2026
- v0.42.0Oct 29, 2026
- v0.40.0Oct 23, 2026
- v0.39.2Oct 9, 2026
- v0.39.1Sep 28, 2026
- v0.39.0Sep 17, 2026
- v0.38.0Sep 16, 2026
- v0.34.1Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分