thursday
AGENTS.md56 starsChanged 46 days agoMITView on GitHub
A local-first voice agent. GPT-Live 1 ("Thursday") holds a spoken call; a separate Responses backend runs the call's tools, and alone answers a call in writing or from a phone. Anything that takes time goes to text-model bots that run in the background with a shell, a browser and skills. Jobs run on the server and outlive the call; the screen is a projection of server state. This is a public MIT repository (github.com/cgoinglove/thursday-agent, published to npm as thursday-agent). What…
- Reads credentials
1 other project uses a version of this.
Adopted by
Most recently taken up by
- cgoinglove/thursday-agentword for word, first seen Sep 27, 2026
Other versions1 project uses a version of this.
Word for word · 1
- cgoinglove/thursday-agent★ 56100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
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,774 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 repository12 other files it gives its agents.
- agent-browserSkill
- ai-sdkSkill
- marketingSkill
- shadcnSkill
- artifactSkill
- browserSkill
- computerSkill
- daily-briefSkill
- data-reportSkill
- find-skillsSkill
- media-digestSkill
- skill-creatorSkill
The file
We split this AGENTS.md into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 23
No heuristic does the model's job: No phrase matching, per-language word lists or timers that guess intent.
- Distinctive: line 25
Nothing is forced to work: No copy of another site's markup, no endpoint its owner does not document for that use, no branch that only …
- Very specific: line 130
When a new model arrives, what it no longer needs is deleted: /claude-api prompt-audit, and node scripts/maps.mts --stale for the maps …
≈ “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
thursday
A local-first voice agent. GPT-Live 1 ("Thursday") holds a spoken call; a separate Responses backend runs the call's tools, and alone answers a call in writing or from a phone. Anything that takes time goes to text-model bots that run in the background with a shell, a browser and skills. Jobs run on the server and outlive the call; the screen is a projection of server state.
This is a public MIT repository (github.com/cgoinglove/thursday-agent, published to npm as
thursday-agent). What is committed here is read by strangers and shipped to their machines.
Rules
- English in the tree. Code, comments, prompts, strings and commit messages are English.
README.ko.mdis the one translated file. - Nothing about one user goes into the tree, and the person you work for is one user. Their
words, names, accounts, habits, rules for a situation, language, country and market are their
data — memory, Settings, a
*.local.*file — never code, prompt text, a test fixture, a word list or a default. A default, example, source, site or currency works for a stranger anywhere; what serves one script or region, such as a font, is added beside the others, never instead. The author credit its LICENSE carries is the project's, not one user's. - Anything private is named
*.local.*..gitignorekeeps that shape out of commits. Nevergit add -fone. - No heuristic does the model's job. No phrase matching, per-language word lists or timers that guess intent.
- Nothing is forced to work. No copy of another site's markup, no endpoint its owner does not
document for that use, no branch that only makes the example at hand pass, no retry, fallback
or empty result that hides a failure. What cannot be done cleanly is said, not forced. The one
exception is the maintainer's choice: the ChatGPT sign-in (
features/ai/chatgpt.ts) signs in through the Codex CLI's OAuth client. - Each thing a diff changes stands on something you can name — a case you reproduced, a measurement, code or a document you can quote, what you were asked — and the commit or pull request says which. A guess is not one.
- A rule that looks wrong is asked about, not obeyed or worked around. When a line of this
file, a map or a
SKILL.mdcontradicts the code, the task or another line, or its stated reason does not hold for the case at hand, quote it, say what following it would cause, and ask the person you work for before doing the part it decides; with no one to ask, leave that part undone and open your report with the question. The answer rewrites the line, unless it is a vendored skill. - The user's data is not clutter. The database,
DATA_DIR/.sign-insand.ai-workspace/are never deleted to tidy up. - A number that tunes behaviour is a
config.tsconstant whose comment says what moving it does; a number that is the drawing (a radius, an easing, a timeout the other end also knows) stays where it is drawn.
The two roots
config.ts has APP_DIR (build, migrations, bundled skills) and DATA_DIR (database, the .env
with the key its secrets are sealed with, workspace, installed skills, kept sign-ins). Both default
to the checkout and move with THURSDAY_APP_DIR / THURSDAY_HOME; npx thursday-agent points
them at the package and ~/.thursday. The app never writes into APP_DIR at run time.
Running the app
A running app's database is someone's real data. Boot writes to it: it parks running threads, closes open calls, starts routines that are due and connects to the phone. Never start a server on it. To look at the app, serve it on an empty data folder, always bound to loopback:
THURSDAY_HOME=$(mktemp -d) THURSDAY_SKIP_BROWSER=1 pnpm exec next dev -H 127.0.0.1 -p <port>That copy still loads .env, so a bot on it calls real providers with real keys. When a next dev
already runs in this checkout, a second one is refused; never kill it, and serve the build instead:
pnpm build && THURSDAY_SKIP_BROWSER=1 pnpm start --home "$(mktemp -d)" --port <n> --no-open.
The running app is someone's: use it only for what writes nothing — opening a thread, or a file
that names one, marks it seen.
A script that calls the app's code is a *.local.mts in the repository, run with npx tsx and
deleted after. It sets THURSDAY_HOME to an empty folder before it loads app code with
await import(): a static import runs first, and database/db.ts then opens the real database.
Layout
features/<name>/ One domain: <name>.schema.ts (zod), <name>.query.ts (the only drizzle access),
<name>.action.ts (server actions), components/ (its screens).
features/ai/ What the model sees: prompts, tools, which model runs.
app/ Pages, and API routes that hand a domain's query to serverRoute.
components/ui/ Domain-agnostic UI (shadcn and the app's own).
lib/ Domain-agnostic code: protocol/, live/ (the call seam), sandbox, utils.
database/ db.ts (one client), tables.ts (all tables), migrations/ (pnpm db:generate).
config.ts Paths, limits and tuning numbers. Not secrets.
bin/ The `thursday` CLI. Plain .mjs, runs before anything is built.
scripts/ dev, reset, pack (the npm tree), and the test suites (*.test.mts).
guide/ How the app works, for the person using it; Thursday reads it
(features/ai/guide.ts).
skills/ Skills shipped with the app, read-only; every bot can load them.
seed-skills/ A ready-made bot's own skills, read-only, listed to the bot of that name alone.
docs/ how-it-works.md, and the images the READMEs show.Checks
pnpm typecheck,pnpm lint, and the suite for the area changed (pnpm test:live,test:bot,test:memory,test:reach,test:artifact,test:skills,test:cli,test:secrets; all offline). A client/server boundary change also needspnpm build.- Schema change:
pnpm db:generate, and commit the migration with it. Neverdrizzle-kit push. A running server applies it only after a restart; say so. - A change the user would notice updates
guide/in the same commit. pnpm lintalso runsscripts/maps.mts, which fails on a map over its size, a path glob that matches nothing, or a named file that no longer exists.
Maps
Each area has a map in .claude/rules/: what it is for, the files to open first, and what breaks
there. Claude Code attaches one only when its Read tool opens a matching file — a file read
through cat, sed or grep brings none — so anything else reads the map by hand:
| When you change … | Read |
A call, spoken, in writing or from a phone: features/thursday/ logic, features/reach/, lib/live/, the call prompts | .claude/rules/call.md |
| The call screen: her face, the room and its threads, bots' marks, finished cards, the intro | .claude/rules/screen.md |
Shared UI, colours, keys or Settings: components/, hooks/, app/globals.css, features/settings/ | .claude/rules/ui.md |
| How a screen looks: the maintainer's picks | .claude/rules/taste.md |
How jobs run: bots, threads, the room, routines, bot.prompt.ts | .claude/rules/jobs.md |
| A bot's shell, browser, workspace or borrowed sign-ins | .claude/rules/workbench.md |
Shipped skills, seed bots or finished work: skills/, features/skills/, features/artifact/ | .claude/rules/skills.md |
Prompts, tools or memory: features/ai/prompts/, features/ai/tools/, load-tools.ts, features/memory/ | .claude/rules/model.md |
| Models, keys, the ChatGPT sign-in, media models or MCP | .claude/rules/providers.md |
| Reads, writes, events, the database or what may reach the app | .claude/rules/data.md |
Boot, config.ts, the CLI, packaging, CI or a release | .claude/rules/ship.md |
The READMEs, docs/how-it-works.md, SECURITY.md, CONTRIBUTING.md or guide/ | .claude/rules/docs.md |
Keeping them true:
- A change that makes a line of a map wrong rewrites that line in the same commit and moves the
map's
checked:date; a line is replaced, never followed by a correction. - A new entry file gets a line under its map's "Start here"; a new area gets a map of its own.
- A rule is the maintainer's: a line under this file's Rules or in
taste.mdgoes in only in wording the maintainer approved. A map's "What breaks" says what breaks where, as the code bears it out; an agent proposes a new line there at the end of its report rather than adding it. - When a new model arrives, what it no longer needs is deleted:
/claude-api prompt-audit, andnode scripts/maps.mts --stalefor the maps whose area changed most since they were checked.
<!-- BEGIN:nextjs-agent-rules -->This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in node_modules/next/dist/docs/ (resolved from this file's directory; in monorepos the next package may not be visible from the repo root) before writing any code. Heed deprecation notices.
This block is written and re-added by next dev — verify at node_modules/next/dist/server/lib/generate-agent-files.js. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.
<!-- END:nextjs-agent-rules -->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.

