정하지 않은 것은 에이전트가 정합니다.
데이터 모델, 저장소, 계층 구조까지, 지정하지 않은 부분은 에이전트 몫입니다.
의도와 구현 사이의 지속적인 통제 계층
에이전트는 매일 소프트웨어를 고쳐 씁니다. 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는 모든 체크인 기록을 사용자 시간대의 달력 날짜로 변환해 중복을 제거한 뒤, 오늘부터 하루씩 거슬러 세다가 기록이 없는 첫날에서 멈춥니다. 하루 빠지면 연속 일수는 0으로 돌아갑니다.
연속 일수가 REWARD_AT(7)에 이르면 maybeReward가 streak-7 보상을 한 번 지급하고 사용자에게 알립니다. 이미 받은 사용자에게는 다시 지급하지 않습니다.
핵심 선택 24시간이 아니라 달력 날짜 기준이며, 시간대는 기기 설정을 따릅니다.
streak.test.ts가 7일 연속, 하루 누락, 같은 날 중복 체크인을 검증하며 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가 남기는 것은 사람이 바로 읽을 수 있는 문서이고, 문장마다 이유가 옆에 적혀 있습니다. 누구의 기억에도, 어느 세션 안에도 기대지 않습니다. 사람이 떠나도 팀과 제품의 기록은 남습니다.
유료 사용자가 메시지를 보냅니다. 「내보내기 파일에서 열 하나가 왜 빠졌나요?」 화면을 노려보지만 버그인지, 내가 한 설계인지, 에이전트가 대신 내린 선택인지 알 수 없습니다.
회사를 만들고 있습니까, 아니면 코딩 에이전트가 만들어 준 제품을 소비하고 있을 뿐입니까?
내 제품이 무엇을 하는지 사용자에게서 듣고서야 압니다. AI가 조용히 수백, 수천 가지 선택을 내리며, 직접 만들었다고 믿는 제품을 서서히 고쳐 써 왔습니다.
Noema가 돕는 방법사용자의 질문에서 그 뒤의 의도와 구현까지 바로 추적하고, 제품 결정과 에이전트의 선택을 분리해서, 정말 중요한 것은 되찾아 오세요.
FAQ 05
아닙니다. 프로그래밍 언어는 구현을 기술하고, Noema는 그 구현이 의도에 어떻게 답하는지를 다룹니다.
아닙니다. 신경 쓰는 부분만 적고 나머지는 에이전트에게 맡기세요. 중요한 선택은 에이전트가 보여 줍니다.
네. 코드베이스 전체를 먼저 Noema로 옮길 필요는 없습니다. 가장 중요한 부분에만 의도를 쓰면 되고, 나머지는 이전처럼 에이전트가 구현합니다.
아닙니다. 의도는 작성자만 바꿀 수 있습니다. 에이전트는 기본적으로 읽기 전용이며, 제안은 확인해야만 반영됩니다.
.noema.md로 끝나는 일반 Markdown 파일입니다. 어떤 에디터로도 열 수 있고 Git에 넣을 수 있습니다.
아닙니다. 코드는 계속 에이전트가 쓰고, Noema는 그 위의 통제 계층입니다.
사용 가능한 코딩 에이전트가 없으면 선택, 설치, 로그인, 확인까지 앱이 안내합니다. 첫 확인 때 런타임을 내려받으며, 용량은 앱에 표시됩니다.
오류 보고와 사용 통계는 설정의 개인정보 페이지에서 각각 따로 켜고 끕니다. 정해진 종류의 동작 이벤트만 수집하며, 텍스트, 파일, 경로는 수집하지 않습니다.
다운로드 06
지금 Beta를 내려받아 이 순환을 직접 돌려 보세요.