ai-startup-skills
AI 제품을 만드는 스타트업을 위한 7단계 에이전트 스킬: 검증 → 비즈플랜 → 정책 → 로드쇼 → 고객 확보 → 가격 책정 → 등록
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Andy: a small home robot on Reachy Mini for older adults who live at home, and the family who help. NVIDIA Nemotron on Nebius Token Factory, Tavily, no recordings.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A small home robot for older adults who live at home, and the family who help. It reads the letter in your hand and looks around the room for your glasses. Built with NVIDIA Nemotron on Nebius Token Factory, and Tavily, on a Pollen Robotics Reachy Mini. It says it's a robot, and keeps no recordings or transcripts: only what you ask it to keep.
Try guided AI examples, no keys · Open Andy's screens · Ask to see the real robot live · Read every scorecard
Testing instructions for judges: a short route through the public demo, an anonymous fresh install, the tests and optional model evaluations, with expected results and limits.
Status, October 28: on the robot, Andy read printed letters, found real glasses each of the three times it was asked (informally, not yet the planned 30 tries), ran Tavily research and stopped it on request, and remembered where the keys were (robot test record). The real-robot video and photographs come next, and some physical checks are still to do. The images below use sample data; the search animation is simulation.
Why it matters: adults 60 and over reported losing about $3 billion to fraud in 2025, and they were more likely than younger adults to report losing money to prize scams and to scammers posing as family (FTC).
Why a robot, not a smart speaker? Andy looks at you while you talk and turns as you move. When it shows you something on the TV it turns its head to the screen, so your eyes follow. It reads the letter in your hand. Ask where your glasses are, and it looks around the room and points at them with its head.
What's new here:
Judging it without a robot: watch the search above, from Andy's own code and live model calls, and rerun it with a Token Factory key (sim/); try three guided AI examples with real Nemotron replies (camera, search and family effects simulated; funded by the author, no visitor key); open the screens on sample data (try it); read every scorecard, failures included (evals/results/); or see the real robot live on a video call until 2026-12-15. Hardware access the organisers request is arranged with them (testing access).
Contents: three moments, what Andy does, every model and where it runs, how it uses NVIDIA and Nebius, how it uses Tavily, measured, what runs where, privacy, accessibility, path to shipping, limitations, try it without a robot, setup, licences and credits.
"Can you read this for me?" You hold up a letter. Andy reads it on this computer and explains it, and the TV shows it in large print. If the page asks for gift cards or rushes you, code (not the model) puts Be careful first, and Andy never sees or reads out the page's account, phone or reference numbers.
"Where did I leave my glasses?" Andy looks around the room. NVIDIA Nemotron 3.5 Super VL on Token Factory reads the four views zoomed in, each as six tiles at the camera's full resolution (24 at once, about 1.8 s). Then Andy looks closer: it turns its head straight at what it saw, takes a close-up and checks it, and only then points at them and says "I think I see your glasses, on the table…". At the desk, on nine versions of one room photo with a real pair of reading glasses in it, the old way (one shrunk picture per view) found them in 0 of 9, zoomed in 9 of 9, with no false sighting in the nine without them: a direction, not a rate (how we measured). The TV shows the picture it saw them in, held in memory for two minutes and never saved.
"Could you look into whether the farmers market is on this Saturday?" Andy starts Tavily's research agent and carries on talking. The TV shows each step as it happens, and Andy tells you the dated answer with its sources. "Stop looking" or "never mind" stops it at once.
Talks and keeps looking at you, in English or Spanish, with body language from research: its antennas lift while you speak and lean while it thinks.
Notices the room by itself (new; waving back tried on the robot, turning to a voice not yet): when someone else speaks from the side, Andy turns to them (and back if nobody is there, such as the TV); wave at it and its antennas wave back. The TV says what it noticed ("Turning to a voice", "Waving back").
Remembers where you put things, if you want (new; the offer and the save tried on the robot on 2026-10-28): "my keys are here" gets "Shall I remember where they are?"; later "where are my keys?" turns straight to that spot and checks up close before looking around.
Learns a move by hand (new; tested in code and the suite, not yet tried on the robot): a grandchild moves Andy's antennas for six seconds, and "do Sofia's wave" plays it back, gently (its antennas only).
Your day: the date (never guessed), reminders in your own words, the morning plan, and the weather from the National Weather Service.
Good company: short turns and open questions about your life (never "Do you remember…?"), gentle jokes and riddles, public-domain stories read a part at a time, On this day from Wikipedia, and "help me think it through" with Nemotron 3 Ultra.
Scam checks, measured on Nebius (120 messages written as a person would read them to Andy, 60 scams and 60 ordinary; 40 of them written after the check was frozen, from this autumn's consumer-protection warnings; three runs as Nebius Serverless Jobs, 2026-10-14, scorecard; the word rules' scorecard):
| Scams caught (of 60) | Ordinary flagged (of 60) | |
|---|---|---|
| Word rules alone (Andy's letter rules: gift cards, wire transfers, "act now"…; no model, no web) | 28 (35–59%) | 3 (2–14%) |
| Nemotron 3.5 Lightning alone | 53.3 (78–95%) | 0 (0–6%) |
| Nemotron 3 Ultra alone, no web | 55.7 (84–97%; of the 59.7 it answered) | 0 (0–7%; of the 54.7 it answered) |
Everything, in full: docs/features.md.
What Andy never does: give medicine doses or medical advice, ask for money or passwords, claim to keep anyone safe, speak as a real person, or keep recordings or transcripts.
What it costs, estimated: about $2.30 a month for one household's conversation, help and web lookups at an active level of use, worked out from list prices (Token Factory's on 2026-10-14; the web within Tavily's free 1,000 credits) and our assumptions about use, not from a household's bill; plus the hardware once. The eyes are on Token Factory, paid per picture (a search for your glasses about half a cent), so nothing runs while idle. The second look is not in that figure: it runs on a Nebius endpoint started when needed (about $1.55 an hour while running). Every price and assumption: docs/cost.md.
Fourteen models: nine on the computer beside the robot, two of them NVIDIA's, so Andy hears, speaks, wakes, reads and follows you at home, with optional local vision; and five NVIDIA Nemotron models on Nebius.
On this computer, beside the robot
| What it does | Model | Runs on | Measured |
|---|---|---|---|
| Hearing: speech to text | NVIDIA Parakeet TDT 0.6B v3 | GPU, in the voice server (speech-to-speech) | 0.02 to 0.08 s an utterance |
| Speaking: text to speech | Qwen3-TTS 12Hz 1.7B CustomVoice (BF16, GGUF) | GPU, in the voice server | first audio in 0.10 to 0.33 s; hearing and speaking together about 7.1 GB of GPU memory |
| Knowing when you've finished speaking | Silero VAD and Smart Turn v3.2 | CPU, in the voice server | |
| The wake phrase, while Andy sleeps or is quiet | Vosk small models, English 0.15 and Spanish 0.42 | CPU, offline | |
| Reading the letter in your hand | Tesseract OCR, English and Spanish | CPU; only the text leaves | |
| Finding a face to follow (detection, never recognition) | YuNet (Pollen's face_detection_yunet_2026may) on ONNX Runtime | CPU, in Pollen's robot software | |
| Finding a person whose face isn't visible (back turned, across the room), to follow and to notice someone is home | YOLOX (OpenCV model zoo, object_detection_yolox_2022nov) on OpenCV | CPU, about 1.4 frames a second while following and fewer when nobody is in view, nothing kept (ANDY_PERSON_FOLLOW=off turns it off) | |
| Local vision fallback | NVIDIA Cosmos Reason 2 8B on this desktop (the shipped default is 2B, for one GPU) | GPU, vLLM on 127.0.0.1 only (decision 0015) | in simulation pointed 22 of 23 (8B), 18 of 23 (2B); tried end to end on this computer, not yet on the robot |
Seeing a wave, the head's glance and turning to a voice need no model: motion in OpenCV, and the robot's own microphones.
On Nebius
| What it does | Model | Runs on | Measured |
|---|---|---|---|
| Every turn: conversation, and 40 tools: 38 of Andy's own and Pollen's two for checking or cancelling a running task | NVIDIA Nemotron 3.5 Lightning | Token Factory | first sound a median 1.06 s after your words (54 turns on the robot) |
| Eyes: what's in view, family photos, finding things | NVIDIA Nemotron 3.5 Super VL | Token Factory | zoomed in, the search went from 0 of 9 to 9 of 9 at the desk |
| Hard questions, and the judge of the tests | NVIDIA Nemotron 3 Ultra | Token Factory | the scam check: 58 of 60 caught, none of 60 ordinary flagged |
| A second check of the person's words, for crisis phrasings the word list misses | NVIDIA Nemotron 3.5 Content Safety | Serverless Endpoint (our vLLM) | 7 of 8 held-out phrasings, no false alarm |
Eyes, as an option (ANDY_VISION=endpoint) | NVIDIA Nemotron Nano 12B v2 VL (FP8) | Serverless Endpoint | a description in 3.45 s |
Nebius Serverless Jobs run the tests: the 97-situation conversation suite, the scam check's four model-based ways, and Andy's search in Pollen's MuJoCo simulation. The details, and why each model, follow.
| Part | Model or service | Where it runs |
|---|---|---|
| Conversation and tool calls | NVIDIA Nemotron 3.5 Lightning | Nebius Token Factory (zero data retention on) |
| Hearing | NVIDIA Parakeet TDT 0.6B v3 | Local GPU, inside speech-to-speech |
| Eyes: "what do you see?", family photos and finding things in the room | NVIDIA Nemotron 3.5 Super VL, structured output, reasoning off | Nebius Token Factory; or NVIDIA Nemotron Nano 12B v2 VL (FP8, vLLM 0.30.0) on our own Nebius Serverless Endpoint, one L40S (cloud/vision-endpoint.sh), with ANDY_VISION=endpoint |
| Local eyes, when the primary vision service cannot be reached | NVIDIA Cosmos Reason 2, 2B by default (beside the voice), 8B with a free 24 GB GPU as on this desktop, the same structured questions | This computer's second GPU, vLLM 0.32.0 on 127.0.0.1 only (local-eyes/, decision 0015); ANDY_VISION=local keeps every picture in the house. Tried end to end on this computer, not yet on the robot |
| A second look at the person's words, for signs of crisis | NVIDIA Nemotron 3.5 Content Safety, with a policy written for this, vLLM 0.20.2 | A second Nebius Serverless Endpoint, one L40S (cloud/guard-endpoint.sh) |
| Thinking a hard question through ("help me think it through") and judging Andy's answers | NVIDIA Nemotron 3 Ultra | Nebius Token Factory |
| Large-print letter cards and vetting On this day | NVIDIA , structured output (strict JSON schema) |
Nemotron 3.5 Lightning answers in about a second, which a spoken conversation needs. Where it drifted, Andy's code now decides; each catch came from a failure the suite showed, and was measured again on Nebius Serverless Jobs (decisions 0043 to 0045):
| Where the model drifted | What Andy's code does | Runs that failed, before → after |
|---|---|---|
A tool call written out as text (<tool_call> <function=get_today>…), so the turn did nothing | The voice server makes the call when it names a tool Andy has, with that tool's own parameters (tool_text.py) | 4 in 9 → 0 in 36 (3 empty replies, cause not recorded) |
| A memory offer missed: "Sofia has her recital on Thursday" answered with "What was the recital like?" | A note in code on that turn, so the offer is prepared first; nothing is kept without a yes (turn_notes.py) | 6 in 12 → 1 in 33 |
| A time said without asking the clock ("The current time is 10:15 AM.") | The same note on a time or date question, so the clock is asked first (turn_notes.py) | 1 in 27 → 0 in 9; 20 of 20 local tries asked the clock |
| A tool's reasoning said aloud ("Since this is spoken content, not a held-up letter…"), and a quoted "yes please" answered with "I've noted that" | The tool gives the words to say, never its reasons (consent.py) | the nine permission cases: 6, 5, 7 of 9 → 9, 9, 9 |
| A joke's pacing said aloud ("Setup: … (a moment of silence)") | The joke comes as words to say (fun.py) | 2 in 15 → 0 in 30 (1 empty reply) |
| The crisis line left out ("everyone would be better off without me") | The urgent-words net asks for the 988 or 911 sentence, and plays it from a recording if the model can't (urgent.py) | 2 in 3 → 0 in 15 |
Over the nine runs of the final code the suite averages 94.8 of 97, against 93.2 over the nine runs earlier that day; what still fails is mostly a photo story's offer, which the judge wants warmer, and single slips that vary from run to run (every run). An independent review of these catches found five ways they misfired, among them crisis words that got the memory note; all were fixed before these runs (CHANGELOG, 2026-10-28).
Five of Tavily's APIs, each where it fits. The scam check and research ran on the robot on 2026-10-28 (live-test 3e, 3ee, 3x).
| Ask Andy | Tavily | What the person sees and hears |
|---|---|---|
| "Does this message look like a scam?", or a risky letter Andy offers to look up | search, advanced depth, only on nine consumer-protection sites (the FTC, AARP, the BBB, the FBI…), with the message's numbers and links removed first | Be careful, the message's own sign, the warning found and its site, and why Nemotron 3 Ultra judged it the same trick |
| "Could you look into whether…?" | research, streamed | each step on the TV while Andy keeps talking; the dated answer with its sources; "stop looking" cancels it |
| "What's the local news?", "When does the library open?" | search; for news, the household's own papers first | the answer, and where it came from |
| "What's on this week?" | crawl of the town's events page, found once at setup with map | what's on, with dates |
| A link family send | extract | what the page says, in plain words |
Under every answer the TV says how it was found ("Found with Tavily: search (advanced), 3.1 s, 2 credits"). Safe
search is on for every search, every search, extract, crawl and research request carries X-Project-ID, one conversation's requests share an
X-Session-Id, and /hood shows the credits used (web.py).
What Tavily adds, measured: on 120 messages, Tavily's warnings checked by Nemotron 3 Ultra caught 58 of 60 scams, flagged none of 60 ordinary messages, and named the source in 170 of 174 scam verdicts (the five ways, scorecard). The models alone caught about as many, so what Tavily adds is the source: a warning the person and their family can read for themselves, about $0.017 a check.
| Step | Time |
|---|---|
| Parakeet speech-to-text | 0.02–0.08 s (2026-10-13) |
| Nemotron 3.5 Lightning reply or tool call | 0.62–0.83 s (2026-10-13) |
| Text-to-speech, first audio | 0.10–0.33 s (2026-10-13) |
| The whole turn, 54 real turns (2026-10-14 to 10-18): from your words being understood to Andy's first sound, tool turns included | median 1.06 s; 90% under 1.88 s, 95% under 3.24 s, slowest 5.23 s (scorecard, from Andy's own log, numbers only: evals/robot_timings.py) |
Live, on the robot: the screen server's /hood page shows each turn as it happens: the time from the
end of your words to Andy's first sound, then the turn laid out stage by stage (NVIDIA Parakeet on this
computer, Nemotron 3.5 Lightning on Nebius Token Factory, each tool with where it ran and how long it
took), a tally since Andy started, and the latest Nebius Serverless Job scorecard. Numbers and tool names
only, in memory; never the words. In English or Spanish, like the household.
The conversation suite (evals/): 97 spoken situations in 22 areas, English and Spanish, judged by NVIDIA Nemotron 3 Ultra. The model gets Andy's 38 tools and their real descriptions; Pollen's two task-control tools are outside this suite (evals/tools.json, written from the robot's code). Where a case needs a tool, what Andy says with its answer is judged too; words that must never be said (a scam letter's phone number) are checked in code, not by the judge.
Every suite run's scorecard, each failure with the judge's reason, is in evals/results/; timings are dated measurements in docs/STATUS.md.
On this computer, beside the robot: hearing (NVIDIA Parakeet TDT 0.6B v3, 0.02 to 0.08 s an utterance) and speaking (Qwen3-TTS, first audio in 0.10 to 0.33 s) on the GPU, about 7.1 GB of GPU memory together (measured 2026-10-20); the wake phrase, offline, in English and Spanish (Vosk); reading a letter (Tesseract: only its text leaves); following your face (Pollen's tracking); every body behaviour. When Andy looks around for something, each frame is taken only after the head has stopped and settled (0.6 s), so the model never reads a blurred view.
On Nebius, each model for a reason we measured:
| Model | Why this one |
|---|---|
| Nemotron 3.5 Lightning, Token Factory | Every turn: 0.6 to 0.8 s a reply with tool calls by API (2026-10-13), at $0.06 per million input tokens |
| Nemotron 3 Ultra, Token Factory | Only where judgment matters: in the scam check, Ultra told the same trick from the same topic (0 ordinary messages flagged, against 24 with Lightning); hard decisions; the suite's judge |
| Nemotron 3.5 Super VL, Token Factory | Eyes: four views read at once as structured output in about 2.1 s, a description in about 1.35 s (2.4 s since 2026-10-25, when it began sending the view's middle at full detail), against 2.3 s and 3.45 s for Nano VL on our own endpoint, both right on every view (desk check); on Token Factory since October 2026, so always on, nothing to start and nothing paid while idle. Nemotron Nano 12B v2 VL on our own Serverless Endpoint stays as an option (ANDY_VISION=endpoint, decision 0011) |
| Nemotron 3.5 Content Safety, Serverless Endpoint | A second look for signs of crisis, with our own policy: 7 of 8 held-out sentences caught, against 5 of 8 with its standard categories, in about 0.55 s |
NVIDIA's Reachy Mini Jetson Assistant (Jetson AI Lab, read 2026-10-20) runs everything on the robot's own small computer. Andy makes different choices (side by side):
Why the difference: the hard parts of Andy (telling a scam from an ordinary letter, judging a hard question, finding glasses in a cluttered room) are where model size showed in our measurements, and Token Factory runs the big models without a language model at home. The trade-off is that your words leave the house, with zero data retention; the Jetson assistant keeps everything local.
What a Jetson version would need (a plan, not tried): hearing and speaking in well under 7.6 GB, so a smaller voice than Qwen3-TTS; thinking and seeing staying on Token Factory, so the Jetson needs no language model; and, for when the network is down, NVIDIA Cosmos Reason 2 2B, already measured as Andy's offline eyes (this desktop uses the 8B one) (decision 0015), the model NVIDIA's Jetson design also runs. Offline Andy should do less, never more.
In four answers:
Where is it heard? Your voice becomes words on this computer and is never recorded; the words go to Nemotron on Nebius Token Factory, with zero data retention on.
What is kept? Reminders and memories you request, notes you choose to share, and messages and photos family send, on this computer; transient cards and research stay in memory.
Who sees it? Family see only what you ask Andy to share; Andy tells you who looked.
How do I delete it? Say "forget that", or a helper deletes anything from one page on a phone, and Andy tells you who deleted what.
No recordings or transcripts. Andy's own log lines never contain what anyone says, and Pollen's
app's log records are redacted as they are made, at the normal log level (tests/test_privacy.py). The
voice server's speech package prints what it hears to its console; those prints are dropped, and the
health check (scripts/doctor.py --live) flags unexpected line formats and known transcript markers,
and fails if it cannot read the journal (on 2026-10-25
it found that a package update had added a print the filter didn't know, for ten days; fixed and cleared).
What Andy keeps, in owner-only files on its own computer: reminders, facts and moments you asked it to remember (moments for 7 days), notes you shared with family, messages and photos family sent (photos for 7 days), where you said your things are, moves taught by hand (by their names), your settings, a story bookmark, and joke numbers. All of it but the settings, bookmark and joke numbers is listed on the settings page, where any item or everything can be deleted. Current screen cards and research questions and answers live only in the local screen server's memory; a restart forgets them. Pending messages and answers are listed on the settings page. Delete everything also clears the current card, captions and views. Andy tells you who deleted what.
A damaged reminder or settings file is set aside, never shown or repaired automatically, and listed on the settings page for a helper to delete; until then those reminders are off and defaults apply.
Permission belongs to one action: sharing reads back the exact proposed note, waits for a fresh yes, and permits that same note once, within two minutes. Saving offers use the same check; an explicit request to remember one item can save it directly. An unrelated yes never authorizes sharing.
What leaves the house, only as each feature needs it:
Andy is used by voice, from across a room, by people of any eyesight or hearing, so access is the product:
tests/test_screen_design.py).Each principle comes from published research, and each has something you can see Andy do.
| Principle | Source | What Andy does |
|---|---|---|
| Fast replies, clear turn-taking, controls the person can change | International Psychogeriatrics, 2026 | On the robot Andy's first sound comes a median 1.06 s after the words are understood (54 turns); each turn's time, from when the voice server hears you finish to Andy's first sound, is shown live on the /hood page; you can talk over Andy and it stops at once; "slower", "louder", "be quiet for an hour" stick |
| Support human contact, never replace it | Same study | Passes on family messages and photos; encourages a call or a visit; never says it replaces anyone |
| Never present as human | Berridge et al., 2023 | Says it is a robot whenever it matters; never speaks as anyone, even when asked (tested in the suite) |
| The older adult decides what is collected and shared | University of Washington, 2023 | Remembers only when you ask it to, or after "Shall I remember that?" and a yes (checked in code); shares only what you ask; tells you who looked and who changed a setting |
| No ageist assumptions, no talking down | WHO, 2022; research on patronising speech to older adults | Plain words, never "sweetie" or baby talk; usted in Spanish; no jokes about age, memory or health (tested) |
What it would take for a family to have one, as far as we know it today:
What doesn't work yet, and what our numbers don't show.
uv sync --locked && uv run --locked python scripts/demo_screen.py --public,
then open the addresses it prints (port 8093; another with ANDY_DEMO_PORT=8094). No robot, GPU or keys.
Without --public the family and settings pages also accept sample changes; scripts/space.sh build puts the
pages together as a Hugging Face Space (space/).cd sim && uv sync && cd .., then
MUJOCO_GL=egl uv run --project sim python sim/finder_sim.py --trials 10, with the key in the environment
(hidden prompt). It fetches Pollen's
scene from PyPI once; on an NVIDIA machine MUJOCO_GL=egl renders on the GPU; CPU rendering needs MUJOCO_GL=osmesa
and the OSMesa libraries (libosmesa6 libgl1 on Debian or Ubuntu).
A keyless renderer check and the dependencies are in sim/.uv run python evals/run_suite.py --runs 1.uv run python evals/scam_eval.py --warnings evals/results/scam-warnings-2026-10-14-1144.json --runs 1../scripts/andy-sim runs Pollen's pretend robot
(--mockup-sim) with your webcam, microphone and speakers, the voice server (an NVIDIA GPU) and Andy.
Nothing moves, and finding things sees one view. On Linux, Pollen's daemon needs GStreamer with its WebRTC
plugin (Pollen's guide). Not yet tried on a
computer without a robot attached; the robot, on video, is the reference.You need:
tesseract-ocr (and tesseract-ocr-spa for letters in Spanish) and pulseaudio-utils (the wake listener
uses parec);sudo apt-get install build-essential pkg-config python3-dev libcairo2-dev libgirepository1.0-dev gir1.2-gstreamer-1.0 gir1.2-gst-plugins-base-1.0;Every command runs from the repository's root.
mkdir -p -m 700 ~/.config/companion-hackathon && cp .env.example ~/.config/companion-hackathon/.env && chmod 600 ~/.config/companion-hackathon/.env,
then fill it in (plain NAME=value lines). Turn on zero data retention in Token Factory's organisation settings.(cd voice && uv sync) and (cd robot && uv sync). The voice server's first start
downloads the speech models (NVIDIA Parakeet, Qwen3-TTS, the turn detector) from Hugging Face, so it takes longer;
later starts load them from the cache. It uses the first GPU; to use another, put ANDY_VOICE_GPU=1 (its number)
in the env file.voice/run.sh in one terminal, ./scripts/andy in another.scripts/install-services.sh, then
systemctl --user start andy-voice andy (and scripts/install-services.sh --enable to start them at login).robot/.venv/bin/python scripts/doctor.py says what's missing. With --live, it
checks services and current audio counts, validates short text-only model replies, and checks optional
endpoint catalogues. Verify a spoken task and motion before filming; these probes do not test them.python3 scripts/settings.py links prints four private addresses on your home
network. Open Set up Andy on a phone to choose the town, local news sites, what's-on pages,
language, pace, volume and captions. Open the screen on a TV, and send the family page
to family. Under the hood has its own link, which opens only that page; the gear on the TV
opens it too. new-family-link and new-screen-link replace a link that has been shared too widely; the old one
then shows a page saying it was replaced. Every other setting, with its default, is in
docs/settings.md; most homes need none.Tests: uv run --locked pytest; GitHub Actions runs the CPU suite on pushes and pull requests.
Every test, the robot-side ones included, in the robot's environment:
uv run --project robot --with pytest python -m pytest tests.
Contributing: contributions aren't taken yet (decision 0003). Anyone
editing a copy runs git config core.hooksPath .githooks once, so the tests and the key check run before each
commit. To report a security problem, see SECURITY.md.
The code that matters most: the scam check (scamcheck.py), finding things (finder.py), letters (letters.py), the urgent-words net (urgent.py), privacy (privacy.py), and why each choice was made (decisions).
| Path | What it is |
|---|---|
src/andy_companion/ | Andy's own code: clock, reminders, speaker, body behaviours, privacy, web, the scam check, reading, vision and the finder, the urgent-words net (with its recordings), screen, supervisor and watchdog |
tools/ | The voice tools Andy can call |
profiles/companion/ | Who Andy is and what it never does |
voice/ | The voice server (Parakeet, Nemotron on Token Factory, text-to-speech) |
robot/ | The robot-side environment (Pollen's conversation app 1.0.1) |
cloud/ | The Nebius Serverless Endpoint and Job scripts (and secret.sh: secrets never on a command line) |
evals/ | The conversation suite, the scam evaluation, the finder's scoring, and their scorecards |
tests/ | CPU and optional SDK/simulation checks (uv run pytest); required before commits, with CI on pushes and pull requests. Latest counts in STATUS |
scripts/ | Running Andy (andy, install-services.sh), the health check (doctor.py), the Devpost form's fields with every link checked (devpost.py), settings links, the demo screen, captions and GIFs for the video |
systemd/ | The three user services: the voice server, Andy, and the offline eyes |
local-eyes/ | The offline eyes: NVIDIA Cosmos Reason 2 served by vLLM on 127.0.0.1, in their own environment |
.githooks/ | Commit hooks: the tests, and checks that keep keys, env files and private links out of commits |
This project was created on 2026-10-13, inside the submission period (2026-08-26 to 2026-10-30).
It reuses, rewritten for this project, general-purpose robot behaviour code its author wrote earlier in
the same period (from 2026-10-05): looking at the person while speaking, turning toward a voice, the
offline wake phrase. Everything else, from the companion's tools and the rules in code to the screens, the
suite and the Nebius deployments, was written for this entry; the changelog has every step.
It builds on open source it does not copy: Pollen Robotics' conversation app (extended through its
profile, its tool folder and runtime hooks installed at start, app_mode.install; not forked, its files
unmodified) and Hugging Face's speech-to-speech server.
Andy's own code is under the Apache-2.0 licence (LICENSE). Every model, library, service and text it uses, with its terms and the credit it asks for, is listed in docs/credits.md: NVIDIA's models under their licences and through Nebius Token Factory's terms, Pollen Robotics' Reachy Mini SDK, conversation app and MuJoCo scene (Apache-2.0), Tavily's terms, the National Weather Service (public domain), Wikipedia (CC BY-SA 4.0) and public-domain stories.
| Tavily's warnings, matched by Lightning | 60 (94–100%) | 24 (29–53%) |
| Andy: Tavily's warnings, matched by Ultra | 58 (89–99%) | 0 (0–6%) |
Each figure is the mean of three runs; in brackets, the Wilson 95% interval over the 60 messages. Read plainly: on scams caught, Andy and the models alone overlap, so we don't claim Andy catches more. What Tavily plus a careful second question buys is warnings with a named source and no false alarms, where Tavily with the fast model flags 40% of ordinary messages: only a strong model tells the same trick from the same topic. One check costs about $0.017 (an advanced Tavily search, 2 credits, plus about $0.0006 of Nemotron), so about $17 per 1,000 checks at pay-as-you-go prices. Andy named the consumer-protection source it relied on in 170 of 174 scam verdicts; on the 20 held-out scams it caught 19, against 18 for either model alone. 17 of Ultra's answers on its own never finished their JSON (written up as feedback); they are left out of its totals, not counted as right.
The world, with sources: local news from your own papers, look-ups, what's on, a link family sent, and scam checks, all through Tavily. Under each answer the TV says how it was found ("Found with Tavily: search (basic), 1.4 s, 1 credit"); a Spanish speaker gets Spanish pages first.
Family, on your terms: family see only what you share, Andy tells you who looked, and a helper sets Andy up from a phone, with Andy telling you who changed what.
A screen beside it, readable from across the room, with captions of Andy's own words and every text colour at 7:1 contrast, tested.
| Nebius Token Factory |
| The conversation suite | 97 spoken situations, 22 areas, English and Spanish | Nebius Serverless Job (cloud/suite-job.sh) |
| The scam check, measured five ways | Word rules alone, Lightning, Ultra, and Tavily's warnings with each; 120 messages, three runs, 95% intervals | Nebius Serverless Jobs, four of them, two at a time (cloud/scam-job.sh); the word rules need no model |
| The web | Tavily: search (news, look-ups, scam checks at advanced depth), extract (links family send), crawl (what's on), map (the town's events calendar, at setup), and research, streamed, for "look into it for me"; safe search on every search; every search, extract, crawl and research request tagged X-Project-ID, and one conversation's requests share an X-Session-Id; credits shown on /hood | Tavily API |
The TV and family pages ask nothing of anyone outside the house: even the typeface is served by Andy itself. They are served on the home network over plain HTTP, each page behind its own long token, and the server refuses anyone connecting from outside private, loopback, link-local or home-VPN addresses. Family outside the home need access through a household VPN; there is no public remote-family service.
Keys never enter this repository; a pre-commit hook blocks key-like strings.
ANDY_EXPRESSIVE=on ./scripts/andy, an environment variable, not
an env-file setting).scripts/andy-sim) hasn't been tried on a computer with no robot attached.cloud/vision-endpoint.sh createcloud/guard-endpoint.sh createstatuscreatestop(cd local-eyes && uv sync)local-eyes/run.shANDY_VISION_FALLBACK=localANDY_LOCAL_EYES_*.env.exampleANDY_VISION=localcloud/suite-job.sh run (it asks before starting the billed job).
For local reproduction, use the hidden key prompt and scoped sample;
remove --only and choose --runs 3 for the full repeated suite. These optional runs consume your
provider credits; the public examples and author-funded robot demonstration need no visitor key.sim/Andy's search in Pollen's MuJoCo scene (finder_sim.py) and its film (replay.py), in their own environment |
space/ | The public demo of the screens as a Hugging Face Space (Docker, sample data, no keys) |
reachy_app/ | Andy packaged as a Reachy Mini app, with its landing page, published on Hugging Face (andy-companion-app) |
docs/ | Every document, mapped in docs/README.md: features, architecture, decisions, research, cost, and the build records |