What you haven’t decided, the agent decides.
Models, storage, layering: whatever you didn’t specify is up to it.
The continuous control layer between intent and implementation
Agents rewrite your software every day. Noema keeps the intent you wrote in force: you can see it, and you can change it.
Write in Markdown, in your own words. Anything you don’t specify, the agent decides.The agent implements within what your intent allows.For every phrase, see its implementation, the evidence, and what deserves attention.Change a sentence, or discuss it with the agent: it proposes an edit, and you review and decide.
Problem 01
You still have to explain the system in meetings, trace problems in incidents and make decisions as the architecture evolves, yet you didn’t write the code line by line.
BeforeReading the agent’s changes
export function streak(days: Date[], tz: string) { let n = 0; for (const d of sortedDesc(days)) { if (!isNextDay(d, n, tz)) break; n++; } return n;}export function computeStreak(entries: CheckIn[], now: Date, tz: string): number { const days = new Set(entries.map((e) => toLocalDay(e.at, tz))); let cursor = toLocalDay(now, tz); let count = 0; while (days.has(cursor)) { count += 1; cursor = prevDay(cursor); } return count;} const REWARD_AT = 7;if (streak(days, tz) >= 7) grantReward(user);export async function maybeReward(user: User, streak: number) { if (streak < REWARD_AT || user.rewards.has("streak-7")) return; await rewards.grant(user.id, "streak-7"); await notify(user.id, { kind: "reward", id: "streak-7" });} export const STREAK_WINDOW_DAYS = 400;NowOpen the note for an intent
After a streak of 7 days, give the user a reward.
1computeStreak converts every check-in record to a calendar day in the user’s time zone, removes duplicates, and counts back day by day from today, stopping at the first day with no record. Miss one day and the streak resets to zero.
When the streak reaches REWARD_AT (7), maybeReward grants one streak-7 reward and notifies the user. Users who have already claimed it don’t get it twice.
Key choice Counted by calendar day, not by 24 hours; the time zone comes from the device settings.
streak.test.ts covers 7 days in a row, one missed day and repeated check-ins on the same day; all 3 cases passTravelling across time zones or checking in after midnight may be misread as a broken streak; it currently follows the device time zone. Write this into the intent?
Rules 02
Noema doesn’t replace the agent’s judgment. It only holds these three boundaries.
Models, storage, layering: whatever you didn’t specify is up to it.
What you wrote is never quietly ignored or rewritten.
Anything that affects experience, risk or cost is put in plain sight.
Ownership 03
It doesn’t own how you express yourself or how you define your product, and it doesn’t ask you to replace the coding agent you’re used to.
prose + C4 + DSL + codeNatural language, DSLs, modeling languages, code. Mix them freely.
*.noema.mdPlain Markdown, managed in Git. They’re yours even without Noema.
ACP / agent adaptersKeep using the coding agent you’re used to. Noema doesn’t replace it.
Who it’s for 04
Something is broken in production. Everyone in the meeting room looks at you: “Why does this logic work like this? You explain it.”
Do you really own this system, or are you just the agent’s “meat proxy”?
The agent wrote the code, but you’re the one held accountable. You explain it on the agent’s behalf, yet you can’t say why it is the way it is.
How Noema helpsFollow one intent to its current implementation, check the evidence, and see what is still uncertain. What you explain is what you actually understand.
2 a.m., production is down. The only person who could read that code left last month. All they left behind is a chat log of four hundred turns.
Do you really control this product, or are you just watching it drift out of control day by day?
Engineers can’t review thousands of changed lines every day, so they wave them through, and hidden bugs stay in. When someone on the team leaves, that code turns into a bomb nobody can defuse.
How Noema helpsWhat Noema leaves behind is a document people can read directly, with the reason written next to every sentence. It doesn’t rely on anyone’s memory or hide inside one session. When people leave, the team and the product are still on the record.
A paying user messages you: “Why is a column missing from my export?” You stare at the screen and can’t tell whether it’s a bug, your design, or a choice the agent made for you.
Are you really building a company, or just consuming a product a coding agent made for you?
You only learn what your product does from your users. AI quietly made hundreds, even thousands, of choices and slowly rewrote a product you thought you had created.
How Noema helpsTrace a user’s question straight to the intent and implementation behind it, separate your product decisions from the agent’s choices, and take back the ones that truly matter.
FAQ 05
No. Programming languages describe implementation; Noema is about how the implementation answers your intent.
No. Write only the parts you care about and leave the rest to the agent. It will show you the choices that matter.
Yes. You don’t have to move your whole codebase into Noema first. Write intent only for the parts you care about most; the agent keeps implementing the rest as before.
No. Only you can change an intent. The agent is read-only by default, and its suggestions take effect only after you confirm them.
Plain Markdown files ending in .noema.md. Any editor can open them, and they go into Git.
No. The agent still writes the code; Noema is a layer of control on top of it.
If no coding agent is available, the app walks you through choosing, installing, signing in and verifying one. The first verification downloads a runtime, and the app tells you how large it is.
Error reports and usage statistics are two separate switches, on the Privacy page in Settings. Only fixed categories of action events are collected, never your text, files or paths.
Download 06
Download the Beta now and walk through the loop yourself.