Name
Nich
GitHub Handle
@nirholas
Tell us about yourself
Double bachelors in Marketing and Computer Science from UW. Provided security research services to Apple, AT&T, Microsoft, Google, the U.S. Department of Defense, and the State of California government. Prior to three.ws I worked in full-stack development for some of the largest companies and brands. I am also an author and contributor at Entrepreneur Magazine.
I build three.ws, an open source (Apache-2.0) framework for 3D AI agents on the web. My background is full-stack and real-time graphics, and most of my work now sits at the seam between Three.js rendering and agent runtimes, which is a place where very little tooling existed until recently. I maintain the project day to day: triage, reviews, releases, and the docs.
Project Name
three.ws
Project Repo Link
https://github.com/nirholas/three.ws
Topic: Give your AI a body. Any rig, any page, one tag.
The pitch: every AI agent on the web today is a text box. three.ws gives it a body: a text prompt becomes a rigged, animation-ready 3D avatar, and one <agent-3d> tag puts it on any page with an LLM brain, memory, and moods behind it. Browser-native: Three.js and glTF, no plugin, no game engine, no upload step. The part that makes it an open source story rather than a product demo is the rig problem, and that is what I want to spend the stream on.
The rig problem, in one sentence: every humanoid model in the wild names its bones differently (Mixamo says LeftArm, Unreal says upperarm_l, VRoid says J_Bip_L_UpperArm, Daz says lShldr, MikuMikuDance says 左腕), and an animation clip addresses bones by name, so a rig we do not recognise loads, renders, and never moves. We solve it with one canonical skeleton and a mapping layer that rewrites any convention onto it, so one shared clip library retargets onto anything. Twelve conventions today. Every new one is a self-contained contribution: a mapping entry, a test, a docs row.
What I plan to cover, in your format:
- What it is (3 min). Prompt to rigged avatar to embedded on a blank page. Real generation, not a cached result.
- Demo (10 min). Three things live: (a) generate an avatar from a text prompt and watch it animate; (b) drop it into an empty
index.html with one tag and drive its mood from the browser console; (c) upload a rig we do not support yet to Rig Doctor, our in-browser tool that tells you exactly which joints will not move and why.
- Motivation (5 min). Why "3D agent" was a dead end until the rendering and the runtime could talk, and what broke the first three times.
- How people contribute (10 min), done live. Take one of the open
good first issues (a real bone-naming convention we confirmed maps 0 of 10 joints today), write the mapping, write the test, run the one-second test file, open the PR on stream. The reviewer is me, so it can merge on air.
- Last thing pushed / next thing (3 min). Honest answer both ways; the changelog is public and ships to a Telegram channel on every release, so I cannot fudge it.
- Audience questions.
Why this fits the program: the contributor pipeline is not a slide, it is the demo. Each curated first issue names the file to change and the command that proves it worked; the 15-minute clone-to-PR guide uses the most recent rig convention we added as its worked example, exactly as it landed with its tests; and the triage doc publishes the response times we hold ourselves to. A viewer who opens a PR during the stream gets reviewed during the stream.
Stream Date
Dates
No response
Twitter URL
@nichxbt
LinkedIn URL
https://linkedin.com/in/nixholas
Additional Information
Project facts (verified today, 2026-08-25):
- Apache-2.0, 104 stars, 26 forks, 11 contributors, hosted on GitHub since January 2026
- 25,000+ passing tests; Playwright end-to-end on every public page
- 12 rig conventions recognised and retargeted; the 12th (MikuMikuDance) landed this week and is the worked example in the contributor guide
- 67 packages in the monorepo, including an MCP server on the official registry so coding agents can create and control avatars directly
- Live at https://three.ws; anyone can try it in a browser with no account
Links a reviewer can check in a minute:
Logistics: Andrea (@acolombiadev) invited this request on X after watching a stream. Any Friday from 09-11-2026 on works; the title date is the first one I would take. Live is preferred, since the on-air PR is the whole point, but I can pre-record if that is easier for the schedule. Wired ethernet, separate mic and headphones, 1080p, a clean browser profile, and a template repo for the demo so it can be repeated.
Name
Nich
GitHub Handle
@nirholas
Tell us about yourself
Double bachelors in Marketing and Computer Science from UW. Provided security research services to Apple, AT&T, Microsoft, Google, the U.S. Department of Defense, and the State of California government. Prior to three.ws I worked in full-stack development for some of the largest companies and brands. I am also an author and contributor at Entrepreneur Magazine.
I build three.ws, an open source (Apache-2.0) framework for 3D AI agents on the web. My background is full-stack and real-time graphics, and most of my work now sits at the seam between Three.js rendering and agent runtimes, which is a place where very little tooling existed until recently. I maintain the project day to day: triage, reviews, releases, and the docs.
Project Name
three.ws
Project Repo Link
https://github.com/nirholas/three.ws
Topic: Give your AI a body. Any rig, any page, one tag.
The pitch: every AI agent on the web today is a text box. three.ws gives it a body: a text prompt becomes a rigged, animation-ready 3D avatar, and one
<agent-3d>tag puts it on any page with an LLM brain, memory, and moods behind it. Browser-native: Three.js and glTF, no plugin, no game engine, no upload step. The part that makes it an open source story rather than a product demo is the rig problem, and that is what I want to spend the stream on.The rig problem, in one sentence: every humanoid model in the wild names its bones differently (Mixamo says
LeftArm, Unreal saysupperarm_l, VRoid saysJ_Bip_L_UpperArm, Daz sayslShldr, MikuMikuDance says左腕), and an animation clip addresses bones by name, so a rig we do not recognise loads, renders, and never moves. We solve it with one canonical skeleton and a mapping layer that rewrites any convention onto it, so one shared clip library retargets onto anything. Twelve conventions today. Every new one is a self-contained contribution: a mapping entry, a test, a docs row.What I plan to cover, in your format:
index.htmlwith one tag and drive its mood from the browser console; (c) upload a rig we do not support yet to Rig Doctor, our in-browser tool that tells you exactly which joints will not move and why.good first issues (a real bone-naming convention we confirmed maps 0 of 10 joints today), write the mapping, write the test, run the one-second test file, open the PR on stream. The reviewer is me, so it can merge on air.Why this fits the program: the contributor pipeline is not a slide, it is the demo. Each curated first issue names the file to change and the command that proves it worked; the 15-minute clone-to-PR guide uses the most recent rig convention we added as its worked example, exactly as it landed with its tests; and the triage doc publishes the response times we hold ourselves to. A viewer who opens a PR during the stream gets reviewed during the stream.
Stream Date
Dates
No response
Twitter URL
@nichxbt
LinkedIn URL
https://linkedin.com/in/nixholas
Additional Information
Project facts (verified today, 2026-08-25):
Links a reviewer can check in a minute:
Logistics: Andrea (@acolombiadev) invited this request on X after watching a stream. Any Friday from 09-11-2026 on works; the title date is the first one I would take. Live is preferred, since the on-air PR is the whole point, but I can pre-record if that is easier for the schedule. Wired ethernet, separate mic and headphones, 1080p, a clean browser profile, and a template repo for the demo so it can be repeated.