決めていないことは、エージェントが決める。
モデル、ストレージ、レイヤー構成。指定しなかったことは任せます。
意図と実装をつなぐ、継続的なコントロール層
エージェントは毎日、ソフトウェアを書き換えていきます。Noemaは、書いた意図を有効なまま保ちます。見えるし、変えられます。
Markdownで、自分の言葉のまま書きます。指定しなかった部分は、エージェントが決めます。エージェントは、意図が許す範囲で実装します。一語ごとに、実装、根拠、注意すべき点を確認できます。一文を直すか、エージェントと相談します。修正案が出るので、確認して決めます。
課題 01
会議でシステムを説明し、障害で原因をたどり、アーキテクチャの変化に判断を下す。その役目は変わらないのに、コードは一行ずつ自分で書いたものではありません。
以前エージェントの変更を読む
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;今意図のノートを開く
連続記録が7日に達したら、ユーザーに報酬を付与する。
1computeStreakは、チェックイン記録をユーザーのタイムゾーンの暦日に変換して重複を除き、今日から1日ずつさかのぼって数えます。記録のない日で止まるので、1日抜けると連続記録はゼロに戻ります。
連続記録がREWARD_AT(7)に達すると、maybeRewardがstreak-7の報酬を1回付与し、ユーザーに通知します。受け取り済みのユーザーには重ねて付与しません。
重要な選択 24時間ではなく暦日で数える。タイムゾーンは端末の設定に従う。
streak.test.tsで7日連続、1日抜け、同日の重複チェックインを検証。3件とも成功タイムゾーンをまたぐ移動や深夜のチェックインで、途切れたと誤判定される可能性があります。現在は端末のタイムゾーンに従っています。意図に書き込みますか。
ルール 02
Noemaは、エージェントの判断に代わるものではありません。守るのは、この三つの境界だけです。
モデル、ストレージ、レイヤー構成。指定しなかったことは任せます。
書いたことは、黙って無視されることも、書き換えられることもありません。
体験、リスク、コストに響くことは、はっきり見せます。
主導権 03
Noemaは、表現の仕方にもプロダクトの定義にも口を出しません。使い慣れたコーディングエージェントを替える必要もありません。
prose + C4 + DSL + code自然言語、DSL、モデリング言語、コード。自由に混ぜて書けます。
*.noema.mdただのMarkdownで、Gitで管理します。Noemaがなくても手元に残ります。
ACP / agent adapters使い慣れたコーディングエージェントをそのまま使えます。Noemaは置き換えません。
こんな人へ 04
本番で障害が起きた。会議室の全員がこちらを見る。「このロジック、なぜこうなっている? 説明して」
このシステムを本当に握っているのか。それとも、エージェントの「meat proxy」にすぎないのか。
コードを書いたのはエージェントなのに、責任を問われるのは自分。代わりに説明する立場でありながら、なぜそうなっているのかは言えません。
Noemaでできること一つの意図から現在の実装をたどり、根拠を確かめ、まだ不確かな点を見極められます。口にする説明は、自分が本当に理解していることだけになります。
午前2時、本番が止まった。そのコードを読めた唯一の人は先月退職し、残されたのは400ターンのチャットログだけ。
このプロダクトを本当に掌握しているのか。それとも、日ごとに手を離れていくのを眺めているだけなのか。
毎日数千行に及ぶ変更を、エンジニアは見きれません。承認するしかなく、隠れたバグが残ります。誰かが抜ければ、そのコードは誰にも解除できない時限爆弾になります。
NoemaでできることNoemaが残すのは、人がそのまま読めるドキュメントです。一文ごとに理由が書かれています。特定の人の記憶にも、一つのセッションの中にも頼りません。人が去っても、チームとプロダクトの経緯は残ります。
有料ユーザーから連絡が来る。「エクスポートの列が1つ足りないのですが」。画面を見つめても、バグなのか、自分の設計なのか、エージェントが代わりに下した判断なのかがわからない。
会社を作っているのか。それとも、コーディングエージェントが作ったプロダクトを消費しているだけなのか。
自分のプロダクトが何をするのかを、ユーザーから教わっている。AIは数百、数千の選択を静かに重ね、自分で作ったつもりのプロダクトを少しずつ書き換えました。
Noemaでできることユーザーの質問から、その裏にある意図と実装まで直接たどれます。自分のプロダクト判断とエージェントの選択を切り分け、本当に大事なものを取り戻せます。
FAQ 05
いいえ。プログラミング言語は実装を記述するものです。Noemaが扱うのは、実装が意図にどう応えているかです。
いいえ。気になる部分だけ書き、残りはエージェントに任せます。重要な選択は、エージェントが見える形で示します。
使えます。コードベース全体を先にNoemaへ移す必要はありません。特に気になる部分の意図だけ書き、それ以外はこれまでどおりエージェントが実装します。
ありません。意図を変えられるのは本人だけです。エージェントは既定で読み取り専用で、提案は確認して初めて反映されます。
拡張子が.noema.mdのMarkdownファイルです。どのエディタでも開け、Gitで管理できます。
なりません。コードを書くのは引き続きエージェントで、Noemaはその上に載る制御層です。
使えるコーディングエージェントがない場合は、選択、インストール、サインイン、動作確認までアプリが案内します。初回の確認ではランタイムをダウンロードし、サイズも表示されます。
エラーレポートと利用統計は別々のスイッチで、設定のプライバシーのページにあります。収集するのは操作イベントの決まった分類だけで、文章、ファイル、パスは含みません。
ダウンロード 06
Betaを入手して、この一連の流れを自分で試してみてください。