Project Info
Inspiration
We all forget the things we were working on. Important ideas get buried across Markdown files, meeting notes, browser tabs, project folders, and half-finished thoughts. Traditional chatbots can answer questions, but they do not truly understand the personal context behind a person’s work. Noema was inspired by the idea of a private, intelligent work companion: something that helps you recover your own thinking instead of constantly making you explain it again. The goal was to build a personal knowledge workspace that feels more like a thoughtful research partner than a search box.
What it does
Noema gives users their own local knowledge corpus. It can: Search and answer questions from personal notes with verified citations Understand conversational context instead of relying on rigid keywords Ask the user to explicitly select a file or folder when more local context is needed Research the live web and provide source-grounded answers Turn notes into literature reviews and structured artifacts Capture URLs, text, and meeting transcripts into editable drafts Resurface forgotten ideas and open questions Maintain a local work timeline and focus memory Explain its approach through a concise, human-readable reasoning summary Noema never silently writes to the user’s corpus. Every proposed change must be reviewed and approved first.
How we built it
Noema is a local-first Electron desktop application with a React and TypeScript interface. Its architecture is divided into: A local Markdown corpus owned by the user A lightweight semantic index for searching notes A main-process agent layer that communicates with NVIDIA NIM A secure preload bridge between Electron and the renderer A conversation-aware router that decides whether to answer directly, search the corpus, request selected local context, or research the web A citation validation layer that checks whether generated claims are actually supported by retrieved source text For local files and folders, Noema uses an explicit native picker. The user chooses what the assistant can inspect. Reads are bounded, credentials and .env files are excluded, and selected context is never silently added to the persistent corpus. For web research, Noema retrieves a bounded set of readable sources, sends the relevant text to the model, and only renders claims whose citations can be validated against the fetched source content.
What we learned
The biggest lesson was that useful AI behavior is not just about generating better answers. It is about choosing the correct context. A greeting should not trigger a database search. A question about personal notes should not receive a generic answer. A request to inspect a local folder should not result in a fabricated response or unsafe filesystem access. We learned to treat routing, permissions, provenance, and user control as first-class parts of the AI experience. We also learned that trust comes from showing the user where an answer came from, what Noema did, and what it was unable to verify. Challenges we faced The hardest challenges were: Designing semantic routing without reducing the experience to brittle keyword rules Preventing hallucinated citations and unsupported corpus claims Safely handling local file and folder context in an Electron application Supporting live web research without turning the assistant into an unrestricted browser Preserving privacy while still making the product feel intelligent Creating a polished interface for complex agent states such as searching, requesting context, retrying, and asking for approval Making the entire flow work reliably during a hackathon demo The final result is a hackathon-safe personal knowledge companion that combines memory, research, and conversation while keeping the user in control.
Noema
Noema is a desktop knowledge workspace with its own local Markdown corpus. It turns notes, meetings, captures, and focus checkpoints into searchable working memory without treating model output as evidence. Existing folders and Obsidian vaults remain optional connectors.
The problem
Researchers, educators, and students accumulate notes that are hard to revisit as a whole. Important connections and contradictions stay buried, and turning scattered reading notes into a reliable draft still takes manual work. Ordinary chat tools do not retain a user's corpus as persistent working knowledge, and they cannot safely act on it.
The solution
Noema creates Documents/Noema Library as a transparent corpus of ordinary files, gives an agent bounded tools to search and read it, and turns retrieved notes into grounded answers and research artifacts. Every displayed citation is checked in code against the source note. Any proposed write stays editable and unwritten until the user explicitly approves it.
Why Noema
- Code-validated citations, not model-made references. A claim only renders with a citation after Noema verifies the cited text against the corpus; unsupported claims are removed.
- An agent that can act, behind an approval gate. Capture, meeting, and linking flows produce editable proposals. Nothing reaches the corpus until the user chooses Approve & write.
- A daily knowledge loop. Today suggests useful next prompts, Review turns resurfaced notes into recovery work, and every answer offers a concrete next action.
- Hackathon-safe Focus Memory. A user explicitly selects one screen or window, adds checkpoints, and receives a local recap connected to related notes. No screen image or focus record is sent to NIM, and recap notes still require approval.
- Private continuity, without ambient surveillance. Work Timeline uses real local file timestamps, meeting tasks can enter Review, and
Cmd/Ctrl + Shift + Spacereopens Ask from anywhere. Noema never starts background screen or audio capture. - A useful assistant, not a compulsory search box. Noema semantically interprets the conversation and chooses a direct response, selected local context, or citation-validated corpus retrieval. When a local file or folder is needed, it asks for explicit access and resumes the same request after selection.
- Live research with a visible approach. Current or explicitly online questions trigger bounded web research, readable-source extraction, and code-validated clickable citations. Every answer can reveal a concise decision summary, and web sources can enter the existing editable Capture flow.
The interface is a light Reading Room: a calm, sidebar-based workspace where green means verified and amber appears only while the agent is actively using a tool.
Demo video
A public demo-video link will be added here once the recording is uploaded. The recording plan is in docs/demo-script.md.
Built with
- GPT-5.6 / Codex was used to design, implement, test, and package the Electron application. Codex contributed the final submission pass.
- Tirth Shendage contributed the hackathon submission, product direction, and demo refinement.
- NVIDIA NIM runs the app at runtime:
meta/llama-3.1-8b-instructpowers the agent andnvidia/llama-nemotron-embed-1b-v2provides corpus embeddings.
Download and run
The Package desktop apps workflow publishes unsigned desktop artifacts. Verified run 29519838958 produced:
- macOS: ARM64 and x64
.dmgand.zippackages. - Windows: x64 NSIS installer and portable
.exepackages.
macOS
- Download the artifact that matches your Mac (
arm64for Apple Silicon;x64for Intel). - Open the
.dmgand drag Noema to Applications, or unzip the.zip. - Because this hackathon build is unsigned, Control-click Noema, choose Open, then choose Open again in the confirmation dialog. You only need to do this the first time.
- If macOS still blocks the app, open System Settings → Privacy & Security and choose Open Anyway for Noema.
Windows
- Download the x64 NSIS installer, or use the portable
.exeif you do not want an installation. - Run the file. Windows SmartScreen may show a protection screen because the build is unsigned.
- Choose More info, then Run anyway. The installer lets you select an installation folder.
Before your first corpus index
Noema uses NVIDIA NIM for embeddings and synthesis. Set NVIDIA_API_KEY in your environment before launching the app. For development, you can also create a local .env file:
NVIDIA_API_KEY=your_key_here
The key stays in Electron's main process and is never exposed to the renderer.
Hackathon packaging risk: current judge/demo installers deliberately bundle
.envso they run with zero setup. Anyone who receives an installer can extract that NVIDIA key. Do not distribute these builds publicly; remove theextraResourcesentry and rotate the key before a public release.
Development
npm ci
npm run dev
Useful checks:
npm run typecheck
npm run smoke:local
npm run smoke:workspace
npm run package:mac
Windows packages are built on the native Windows GitHub Actions runner; macOS packages are built on the native macOS runner. This avoids cross-platform packaging mismatches.
MCP: let other agents query your corpus
Noema can expose its indexed corpus to other agents (Claude, Codex, etc.) over the Model Context Protocol, so an agent working on something else can pull grounded, cited context from your notes instead of guessing or making you re-explain it.
npm run mcp
This starts a read-only stdio MCP server with four tools: search_notes, read_note, list_notes, and ask_corpus (a fully synthesized, citation-validated answer — the same grounding pipeline as the in-app Ask). By default it reads whichever vault you last opened in the desktop app; point it at a specific vault instead with NOEMA_VAULT_PATH=/path/to/vault.
There is deliberately no write_note or link_notes tool here. Every write in Noema stays behind the in-app EditablePreview approval gate — an external agent can read and ask, but it cannot commit anything to disk without a human clicking Approve & write inside the app itself.
Knowledge workspace UI
The app is a warm-paper, light-only workspace with six connected areas: Today, Ask, Create, Review, Capture, and Library. Green marks selected, verified, local, and approved states. Amber appears only while an agent operation is active.
Focus Memory privacy boundary
- It never starts automatically.
- Screen or window selection is explicit through Noema's local Electron source picker.
- The current hackathon build stores user-entered session context, timestamps, and checkpoints locally.
- It does not claim continuous OCR, microphone capture, system-audio capture, or behavioral profiling.
- Saving a recap to the corpus opens the same editable approval gate as every other write.
Selected context privacy boundary
- Typing a local path never grants filesystem access. Noema opens a native picker and reads only the file or folder the user explicitly selects.
- The renderer receives an opaque token, not authority to request arbitrary paths. Context tokens expire after four hours.
- Reads are text-only and bounded; dependency/build folders, hidden files,
.envfiles, credentials, and private-key-like files are excluded. - Selected text is sent to NVIDIA NIM to answer the current request. It is not imported into the persistent corpus unless the user separately approves a Capture write.
Analysis
View
Metric
- 1
- 1
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- HTMLIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
5 of 5 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
424 KB
Source files
80
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
tirthfx/noema
88 files · 1.6 MB · @ 20ead22
Structure
Interface
11 files · 13%Screens, components and styles rendered to the user.
Application logic
36 files · 41%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript64%
- Markdown26%
- CSS10%
- YAML1%
- HTML0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 22- @fontsource-variable/geist
- @fontsource/jetbrains-mono
- @fontsource/source-serif-4
- @gsap/react
- @modelcontextprotocol/sdk
- @phosphor-icons/react
- gsap
- react
- react-dom
- zod
- +12 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.