
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 分