endearo
v0.1.4
Published
Terminal UI (Ink/React) for Endearo — Bo Shang's personal AI assistant. Live projects, next steps, momentum, providers, and chat — mirroring the web + iOS surfaces.
Maintainers
Readme
Endearo TUI
A terminal dashboard for Endearo — Bo Shang's personal AI assistant — built with Ink (React for the terminal). It reads the same portal snapshot the web and iOS apps read, so the desktop, web, and mobile surfaces mirror one another and can share types/logic.
◓ Endearo ● watching 2026-06-14 02:11Z
1 Overview 2 Today 3 Momentum 4 Providers 5 Chat
────────────────────────────────────────────────────────────
Projects
[ADHD] ADHD provider outreach
Getting a proper adult ADHD evaluation in MA — run in the open.
[Momentum] Momentum & movement
Steady work + daily movement from home; streaks, the two-day rule.
1-5 sections · ←/→ switch · q quitUse
# Sign in with Google (recommended) — loads your DeepSeek + Tavily keys from the agent:
ENDEARO_GOOGLE_CLIENT_ID=<your-oauth-client-id> npx endearo
# …or skip SSO with a static token (CI / headless):
ENDEARO_TOKEN=<your SERVER_TOKEN> npx endearoENDEARO_URL— your agent's base URL (theservemail-client API). Default:https://bo-shang-adhd-website.fly.dev. For a locally-running agent:http://127.0.0.1:8787.ENDEARO_GOOGLE_CLIENT_ID— a Google OAuth Desktop app client id. On first run the CLI opens your browser, signs you in with Google (SSO), and — if your email is an owner of the agent — pulls the cloud-stored DeepSeek + Tavily keys so none live on this machine. One-time setup:docs/cli-google-sso/. The short-lived session is cached at~/.endearo/session.json.ENDEARO_TOKEN— the agent'sSERVER_TOKEN. If set, the CLI uses it directly and skips Google sign-in.
Keys: 1–5 switch sections · ←/→ cycle · in Chat, type + Enter to message Endearo,
Esc to leave the input · q to quit.
Why a TUI (and why Ink)
The agent, web, and iOS clients all consume one contract — GET /api/portal (and the public
/assets/portal.json projection). Ink makes the terminal a first-class client of that same
contract using React, so patterns and the TypeScript types of the snapshot can be shared across
the terminal and web React surfaces (a shared core package is the clean way to do that). No
build step — the app is plain JS via React.createElement.
Develop
cd tui && npm install && node cli.jsTesting
The entire UI is covered by a hermetic E2E suite using ink-testing-library:
cd tui
npm test # fast, 100% offline, exercises every tab/state/input path
npm run test:live # optional: against a real agent (ENDEARO_TOKEN required)See docs/cli-e2e-testing/ for architecture, how to add tests, the live suite contract, and the "why this is reliable" explanation.
Part of the Endearo project.
