Five axes, held continuously. Research lands in the columns; agents file into them on a cadence; the day's thinking goes in the scratchpad.
Weekdays only. Monday covers Friday to Sunday. One page,
under 700 words, with a provenance block you can audit.
Files live at reports/newsletter/YYYY-MM-DD.md.
Nine agents in two families, plus an editor and a ledger. Nothing runs yet. Each card holds a complete charter: open it to read the prompt, or copy it straight into a session to run the pass by hand today. The reasoning, the sources and the newsletter format are in the plan.
One markdown file per day at
logs/<you>/YYYY-MM-DD.md. Saves about a second after you stop typing.
Ordinary files — back them up, commit them, grep them.
Three surfaces, designed to grow differently. This is the answer to the portal getting cluttered as days accumulate, and it is worth knowing because it decides where anything new lands. The Brief is the only surface meant to grow: one file per weekday, about 250 a year, so the archive shows the last five in full and folds everything older by month. The Library is meant to stay small, because a card is durable reference rather than news; a column shows five and folds the rest, and the rule is that a flow item only becomes a card if it will still matter in thirty days. Reports grows steadily and is grouped by month with only the current month open. The consequence: the newsletter archive gets long, the board does not.
The brief arrives on its own. Weekdays at 03:00, Monday covering Friday to Sunday, with a notification in Claude when it lands. The 3am slot is deliberate: the run costs credits, and it should not compete with you for them during the day. The caveat that comes with it, stated plainly because it decides whether the timing works at all: scheduled tasks only run while the Claude desktop app is open, and a run that comes due while it is closed executes on next launch instead. If you shut the laptop overnight, the 03:00 run fires when you open it in the morning and spends the credits then anyway. To actually get the overnight slot, the app has to be left running and the machine kept awake. Either way nothing is lost: the dateline tells you when the window closed, and a second run on a day that already has a brief appends an update rather than overwriting it.
The columns are the mandate. Money flows, macro cycles, geopolitics × tech, what is genuinely new, and theses. Every piece of research lands in one of them, so a gap in the worldview shows up as a short column rather than as a vague feeling.
Reports are files, not records. Anything in reports/ shows up on the Reports tab by itself. Drop a PDF, a markdown file or a self-contained HTML dashboard in there and it is in the portal. Nothing to register.
The scratchpad is one file per day. logs/anshu/2026-09-10.md and so on. Plain markdown, saved automatically. Your co-founder gets logs/veer/ — separate directory, same portal, no collision.
Agents are charters before they are code. Six standing briefs are written out on the Agents tab, each naming its sources, its cadence, what its output must contain, and what it must never do. Two of them need paid or authorised access before they can run; one — the YC batch delta — only needs wiring, because the scraper and classifier already exist. Until then, "Copy charter" puts the whole brief on your clipboard to paste into a session.
The shared copy. aroraanshu26.github.io/research-portal is public and read-only: the board, the reports and the day logs all read normally, and notes a visitor types stay in their own browser. Double-click Publish.cmd to push an update. To see exactly what a visitor sees, open ?static=1 on the local copy.
When the co-founder starts writing. The author selector, the per-author log directories and the owner field on every card are already in place. Two people writing at once means running the same server.mjs somewhere you both reach, instead of the read-only page — no restructuring, no data migration.
If the server is not running, the portal still opens and everything reads normally; the scratchpad falls back to browser storage and the status chip at the top turns amber. Every save also writes to browser storage even when the server is up, so the two never diverge in a way that loses text.