TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
기사와 하이라이트, 메모를 저장하면 Noeis가 출처를 인용하는 위키로 만들고, 질문하면 읽은 내용에서 인용된 답을 제공합니다
Save articles, highlights and notes, and Noeis grows them into a wiki that cites every source. Ask it questions, or connect your AI agents, and get answers quoted from your own reading.
생산성JavaScript · CSSGitHub @atsokolas온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Noeis is a four-room knowledge workspace for turning reading into durable understanding and better judgment.
Library grounds what you know, Think is the native notebook, Wiki maintains durable synthesis, and Judgment compounds decisions, outcomes, and lessons.README 전문 보기 ↗Noeis is a four-room knowledge workspace for turning reading into durable understanding and better judgment. Library grounds what you know, Think is the native notebook, Wiki maintains durable synthesis, and Judgment compounds decisions, outcomes, and lessons.
Core product flow:
/login, /register) with optional Chrome extension setup/wiki), then move through Library (/library), Think (/think), Wiki, and Judgment (/judgment) without losing source context/settings)Agentic capabilities (optional, human-in-the-loop):
Release design and acceptance details: Noeis four-room implementation plan.
Vectors live in the vectoritems collection on the same Atlas cluster as
everything else — no separate vector database to run or provision. Embeddings
come from OpenRouter (OPENROUTER_API_KEY), the same account as the text model.
First-time setup (idempotent, safe to re-run):
node scripts/create_vector_index.js # builds the Atlas index, polls to READY
node scripts/backfill_embeddings.js --user <id> # or --all-users
GET /health reports vectorIndex.status and vectorIndex.itemCount. A READY
index with zero items means the backfill has not run — it is called out
explicitly there because two previous vector stores emptied themselves in
production without anything noticing.
Endpoints:
GET /api/semantic/related?sourceType=highlight&sourceId=... → { results: [...] }GET /api/highlights/:id/related → { results: [...] }POST /api/semantic/margins { paragraphs, articleId?, excludeHighlightIds? } → { notes: [{ paragraph, relation: 'close', highlight }] } — the closest highlight from another source per paragraph (at most five); empty when nothing is close or no embedding provider is configuredThe backend now records critical product events as JSON lines (default) with pseudonymous user IDs. No highlight text, note content, usernames, or raw queries are logged.
Tracked events:
user_signuphighlight_capturedworkspace_createdcapture_completedconcept_createdrevisit_scheduledsemantic_search_performedai_draft_generatedai_draft_acceptedrelated_highlight_clickedEnvironment variables:
ANALYTICS_ENABLED (default: true)ANALYTICS_LOG_PATH (default: server/logs/product-events.jsonl)ANALYTICS_HASH_SALT (recommended, used to hash user/object ids)POSTHOG_HOST and POSTHOG_PROJECT_API_KEY (optional; if set, events are also mirrored to self-hosted PostHog)POSTHOG_TIMEOUT_MS (default: 3000)The Node API calls OpenRouter directly for both text generation and embeddings.
Without OPENROUTER_API_KEY (or HF_TOKEN for text), AI features stay quiet and
the rest of the app works. Model routes and the remaining knobs are documented in
.env.example.
Agent eval:
npm run agent:eval seeds a small reading library (server/agentEval/library.js), asks the thought partner the questions in server/agentEval/cases.js from the surfaces readers use, and scores each answer. It checks that the right sources were found, that the answer carries their actual words, that it cites only what it used, that it never invents a quotation or answers with a template, and that it says so when the library has nothing.HF_TOKEN or OPENROUTER_API_KEY in .env it measures the model path; without one it measures what readers get when the model is unavailable. modelAnswered in the summary says which.npm run agent:eval:check exits non-zero when any rate falls below server/agentEval/baseline.json. Raise the baseline with -- --update-baseline after an improvement lands.-- --case=summary,hiring --verbose runs selected cases and prints the replies. Reports are written to tmp/agent-eval/.AGENT_EVAL_MONGODB_URI to use a throwaway server instead; it never reads MONGODB_URI.npm run agent:approval-smoke -- --base-url=https://your-api --token=JWT --action=reject creates a real pending memory.commit approval, verifies it is listable, rejects it with an audit note, and writes a JSON report to tmp/agent-approval-smoke-runs. Use --action=approve only when you intentionally want the smoke test to commit working-memory rows.POST /api/agent/memory-approvals stages working-memory updates as memory.commit protocol approvals. Approving the protocol approval executes the commit into WorkingMemoryItem; rejecting it stores the user decision note for audit review.GET /api/agent/write-boundary summarizes the safety split between approved memory commits, pending memory approvals, and staged structure proposals. The Thought Partner panel renders this as a write-boundary card plus a separate Memory approvals review queue.A publish-ready HTML draft for docs.noeis.io lives at:
docs/docs.noeis.io/index.htmlIt documents the current marketing narrative across:
Concepts now persist a document-outline workspace in concept.workspace:
{
"version": 1,
"groups": [
{
"id": "uuid",
"title": "Workspace",
"description": "",
"collapsed": false,
"order": 0
}
],
"items": [
{
"id": "uuid",
"type": "highlight",
"refId": "mongo-object-id",
"groupId": "group-uuid",
"parentId": "",
"order": 0
}
],
"updatedAt": "2026-02-21T00:00:00.000Z"
}
Workspace endpoints (JWT required):
GET /api/concepts/:conceptId/workspace -> returns workspace and lazily initializes default group if missingPUT /api/concepts/:conceptId/workspace -> replaces workspace with validated payloadPATCH /api/concepts/:conceptId/workspace -> applies operation payload { op, payload }POST /api/concepts/:conceptId/agent/build -> runs the library-only concept agent loop. Supports preview: true for confirm-before-apply, and applyPreview: true to apply the latest stored preview.POST /api/concepts/:conceptId/agent/suggest -> generates AI draft suggestions from your library for the concept (library_only)GET /api/concepts/:conceptId/agent/suggestions -> returns active AI-generated draft suggestions (pending + accepted, excluding discarded)POST /api/concepts/:conceptId/agent/suggestions/:draftId/accept -> accepts selected or all pending AI draft suggestions; accepted items are added to workspace InboxPOST /api/concepts/:conceptId/agent/suggestions/:draftId/discard -> discards selected or all pending AI draft suggestionsGET /api/debug/agent-metrics -> returns in-memory observability counters for scout/build and AI upstream outcomesAI draft suggestions are explicitly marked as AI-generated, require user acceptance to enter Inbox, and persist until discarded.
Patch operations:
addGroup, updateGroup, deleteGroupaddItem, moveItem, updateItem, deleteItemThe UI shell now uses a shared token-driven layer across the four primary rooms:
Wiki is the post-login return route (/wiki); Library, Think, Wiki, and Judgment remain persistent primary navigation.AppShell (note-taker-ui/src/layout/AppShell.jsx)TopBar (note-taker-ui/src/layout/TopBar.jsx)RightDrawer (note-taker-ui/src/layout/RightDrawer.jsx)SurfaceCard, PillButton, Chip (note-taker-ui/src/components/ui.js)note-taker-ui/src/styles/dashboard-refresh.cssnote-taker-ui/src/styles/theme.cssnote-taker-ui/src/styles/semantic-theme.cssnote-taker-ui/src/styles/dashboard-refresh.css (--space-*, --radius-*, --surface-*, --text-*)note-taker-ui/src/layout/AppShell.jsxnote-taker-ui/src/layout/LeftNav.jsxnote-taker-ui/src/layout/TopBar.jsxnote-taker-ui/src/layout/RightDrawer.jsxnote-taker-ui/src/pages/ThinkMode.jsxnote-taker-ui/src/components/think/ThinkHome.jsxdocs/ui-regression/think-home-baseline.mdnote-taker-ui/src/styles/think-home-polish.css