AGENTS.md is the authoritative agent guide: house rules, approved dependencies, quality floor, repository layout, branch and merge conventions, where context and work tracking live, GLOSSARY vocabulary and the rule never to use tea. CLAUDE.md imports it. README gives the purpose and a make dev quick start. docs/ARCHITECTURE.md mirrors the CTXD CONTEXT.MD architecture section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6.7 KiB
AGENTS.md — MealQuest agent guide
This is the authoritative guide for every agent (and human) working in this
repository. CLAUDE.md only imports this file. Where this guide and a general
habit disagree, this guide wins.
MealQuest is a single Go service with an embedded React PWA for one household. The architecture of record is docs/ARCHITECTURE.md; product requirements are in design/MealQuest Requirements.md.
House rules
- Fail fast. Invalid configuration, input or state is an error reported immediately and clearly — the service refuses to start on bad config.
- No silent fallbacks. Never substitute a default, retry quietly, or swallow an error to "keep going". If something is missing, say so.
- One way to do a thing. No parallel code paths, alternative settings or "just in case" options. Pick one approach and use it everywhere.
- No new third-party dependency without owner approval. Use only the approved list below; anything else needs the owner's explicit yes first.
- Never use
tea. The Gitea CLI on this host is authenticated as the human owner. Agents act only through their own Gitea identities.
Approved dependencies (from CTXD)
Backend:
- Go 1.25, built with
CGO_ENABLED=0. github.com/go-chi/chi/v5— HTTP router.modernc.org/sqlite— CGO-free SQLite driver.sqlc— query code generation (dev tool only).github.com/coreos/go-oidc/v3— OIDC (Authentik).golang.org/x/oauth2andgolang.org/x/oauth2/google.github.com/SherClockHolmes/webpush-go— Web Push.golang.org/x/image— photo processing.github.com/oklog/ulid/v2— IDs.- Standard library
log/slogandnet/http. - Not allowed: LLM vendor SDKs, Google API SDKs (call the HTTP APIs directly), goose, golang-migrate.
Frontend:
- React 19, TypeScript, Vite.
- React Router 7, TanStack Query 5.
vite-plugin-pwa.lucide-reacticons at stroke width 2.75.- CSS Modules over the design tokens in tokens.css. No Tailwind, no Framer Motion, no hard-coded hex colours.
- Self-hosted fonts: Bagel Fat One and Figtree.
- Tests: Vitest, Testing Library, jsdom.
Quality floor
Every change must pass all of these before review (CI in .gitea/workflows/ci.yml enforces them):
gofmt -l . # must print nothing
go vet ./...
go test -race ./...
cd web && npm run typecheck && npm test && npm run build
And the build entry points in the Makefile and Dockerfile:
make test
make build
docker build .
Lint proves code parses, not that it works: where a change has runtime behaviour, exercise it (hit the endpoint, render the page).
Repository layout
| Path | Purpose |
|---|---|
cmd/server |
Entry point. Wiring only — no business logic. |
internal/config |
MEALQUEST_* environment config; secrets from *_FILE. |
internal/server |
HTTP server, routes, /health. |
internal/frontend |
go:embed of the built PWA with SPA fallback. |
internal/* (planned) |
auth, db, store, secretbox, household, dinners, recipes, ai/llm, ai/harness, ai/skills, suggest, plan, shopping, ideas, gcal, notify, push, chat, jobs, scheduler. |
migrations/ |
SQL migrations (planned). |
web/ |
React PWA source. |
deploy/ |
Deployment files (planned). |
docs/ |
Project documentation, including ARCHITECTURE.md. |
design/ |
Requirements and UI handoff. Read-only reference — do not edit. |
Dockerfile |
Multi-stage image build, at the repository root. |
Makefile |
dev, test, build, docker. |
.gitea/workflows/ci.yml |
CI quality floor. |
Design references:
- design/MealQuest Requirements.md
- design/MealQuest UI Designs/design_handoff_mealquest/README.md
- design/MealQuest UI Designs/design_handoff_mealquest/tokens.css
Branches, pull requests and merges
- Integration branch is
dev.mainis the release branch. - Feature branches:
feature/<feature-uuid>-<slug>, branched fromdev. - Task branches:
task/<slug>_<task-uuid>, branched from the feature branch. - Task pull requests squash-merge into the feature branch.
- The feature pull request merges into
dev. - Only
overseermergesdev→main(a release). - Never push directly to
devormain. - Authors never review, approve, merge or close their own work.
- Never store credentials in the repository; environment or ignored files only.
Where context lives and where work is tracked
- Context: CTXD project
mealquest— client guide at https://ctxd.cubecraftcreations.com. Project documents:CONTEXT.MD(architecture),DECISIONS.MD(decision log, e.g. D-021),RUNBOOKS.MD,PROMPTS.MD,GLOSSARY.MD. - Work tracking: Maestro at https://maestro.cubecraftlabs.com, workspace Maniacs-Mansion → project MealQuest. Every change has a task with a verifiable done-condition.
Vocabulary (GLOSSARY)
Use these product terms in code names, UI copy, docs and commit messages. Do not invent synonyms.
| Term | Meaning |
|---|---|
| Regulars | Dinners the household makes routinely. |
| Side quest | An AI-suggested new dinner to try. |
| Quest log | The to-try pool of accepted Side quests, scheduled later. |
| Try it / Pass | Accept (swipe right) / decline (swipe left) a suggestion. |
| Rotation check / "Keep it in rotation?" | The prompt after a Quest-log dinner is tried, asking whether it becomes a Regular. Promotion is always the household's choice, never automatic. |
| Supply run | The current week's shopping list, grouped by dinner. |
| Supply archive | The blog-style history of past shopping lists (by week, month, year). |
| Draft board | The mobile weekly plan layout the AI drafts for the household to adjust. |
| Rebuild week | Ask the AI to redraft the week's plan. |
| Push to Calendar | Push the plan one-way to Google Calendar. |
| Quick dinner | Cooked in a crock pot or 30 minutes or less from prep to table. |
| Cook from what I have | Ideas from a list of ingredients on hand. |
| Kitchen reading mode | Tablet recipe view: large text, ingredient checkboxes, step-by-step. |
| "Why this?" | The reason shown for a suggestion, referencing the household's Regulars. |
| Our kitchen / Shared household | The single shared household identity; no per-person profiles. |