All projects

Agentic AIStatus: Case StudyYear: 2026

Hushh Personal Agent

A personal AI agent that asks before it reads: consent is enforced by the server, not the prompt.

A look inside

5 screens from the real build. Select any to see it full size.

The orchestrator classifies the request as finance and hands it to Kai, but financial consent is revoked, so the server answers with a consent prompt instead of reading any data. The check runs in the API against stored consent records, not in the model's prompt.
Each data category has its own consent toggle, saved through the API. Every change is written to a history with its previous state, new state and source, shown here as the revoke that blocked the request in the first screen.
Kai uses Gemini only to pull the intent and numbers out of the message. A saved finance snapshot and plain arithmetic produce the answer, and each reply names the snapshot it used. Here the check compares the price with one month's net income, so an 80,000 laptop does not fit a 33,000 monthly surplus.
Kai's dashboard running on the app's built-in demo portfolio. The API calculates the health score, allocation split and insights, such as cash covering only 2.9 months of expenses.
Nav, the creator agent, lets a user choose which data sources brands may use and accept, counter or decline each brand's request. The sources, earnings and requests shown are sample data that ships with the app.

Overview

A consent-first personal AI agent: a central agent routes requests to specialist agents for finance and creator work, and the server checks stored consent before any of them reads your data.

The problem

Personal AI agents need access to sensitive data, but consent written into a prompt is a suggestion, not a control.

What I built

Built the proof of concept: the orchestrator and specialist agents, the consent API and its history, and the React interface.

What it does

  • Consent-gated agent handoff
  • Per-category consent with history
  • Kai, a finance assistant
  • Nav, creator data controls

System and architecture

A personal agent routes each request to a specialist found through A2A agent cards. Before any data is read, the API checks the user's stored consent for that category, and every consent change is recorded with its history.

A React 19 and Vite frontend talks to an Express API written in TypeScript. The orchestrator classifies each request and hands it to Kai (finance) or Nav (creator) through A2A agent cards. Kai uses Gemini only to extract the intent and numbers, then answers with arithmetic over a saved finance snapshot and names the snapshot it used. Payments follow AP2-style signed mandates that need human approval; signatures and payment rails are simulated. Data lives in SQLite through Prisma and libSQL.

System map4 layers
  1. Interface
  2. API & services
  3. Retrieval & data
  4. AI & models
  • Consent checked in the API against stored records
  • Specialist agents discovered through A2A agent cards
  • The model extracts; plain arithmetic decides

Technology

  • TypeScript
  • Express
  • React
  • LangChain
  • Gemini
  • Prisma
  • MCP
  • A2A

Themes

  • Agents
  • Consent
  • Personal AI

Challenges and trade-offs

  • Keeping the model away from the arithmetic so answers stay correct.
  • Making consent enforceable rather than a line in a prompt.

Outcome

At a glance

Consent-gated agents · A2A · Gemini extraction

  • Revoked consent blocks a request before any data is read.
  • Every finance answer names the snapshot it was computed from.

Learnings

  • Consent belongs in the data layer, not the prompt.
  • Letting the model extract and code compute keeps finance answers checkable.