patio
AGENTS.md2 starsChanged 13 days agoMITView on GitHub
AI-first desktop app for agents, chats, scheduled tasks, and kanban tickets: Go + SQLite + Wails v3 + React UI. patio mcp exposes AI access over stdio. See README.md for features and usage.
- Installs packages
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,439 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository11 other files it gives its agents.
- accessibilitySkill
- connector-requiredSkill
- dropdown-buttonSkill
- frontend-designSkill
- golang-patternsSkill
- golang-testingSkill
- icon-buttonSkill
- list-viewSkill
- releaseSkill
- searchable-dropdownSkill
- seoSkill
The file
We split this AGENTS.md into the rules it gives an agent
4 rules. About 0 are common, 0 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 7
Always use pnpm, never npm or npx (use pnpm dlx).
- Very specific: line 8
No CGO except the Wails desktop build on macOS/Linux.
- Very specific: line 9
No ORM, no router library, no state or CSS framework.
- Very specific: line 37
Every status change writes one ticket_history row ("Status changed from X to Y") and one ticket_status_transition row.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AGENTS.md
AI-first desktop app for agents, chats, scheduled tasks, and kanban tickets: Go + SQLite + Wails v3 + React UI. patio mcp exposes AI access over stdio. See README.md for features and usage.
Rules
- Always use
pnpm, nevernpmornpx(usepnpm dlx). - No CGO except the Wails desktop build on macOS/Linux; Windows and
go teststay CGO-free. SQLite driver ismodernc.org/sqlite. - No ORM, no router library, no state or CSS framework.
database/sql,net/httpServeMux patterns, React with a tiny pathname router. - Plans live in
docs/plans/. - UI: no colored accent stripes on box edges (e.g. a primary
border-lefton callouts or a state-colored top border on cards). Use a plainvar(--border)border. - UI: never use
window.alert,confirm, orprompt; the macOS Wails WebView ignores them (confirmreturns false). UseconfirmDialogfromweb/src/confirm.tsx. - UI text: every user-facing string (labels, tooltips, aria labels, placeholders, errors) goes in the component's
text.enandtext.esviauseText. Never hardcode English in JSX. - New migration → update
internal/mcp/schema.md. - New or changed user-facing feature → add or update its stop in the feature tour (
web/src/Tour.tsx): EN + ES text intext.*.steps, a stop inplan()targeting adata-tourattribute,ai: trueif it needs a connector. Every feature plan or ticket includes this as a task.
Layout
main.go: flags (-d,-show-hidden,-open),mcpsubcommand, Wails app, OS-specific DB path indbPath. One process per DB (WailsSingleInstancekeyed by DB path);windowsholds the main window and one window per popped-out chat (/ai/chats/<id>?window=chat). Closing main keeps chat windows; the last window quits.internal/db/:Openapplies pragmas (foreign_keys, WAL, busy_timeout) via DSN, runs embedded migrations tracked byPRAGMA user_version, seeds users, andWatchdetects external writes.internal/db/migrations/: numbered.sqlfiles. Never edit an applied migration; add a new file.internal/api/:server.go(routes, JSON helpers, types),boards.go,tickets.go,transfer.go(export/import),calendar.go(calendar items + due tickets).internal/mcp/: MCP stdio server; requests act as userai.internal/reminder/: claims due reminders once (notified_at) and fires OS notifications from the desktop app.web/src/:App.tsx(router),AIBadge.tsx,BoardList.tsx,BoardView.tsx,TicketDetail.tsx,PrintTicket.tsx,Calendar.tsx,api.ts(types + fetch).web/embed.go://go:embed all:dist.web/public/.gitkeepkeepsweb/dist/non-empty sogo buildworks before a frontend build.web/src/desktop.ts:@wailsio/runtimewrapper (onEvent,openURL,isDesktop).Makefile:app(macOS 13+.app),exe(Windows),linux;-tags production,VERSION=stampsmain.version. Assets:build/darwin/Info.plist+icons.icns,rsrc_windows_amd64.syso(icon, DPI, manifest frombuild/windows/). No Taskfile/wails3 dev.
Domain invariants
- UI acting user is
local; MCP acts asai(Martin,is_ai=1). internal/db.WatchpollsPRAGMA data_version; external writes emit Wails eventdb-changedfor UI refresh.- IDs are UUIDv4 TEXT generated in Go. Timestamps are ISO-8601 UTC TEXT.
- Ticket number comes from
board_counterper board; code is<short_name>-<number>. Changing short_name rewrites codes and stores old ones inold_ticket_code. - Ordering lives in JSON arrays:
status_order,ticket_order,ticket_type_order. Corrupt order JSON must return an error, never an empty list. - Every status change writes one
ticket_historyrow ("Status changed from X to Y") and oneticket_status_transitionrow. Ticket creation writes a transition withfrom_status_idNULL. Same-column reorder writes neither. - Multi-row writes run in one transaction. Never ignore DB or JSON errors.
- Lists with timestamps sort by timestamp, then
rowid(insertion order), not random ids. -show-hiddenonly affects the UI (assignee). The API always serves it.- JSON backup format
patio-boardversion 1 must stay backward compatible. Import validates all references and remaps every id. - Sanitize every rendered HTML description with DOMPurify. CSV/xlsx cells starting with
= + - @get a leading'.
Verify
gofmt -l internal # must be empty
go vet ./... && go test ./... -count=1
pnpm --dir web build # runs tsc
make app # build/bin/patio.app
make release # CGO-free Windows compile checkWails is pinned to v3.1.0 in go.mod and web/package.json (@wailsio/runtime); bump both together. The CLI is only needed to regenerate icons/syso (see docs/branding/README.md): go install github.com/wailsapp/wails/v3/cmd/wails3@v3.1.0.
Dev run: pnpm --dir web build && go run . -d "$(mktemp -d)/dev.db".
Smoke-test with a throwaway data dir: build/bin/patio.app/Contents/MacOS/patio -d "$(mktemp -d)/test.db".
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

