IntentVault is a privacy-first workflow layer for Solana decision support.
The product thesis is simple: public market facts can be gathered from normal APIs, but a user's intent, constraints, and strategy should not be casually exposed to a public AI endpoint. IntentVault separates those two concerns and turns them into a structured workflow instead of a loose chat prompt.
The current MVP implements one workflow:
Investigate Token (Private)
It collects public token signals, normalizes them into a compact evidence bundle, sends the sensitive reasoning step through a private inference adapter, and returns a structured decision card.
- Accepts a token mint or symbol, risk mode, time horizon, and optional wallet context
- Builds a normalized evidence bundle from public-signal providers
- Shapes private user notes and constraints separately from public facts
- Produces a structured decision card with risk summary, next checks, and strategy options
- Runs locally in deterministic mock mode even when no external API keys are configured
Most crypto tooling gives you one of two things:
- raw public metrics
- generic chat interfaces
IntentVault is meant to sit above both. It is not a scanner, router, or RPC provider. It is a workflow wrapper that makes private decision support repeatable, inspectable, and safe to extend.
flowchart LR
U["User Input\nToken + Preferences + Notes"] --> UI["Next.js Web App"]
UI --> API["Workflow Route Handler"]
API --> SIG["Public Signals Provider"]
SIG --> NORM["Normalized Evidence Bundle"]
UI --> API
NORM --> INF["Private Inference Adapter"]
API --> INF
INF --> CARD["Decision Card"]
CARD --> UI
- The user submits the
Investigate Token (Private)form in the web app. - The route handler starts the workflow with typed input validation.
- A public-signal provider returns token, holder, liquidity, and risk-related facts.
- The workflow normalizes those facts into a predictable evidence bundle.
- Private notes and constraints are shaped separately and passed to the inference adapter.
- The app returns a structured decision card instead of an unstructured model blob.
- Public facts are fetched outside the private boundary.
- User notes, intent, and constraints belong only in the inference step.
- Wallet signing is not part of the current MVP.
- The current build stores no server-side chat history.
flowchart TD
subgraph Web["apps/web"]
PAGE["UI + Form"]
ROUTE["API Route"]
end
subgraph Packages["packages/*"]
SCHEMAS["schemas\nzod contracts"]
WORKFLOWS["workflows\norchestration"]
PROVIDERS["providers\nsignals + inference"]
SECURITY["security\nprompt shaping"]
end
PAGE --> ROUTE
ROUTE --> WORKFLOWS
WORKFLOWS --> SCHEMAS
WORKFLOWS --> PROVIDERS
PROVIDERS --> SECURITY
PROVIDERS --> SCHEMAS
Package responsibilities:
apps/web: UI and HTTP route handlerspackages/schemas: shared request, evidence, and decision-card contractspackages/workflows: deterministic workflow orchestrationpackages/providers: public-signal and inference adapters, including SolRouterpackages/security: redaction and private prompt shaping helpersdocs/architecture.md: deeper architecture notes and boundariesSTATUS.md: current project state and next steps
mock: deterministic local evidence generation
auto: uses SolRouter whenSOLROUTER_API_KEYis present, otherwise falls back to mock inferencemock: always use deterministic local decision-card generation
- Structured token investigation UI
- Shared schema contracts across app and workflow layers
- Mock public-signal mode for local development
- Optional SolRouter integration behind an adapter boundary
- Typed workflow tests
- Wallet signing
- Autonomous execution
- Database persistence
- Claims of private on-chain payments
npm install
cp .env.example .env.local
npm run devOpen http://localhost:3000.
INTENTVAULT_SIGNALS_MODE=mockINTENTVAULT_INFERENCE_MODE=autoSOLROUTER_API_KEY=optionalSOLROUTER_MODEL=gpt-oss-20bSOLROUTER_BASE_URL=optional override
npm run dev
npm run typecheck
npm run test
npm run buildSee STATUS.md for the current implementation state and the next recommended slices.