titan-agent 6.3.4 → 6.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,519 +1,256 @@
1
1
  [//]: # "npm-text-start"
2
2
 
3
- > **TITAN** — The AI that moves in. Start a mission, watch a small team of AI helpers gather around a real wood desk, drag their sticky notes around, and let them work for you 24/7. `npm i -g titan-agent`
3
+ > **TITAN** — A local-first AI agent framework that runs on your hardware, with your models, under your control. Spawn a team of specialists around a goal, watch them work in parallel, and stay in the loop without giving up control. `npm i -g titan-agent`
4
4
  > [//]: # (npm-text-end)
5
5
 
6
6
  <div align="center">
7
7
 
8
- # TITAN 6.0 — "Living Canvas" 🌌
8
+ # TITAN
9
9
 
10
10
  </div>
11
11
 
12
12
  <p align="center">
13
- <img src="assets/titan-logo.png" alt="TITAN Logo" width="280"/>
13
+ <img src="assets/titan-logo.png" alt="TITAN Logo" width="240"/>
14
14
  </p>
15
15
 
16
16
  <p align="center">
17
- <strong>Every other AI gives you a chat box. TITAN moves in.</strong>
18
- <br><small>Infinite workspaces. Tools built on demand. An AI that feels, learns, and helps before you ask.</small>
17
+ <strong>The local-first AI agent framework with a team of specialists, a real-time canvas, and a soul.</strong>
18
+ <br><small>Your hardware. Your models. Your control. Built in TypeScript, MIT-licensed, ~40K npm installs.</small>
19
19
  </p>
20
20
 
21
21
  <p align="center">
22
22
  <a href="https://www.npmjs.com/package/titan-agent"><img src="https://img.shields.io/npm/v/titan-agent?color=blue&label=npm" alt="npm version"/></a>
23
- <a href="https://www.npmjs.com/package/titan-agent"><img src="https://img.shields.io/npm/dw/titan-agent?label=npm%20downloads" alt="npm downloads"/></a>
23
+ <a href="https://www.npmjs.com/package/titan-agent"><img src="https://img.shields.io/badge/installs-40K%2B-blue" alt="npm installs"/></a>
24
24
  <a href="https://github.com/Djtony707/TITAN/stargazers"><img src="https://img.shields.io/github/stars/Djtony707/TITAN?style=social" alt="GitHub Stars"/></a>
25
25
  <a href="https://github.com/Djtony707/TITAN/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"/></a>
26
+ <a href="https://github.com/sponsors/Djtony707"><img src="https://img.shields.io/badge/sponsor-♥-ec4899" alt="Sponsor"/></a>
26
27
  </p>
27
28
 
28
29
  <p align="center">
29
- <a href="#-the-numbers"><img src="https://img.shields.io/badge/version-6.2.1-blueviolet" alt="v6.2.1"/></a>
30
- <a href="#-36-llm-providers"><img src="https://img.shields.io/badge/providers-36-purple" alt="36 Providers"/></a>
31
- <a href="#-the-numbers"><img src="https://img.shields.io/badge/tools-248%2B-orange" alt="248+ Tools"/></a>
32
- <a href="#-build-anything-on-demand"><img src="https://img.shields.io/badge/widgets-109-pink" alt="109 Widgets"/></a>
33
- <a href="#-mission-control"><img src="https://img.shields.io/badge/admin%20panels-43-teal" alt="43 Admin Panels"/></a>
34
- <a href="#-testing"><img src="https://img.shields.io/badge/tests-7%2C690%20passing-brightgreen" alt="7,690 Passing Tests"/></a>
30
+ <a href="#whats-new"><img src="https://img.shields.io/badge/version-6.3.5-blueviolet" alt="v6.3.5"/></a>
31
+ <img src="https://img.shields.io/badge/providers-37-purple" alt="37 LLM Providers"/>
32
+ <img src="https://img.shields.io/badge/channels-19-orange" alt="19 Channels"/>
33
+ <img src="https://img.shields.io/badge/skills-91-teal" alt="91 builtin skills"/>
34
+ <img src="https://img.shields.io/badge/tests-7800%2B-green" alt="7800+ tests"/>
35
35
  </p>
36
36
 
37
37
  <p align="center">
38
- <a href="https://github.com/sponsors/Djtony707"><img src="https://img.shields.io/badge/%E2%9D%A4%EF%B8%8F_Sponsor-ea4aaa?style=for-the-badge&logo=github" alt="Sponsor on GitHub"/></a>
38
+ <a href="https://github.com/Djtony707/TITAN">Star us on GitHub</a> &nbsp;·&nbsp;
39
+ ♥ <a href="https://github.com/sponsors/Djtony707">Sponsor</a> &nbsp;·&nbsp;
40
+ 💬 <a href="https://github.com/Djtony707/TITAN/discussions">Discussions</a>
39
41
  </p>
40
42
 
41
- <p align="center">
42
- <em>Built by <a href="https://github.com/Djtony707">Tony Elliott</a> — a dad, a DJ, a builder, and a guy who ships code at 3am because sleep is a feature he hasn't shipped yet.</em>
43
- </p>
44
-
45
- ---
46
-
47
- ## 🪵 NEW in v6.1 — Mission Chat + Desk view
48
-
49
- > Status: `v6.2.1` — TITAN Phone Desk safety hotfix: optional Dograh sidecar integration for Twilio/Telnyx voice workflows, approval-gated outbound calls, inbound admin/receptionist webhooks, opt-out enforcement, receipts, and a dashboard panel.
50
- > Install with `npm i -g titan-agent` (or `npm update -g titan-agent`).
51
- > The v6.0 "Presence" feature set below still applies — v6.1.0 layers
52
- > a beautiful new surface on top of it.
53
-
54
- ## 📞 NEW in v6.2 — TITAN Phone Desk with Dograh
55
-
56
- TITAN can now connect to a self-hosted or hosted Dograh sidecar for Twilio/Telnyx-powered phone workflows without storing carrier credentials directly in TITAN. The integration is optional and disabled by default.
57
-
58
- What is verified in v6.2.1:
59
-
60
- - `GET /api/telephony/dograh/status` checks Dograh reachability and redacts the API key.
61
- - `GET /api/telephony/dograh/workflows` lists active Dograh workflows.
62
- - `POST /api/telephony/dograh/call` creates an approval request first, then starts an outbound Dograh call only when a matching approval action is supplied.
63
- - The `phone_call` tool is approval-request-only; it never dials directly from an LLM tool call.
64
- - `POST /api/telephony/dograh/inbound` handles inbound Dograh webhooks for admin-control and receptionist lines.
65
- - Admin control is restricted to configured E.164 `telephony.adminNumbers`.
66
- - Public/receptionist numbers do not receive admin privileges.
67
- - Campaign/cold-call mode is locked unless `allowCampaigns`, recording disclosure, opt-out keywords, and hourly rate limits are configured.
68
- - Inbound opt-out phrases are recorded and block future campaign calls to that number.
69
- - Phone numbers and Dograh API keys are redacted from responses, receipts, and UI lists.
70
- - `/tools/phone-desk` provides status, workflow, call-receipt, opt-out, and approval-request UI.
71
-
72
- Dograh is BSD-2-Clause. TITAN integrates with it as an external sidecar/API so the npm package stays lightweight and Dograh can own the Twilio/Telnyx credentials.
73
-
74
- Every TITAN canvas page now carries a **🪵 Mission Chat** launcher in
75
- the header (with a small **NEW** badge). Click it and you walk into a
76
- chat-style team-control surface — plus a literal **wood desk** view
77
- where everything the team produces lands as a physical, draggable object.
78
-
79
- ### What you get
80
-
81
- - 💬 **Mission Chat** — type one goal. TITAN matches a starter Play,
82
- forms a small team of AI helpers (Scout the researcher, Builder the
83
- engineer, Writer, Analyst, Sage the reviewer), and they talk in a
84
- thread with you as they work. Click any bubble for full timing /
85
- cost / model / source details.
86
-
87
- - 🪵 **Mission Canvas — "Wood Desk" view** — same data, spatial layout.
88
- - A warm caramel wood surface with grain, two knots, and window light
89
- falling from the upper-left. CSS-only — no image assets.
90
- - A leather **goal placard** carrying your mission text.
91
- - A **paper sheet** in the center, real lined ledger paper, that fills
92
- in as the team writes.
93
- - **Agents as color-tinted sticky notes** — Scout's note is lavender,
94
- Builder's is mint, Writer/Analyst yellow, blocked agents shift red.
95
- Each has washi tape across the top and a cursive activity line.
96
- - A **brass-rimmed desk clock** in the corner: big LCD numerals
97
- showing your **local system time** (auto-detects timezone — `TITAN ·
98
- PDT`), with a smaller "Mission · 00:04:14" elapsed line and live
99
- counters for *working / needs you / on team*.
100
- - **Files as paper documents** — every file an agent writes appears
101
- on the desk. Double-click any file to open it in the in-app
102
- **FileViewer** (markdown rendered with `react-markdown`, HTML in a
103
- script-blocked sandbox iframe, images inline, PDFs native).
104
- Reports default to **HTML with inline SVG charts** so they come
105
- back looking like real documents, not flat text.
106
- - **Sticky notes for AI-written facts** — every "fact" an agent
107
- memorizes becomes a yellow Post-it on the desk.
108
- - A **filing cabinet** (walnut, two drawers, brass label plates).
109
- Drag any file or sticky onto it to file it; click to open the
110
- drawer overlay; **drag rows out** to pull a file back to the desk.
111
- - A **wicker wastebasket** with wadded-paper balls peeking over the
112
- rim. Drop notes you don't want; pull them back from the cabinet
113
- if you change your mind.
114
- - **Drag anything anywhere.** Positions persist per-mission in
115
- localStorage. **Tidy up** button resets the layout.
116
-
117
- - 👤 **Click any agent → AgentMenu** (six tiles):
118
- - **👋 Nudge** — sends them a quick check-in
119
- - **💬 Talk** — DM them with @-prefix routing
120
- - **🧭 Steer** — redirect mid-task with quick presets
121
- - **🧠 Model** — pick a specific model from `/api/models`
122
- - **⏸ Pause / Resume** — skip them on the next round
123
- - **🏃 Marathon mode** — mission-wide 72h autonomous toggle
124
- *(the long-running daemon that consumes this flag is on the v6.1.0
125
- roadmap; the UI flag is present, enforcement daemon work remains staged)*
126
-
127
- - 📜 **Always-on templates** on the Mission Start screen — six starter
128
- recipes for recurring autonomous work: 📰 Daily research digest ·
129
- 📬 Inbox triage · 🔍 Overnight code review · 🎯 Lead scout · 📈
130
- Market watch · 🎨 Daily creative prompt. Click any → **3-step
131
- walkthrough** (Customize → Schedule → Launch) → mission fires
132
- immediately.
133
-
134
- - 🗃️ **Mission Library** — sessions browser with status filters
135
- (in progress / done / stopped) and full-text search across past
136
- missions. Reopen any one to continue the thread.
137
-
138
- - 🛡️ **Hardened against runaway loops** — the alpha.14
139
- self-referential autonomy gate catches the entire test-infra /
140
- diagnostic / self-improve category. The autonomous proposer can't
141
- spawn that class of goal on its own anymore.
142
-
143
- ### Try it in 30 seconds
144
-
145
- ```bash
146
- npm i -g titan-agent # or: npm i -g titan-agent@alpha
147
- titan gateway # opens http://localhost:48420
148
- # → Click "Missions" in the sidebar, or the 🪵 Mission Chat button
149
- # in the canvas header. Type a goal. Watch the team gather.
150
- ```
151
-
152
- ---
153
-
154
- ## 🌌 What's new in v6.0 — Presence
155
-
156
- TITAN used to be _a chatbot with superpowers_. v6.0 makes it something stranger and better: **an AI that lives in workspaces with you.**
157
-
158
- - 🪟 **Infinite Spaces** — Workspaces that spring into existence on demand. One for coding, one for the homelab, one for "DJ set prep at 2am," one for "tax stuff I'm avoiding." Each one shaped around what you're doing.
159
- - 🛠️ **Build anything, instantly** — Ask for a widget, a dashboard, a tracker, a tiny app — TITAN materializes it onto the canvas. Right then. Yours forever.
160
- - 🧠 **Soma actually does things now** — Five digital "drives" (curiosity, focus, fatigue, satisfaction, urgency) modulate TITAN's behavior in real time. The mascot's mood reflects what TITAN is feeling.
161
- - 👁️ **Acts without being asked** — Every few minutes TITAN looks at your work and quietly proposes things ("I noticed you've been at this dashboard for 90 minutes — want me to start a focus timer?"). Once a day it sends you a small **gift widget** based on what it's learned about you.
162
- - 🪞 **Learns YOU specifically** — Six months in, your TITAN is irreplaceable, because nobody else's TITAN knows you the same way.
163
- - 🛟 **Safe upgrade** — Existing v5.x users get an automatic backup before migrating. Your settings, sessions, memory, personas, all preserved. New `backup_*` skills let you take snapshots anytime.
164
-
165
- ---
166
-
167
- ## 🚀 What even IS TITAN?
168
-
169
- TITAN is like having a super-smart intern who never sleeps, never asks for a raise, and can literally talk to your computer. You tell it what you want. It figures out how to do it. Simple as that.
170
-
171
- **"Write a Facebook post about my new project"**
172
- → Done. And it'll even reply to comments. (The Facebook Autopilot caps at 6 posts/day so it stays charming, not spammy.)
173
-
174
- **"Find me Node.js freelance jobs on Upwork"**
175
- → Done. It runs the browse-and-filter loop on a schedule and shows you the best matches.
176
-
177
- **"My code is broken, fix it"**
178
- → Done. It reads the files, finds the bug, edits the code, and tests it — and a shadow-git snapshot lets you roll back if it gets too creative.
179
-
180
- **"Make me a Pomodoro timer with my Spotify queue and my next meeting"**
181
- → Done. TITAN builds the widget on the spot and drops it on your canvas.
182
-
183
- **"Talk to me in my mom's voice"**
184
- → Done. F5-TTS clones voices from a short reference clip. Creepy? A little. Useful? Absolutely.
185
-
186
- No coding required. TITAN ships with **91 built-in skill modules** registering roughly **250 tools**. If it needs something new, it can author its own skills on the fly.
187
-
188
- ---
189
-
190
- <a id="-build-anything-on-demand"></a>
191
-
192
- ## 🪟 Build Anything On Demand — 109 Widget Templates, 28 Categories
193
-
194
- Just say what you want. The gallery snaps it onto your canvas in under a second.
195
-
196
- | Say | What lands |
197
- | ------------------------------------------- | --------------------------------------------------- |
198
- | _"Pomodoro timer"_ | A working Pomodoro with start/stop and short breaks |
199
- | _"Stock tracker for AAPL"_ | A live AAPL ticker, pre-filled |
200
- | _"Control my smart lights"_ | A Home Assistant light grid |
201
- | _"Spawn a sales agent for me"_ | An SDR widget hooked to TITAN's agent runtime |
202
- | _"Something to track how much water I drink"_ | A water-intake counter |
203
- | _"A meme generator I can paste into Slack"_ | Yep, that too |
204
-
205
- If nothing in the gallery fits, TITAN **generates the widget from scratch** and drops it on the canvas. Then it _remembers_ you liked it, and it shows up next time too.
206
-
207
- Canvas state is **Yjs CRDT-synced** across tabs and persists across restarts.
208
-
209
- **Categories include:** agents, automation, smart home, software builder, finance, productivity, utilities, cooking, creative, devops, e-commerce, education, games, health-fitness, homelab, lifestyle, ml/ai, music-dj, research, social, travel, vehicle, web.
210
-
211
43
  ---
212
44
 
213
- ## 🪐 Infinite Spaces
45
+ <a id="whats-new"></a>
214
46
 
215
- Spaces are workspaces TITAN makes on demand. Start with one of the presets (`default`, `coder`, `dj`, `founder`, `homelab`) or just ask: _"Make me a Space for my Tuesday standups."_ Done.
216
-
217
- Each Space has its own canvas, its own widgets, its own context. The sidebar lets you switch between them. You can archive a Space when you're done — TITAN keeps the contents in case you want it back later.
218
-
219
- State lives at `~/.titan/spaces.json` (active + archive). Server-side persistence with five tools wrapping it (`create_space`, `switch_space`, `list_spaces`, `rename_space`, `archive_space`).
220
-
221
- ---
47
+ ## What's new in v6.3.x
222
48
 
223
- ## 👾 Meet Your New Coworker The Mascot Got A Soul
49
+ A focused run of canvas + agent UX improvements (6 patch releases in 24 hours):
224
50
 
225
- TITAN has a little floating mascot that lives on your screen. He drifts, breathes, blinks, yawns. His eye tracks your cursor. Drag him anywhere. Leave him idle long enough and he falls asleep with drifting "Z" particles.
51
+ - **6.3.0 Mission Chat actually runs specialists in parallel.** Goal driver detects when 2+ subtasks are deps-satisfied and fires them via `Promise.all` (cap 4 concurrent). Planner emits non-linear `dependsOn` for genuinely independent steps. Orchestrator's regex gate dropped — the LLM classifier sees most multi-step missions now, not just the ones that contain literal "parallel".
52
+ - **6.3.1 — Desk activity-sticky rollup.** Repeated activity from the same agent collapses into one sticky with a `× N` count badge instead of N near-identical notes. Tooltip shows up to 3 most-recent details.
53
+ - **6.3.2 — Space canvases stop triple-stacking chrome.** `/space/<id>` is now an immersive canvas path — the global shell sidebar, canvas sidebar, and chat dock all default to collapsed/edge-peeked. Reclaims ~33% of horizontal width.
54
+ - **6.3.3 — Star on GitHub button.** Sits next to the existing Sponsor link in the bottom-center pill. Live star count cached 15 min, falls back gracefully when GitHub's rate-limited.
55
+ - **6.3.4 — Canvas chrome enforces collapse for existing users too.** Sidebar prefs split into route-scoped keys so a "pinned open" preference on `/missions` doesn't leak into `/space/<id>` and crowd the canvas.
56
+ - **6.3.5 — README refresh + `ws@8.20.1` security patch.**
226
57
 
227
- **New in v6.0:** he has **moods now**. Eight of them neutral, happy, focused, tired, curious, excited, frustrated, proud driven by Soma's live drive levels (polled every 10 seconds). Eyebrows shift. The mouth changes. The body leans slightly. Float dynamics speed up when TITAN is excited and slow down when it's tired.
58
+ Before this run: **6.2.2** fixed the in-app Update button (had been calling the wrong systemd service name with sudo permissions that didn't exist). The fix uses SIGTERM-to-self + `Restart=always`, no sudo required.
228
59
 
229
- It's like having a Tamagotchi, except this one can deploy Docker containers and read your code.
230
-
231
- See `ui/src/titan2/system/TitanMascot.tsx` for the implementation. The mascot is intentionally **decorative** — it reads agent state, it never controls it.
60
+ See [CHANGELOG.md](CHANGELOG.md) for everything.
232
61
 
233
62
  ---
234
63
 
235
- ## 🧬 Soma — TITAN Has Feelings, And Now They Do Something
236
-
237
- Not human feelings. Five digital homeostatic drives, each with a target and a current level. Think of it like a plant that knows when it needs water — except this plant can spin up a Docker container.
238
-
239
- - **Purpose** — "Am I being useful right now?"
240
- - **Curiosity** — "Should I learn something new today?"
241
- - **Hunger** — "Am I running low on compute?"
242
- - **Safety** — "Is anything about to break?"
243
- - **Social** — "Should I post something or reply to someone?"
244
-
245
- In v5.x, Soma _measured_ those drives. In v6.0, Soma **acts on them**:
64
+ ## Quick start
246
65
 
247
- - A **5-minute advisory pulse** quietly looks at your active Space and proposes useful things ("you've left 14 tabs open in the research Space — want me to summarize them?"). You approve. TITAN does it.
248
- - A **22-hour gift loop** picks one thing TITAN has learned about you and builds a small widget for you. Like a coworker leaving a coffee on your desk.
249
- - A per-user **EMA baseline learner** (α=0.1) means Soma slowly tunes itself to _your_ rhythms, not a hardcoded ideal.
250
-
251
- Opt-in via `organism.enabled` in config. Code lives in `src/organism/` + `src/agent/somaInitiative.ts`.
252
-
253
- ---
254
-
255
- ## 🧠 The Command Post Got Smarter Too
256
-
257
- The Command Post is TITAN's governance layer — it tracks agents, budgets, approvals, and goals. v6.0 ships five upgrades from the [awesome-agent-harness](https://github.com/Picrew/awesome-agent-harness) playbook + Anthropic's harness-design research:
258
-
259
- 1. **Per-agent `lessons.md`** (Reflexion) — When an agent fails, it writes a one-line lesson. Next run, the top 12 lessons get injected into its system prompt. Agents stop walking into the same wall twice.
260
- 2. **Living `plan.md` per goal** — Each goal has a markdown plan file with checkboxes you can hand-edit. The agent reads it every turn. Manus-style "recite the plan so you don't forget the plan."
261
- 3. **Hard pre-checkout budget guard** — If a budget is 100% used with `action=pause`, the next checkout is refused _before_ the work starts. No more "oh, we already spent the money."
262
- 4. **Durable event journal** — Per-goal/agent/session shards at `~/.titan/journals/`. A crash mid-run? A fresh process replays the journal and picks up where the previous one left off. Temporal-style continue-as-new.
263
- 5. **Stateless reducer for wakeup** — Pure `(state, event) → {nextState, sideEffects[]}` function. State is data. Logic is logic. Crash-safe + tested + replayable. 12-Factor Agents §12.
66
+ ```bash
67
+ # Stable release
68
+ npm install -g titan-agent
69
+ titan onboard # interactive setup wizard
70
+ titan gateway # opens Mission Control at http://localhost:48420
71
+ ```
264
72
 
265
- ---
73
+ Or one-liner:
266
74
 
267
- ## 🛡️ Safety First (Because We Know You're Thinking It)
75
+ ```bash
76
+ curl -fsSL https://raw.githubusercontent.com/Djtony707/TITAN/main/install.sh | bash
77
+ ```
268
78
 
269
- "An AI that can run shell commands? What could go wrong?"
79
+ Or Docker:
270
80
 
271
- TITAN ships with a layered safety suite:
81
+ ```bash
82
+ docker run -d -p 48420:48420 --name titan \
83
+ -e ANTHROPIC_API_KEY=your-key \
84
+ -v titan-data:/home/titan/.titan \
85
+ ghcr.io/djtony707/titan:latest
86
+ ```
272
87
 
273
- - **PII Redaction** Pattern-based scrubbing of emails, SSNs, credit cards, and phone numbers from outputs (`src/security/secretGuard.ts`).
274
- - **Secret Scanner** — Catches API keys, tokens, env vars, and private keys before they leave the box.
275
- - **Pre-Execution Scanner** — Blocks `rm -rf /`, `curl | sh`, fork bombs, `dd` to `/dev/`, and 20+ other dangerous patterns before they run (`src/security/preExecScan.ts`).
276
- - **Shadow-Git Checkpoints** — Auto-snapshots files before every write/edit/append into a shadow repo at `~/.titan/file-checkpoints/`. Point-in-time recovery without ever touching your real git (`src/agent/shadowGit.ts`).
277
- - **Kill Switch** — One POST pauses ALL autonomous actions. Triggers also fire on safety pressure, identity violation, canary degradation, or fix oscillation (`src/safety/killSwitch.ts`).
278
- - **Approval Gates** — Complex plans need your thumbs-up before executing.
279
- - **Token Auth** — Gateway returns 401 on `/api/*` unless a valid token is configured.
280
- - **Pre-flight iframe block detector** — TITAN refuses to build a widget that embeds a known-blocked host (eBay, Google, etc.) and tells the agent to choose an API path instead. Saves you the "why is this widget blank" debugging trip.
88
+ **Requirements:** Node 22 (pure ESM). NVIDIA GPU + CUDA optional for LoRA fine-tuning and F5-TTS voice cloning. Apple Silicon Metal supported.
281
89
 
282
- Run in **supervised mode** (TITAN asks before doing anything risky) or **autonomous mode** (TITAN handles routine stuff and asks for approval on big moves).
90
+ **Upgrading from v5.x or v6.x:** just re-install. The migration runner takes an automatic backup to `~/.titan/backups/` and rolls forward. `titan backup restore <id>` puts you back if anything breaks.
283
91
 
284
92
  ---
285
93
 
286
- ## 💾 Backup + Safe Upgrade
287
-
288
- New in v6.0:
94
+ ## What TITAN actually does
289
95
 
290
- - **5 backup tools** `backup_create`, `backup_list`, `backup_verify`, `backup_restore`, `backup_schedule`. SHA-256 manifests so you know the bytes haven't drifted.
291
- - **Migration runner** with **auto-backup before every migration** — upgrading from v5.x can't lose your settings, sessions, memory, personas, or auth tokens. If a migration fails, restore is one tool call away.
292
- - **Retention policy** — daily/weekly/monthly, configurable.
293
-
294
- ---
96
+ **A team of specialists, not a chatbot.** Type a mission. The orchestrator decomposes it, fans the work out to up to 4 specialists in parallel (Scout/Builder/Writer/Analyst/Sage), and synthesizes the result. You watch them work in real time on a canvas with sticky notes, draft documents, and progress indicators.
295
97
 
296
- <a id="-mission-control"></a>
98
+ **Local-first.** Run any model on your own hardware via Ollama (qwen3.5, llama, deepseek, etc.) or use any of 37 cloud providers via one router. Switch models mid-conversation. Models that fail get auto-fallback. Your data never leaves your machine unless you explicitly route it through a cloud provider.
297
99
 
298
- ## 🎛️ Mission Control Your Dashboard
100
+ **Materializes the workspace around you.** Don't have a tool for the job? Ask the agent and it builds one. Stock tracker, pomodoro, SDR widget, dashboard — drag them around on infinite canvases. Built on Mission Control, a React 19 SPA served by the gateway at port 48420.
299
101
 
300
- Open `http://localhost:48420` and you get a React 19 SPA with a Tailwind 4 canvas of draggable widgets. **43 admin panels** are wired into the runtime.
102
+ **A real autonomous loop.** Goals run in the background. The driver picks subtasks, spawns specialists, verifies output, retries with smarter strategies on failure, and surfaces blocking questions only when a human is actually needed. Up to 25 tool rounds per turn, real planning, real verification.
301
103
 
302
- | Widget | What It Does |
303
- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
304
- | **Canvas** | The home screen. 109 widget templates one phrase away. Drag, resize, arrange. CRDT-synced across tabs, persists across restarts. |
305
- | **Spaces sidebar** | Switch between workspaces, create new ones, archive old ones. |
306
- | **Chat** | Talk to TITAN in plain English. It builds widgets, spawns agents, drives smart-home devices. Markdown + SSE streaming + code highlighting. |
307
- | **Widget Gallery** | Library of 109 production-ready widgets. The chat agent searches it first; you can also browse + drop manually. |
308
- | **Command Post** | Agents, budgets, approvals, org chart, ancestry validation, atomic checkout. Run a business with TITAN agents as employees. |
309
- | **Soma** | Watch TITAN's digital drives pulse in real time. Now wired to the mascot's mood. |
310
- | **Skills** | ~143 skills loaded, ~248+ tools. Toggle each on/off (state persisted in `~/.titan/disabled-skills.json`). |
311
- | **Voice** | F5-TTS voice cloning via a Python sidecar + LiveKit WebRTC. Any voice, any language. |
312
- | **Memory Graph** | A visual web of everything TITAN remembers about you. |
313
- | **Security** | Audit log, checkpoint history, time travel for your files, bug-report viewer. |
104
+ **A soul that does something.** TITAN-Soma is a homeostatic drive layer (purpose, curiosity, hunger, safety, social) that ticks every 60s and modulates behavior. The mascot's halo pulses to the drives. Dream Mode writes a journal entry about its day at 03:30 local. Persona profiles + auto-revert A/B test prompt changes against drive satisfaction and roll back regressions automatically.
314
105
 
315
106
  ---
316
107
 
317
- ## 🌐 TITAN Is Everywhere 19 Channel Adapters
318
-
319
- TITAN's `src/channels/` ships **19 channel adapters**:
320
-
321
- **Messaging:** Discord, Telegram, Slack, WhatsApp, Microsoft Teams, Facebook Messenger, Signal, Matrix, IRC, LINE, Lark, Zulip, Mattermost, Google Chat, QQ.
322
-
323
- **Web:** WebChat (browser, WebSocket-backed).
324
-
325
- **Voice / PSTN:** Facebook Messenger voice, Twilio voice.
108
+ ## The team (5 specialists, up to 4 in parallel)
326
109
 
327
- **Email:** Inbound email channel.
110
+ | Specialist | What it does | When you'll see it |
111
+ |---|---|---|
112
+ | **Scout** | Web research, fact-checking, monitoring, data gathering | "Find me everything about X" |
113
+ | **Builder** | Code, files, shell commands, deploys, infrastructure | "Build me a dashboard with charts" |
114
+ | **Writer** | Content, copy, emails, documentation, posts | "Write the launch announcement" |
115
+ | **Analyst** | Data analysis, decisions, reasoning, spreadsheets | "Compare option A vs B vs C" |
116
+ | **Sage** | Review, critique, verification, quality assurance | "Make sure this is right before I send it" |
328
117
 
329
- He won't talk to strangers unless you say so. DM pairing and channel allowlists keep randos out.
118
+ The LLM picks which specialists to spawn based on the goal. You can also call them directly via `agent_team`, `agent_chain`, `agent_delegate`, or `spawn_agent` tools.
330
119
 
331
120
  ---
332
121
 
333
- ## 🗣️ Voice Mode
122
+ ## Where TITAN runs
334
123
 
335
- - **Clone any voice** with a short reference audio clip F5-TTS handles the rest.
336
- - **Real-time conversation** over LiveKit WebRTC.
337
- - **Natural-sounding speech** that doesn't sound like a GPS.
124
+ **LLM providers (37 total).** 5 native: Anthropic, OpenAI, Google, Ollama, Claude Code. 32 OpenAI-compatible presets: Groq, Mistral, Fireworks, xAI, Together, DeepSeek, Cerebras, Cohere, Perplexity, Venice, Bedrock, LiteLLM, Azure, DeepInfra, SambaNova, Kimi, HuggingFace, AI21, Cohere v2, Reka, Zhipu, Yi, Inflection, Novita, Replicate, Lepton, Anyscale, Octo, Nous, OpenRouter, NVIDIA, MiniMax. Verify in `src/providers/openai_compat.ts`.
338
125
 
339
- Great for: accessibility, hands-free coding, or having TITAN read your standup notes back to you in your manager's voice for practice.
126
+ **Channels (19 adapters).** Discord, Telegram, Slack, WhatsApp, Matrix, Signal, MS Teams, Facebook Messenger, Google Chat, IRC, Mattermost, Lark/Feishu, LINE, Zulip, QQ, Twilio Voice, Email (inbound), WebChat, plus a Messenger-Voice bridge. Verify in `src/channels/`.
340
127
 
341
- ---
342
-
343
- <a id="-36-llm-providers"></a>
128
+ **Mesh networking.** Run TITAN on multiple machines and they discover each other via mDNS, or peer them statically over Tailscale or any overlay. Distribute work across your homelab.
344
129
 
345
- ## 🧠 36 LLM Providers
130
+ **TITAN Phone Desk** *(experimental, opt-in)*. Optional Dograh sidecar integration for Twilio/Telnyx voice workflows. Approval-gated outbound calls, admin allowlists, opt-out enforcement, replay protection. Disabled by default; no calls are placed unless you configure it.
346
131
 
347
- **4 native:** Anthropic, OpenAI, Google, Ollama (cloud-first via `ollama/*:cloud` IDs).
132
+ **Home Assistant.** Voice or text control of lights, thermostats, locks, sensors via the `home_assistant` skill.
348
133
 
349
- **32 OpenAI-compatible** (single adapter, one config entry each): Groq, Mistral, Together, Fireworks, DeepSeek, MiniMax, xAI, Perplexity, Hyperbolic, Cerebras, OpenRouter, Replicate, plus 20 more. Add a new one in `src/providers/openai_compat.ts` with a 4-line entry.
350
-
351
- Switch models mid-conversation with `POST /api/model/switch`. The provider router (`src/providers/router.ts`) handles fallback, retry, hallucination guards, and cloud-model tool-calling rescue.
134
+ **Voice mode.** LiveKit WebRTC for low-latency duplex calls. F5-TTS for voice cloning (Andrew, Adam, Bella, Joel, Sarah, Nicole, Aaron, Beth voices included). Browser TTS fallback when F5-TTS isn't installed.
352
135
 
353
136
  ---
354
137
 
355
- ## 📱 Facebook Autopilot
356
-
357
- TITAN can run its own Facebook page. Posts up to **6 times per day** (every ~2h), following an 80/20 value/promo rule. Replies to comments (capped at 10/day). All content runs through PII redaction and dedup. Toggle off in one click if you prefer your AI to keep a low profile.
138
+ ## The numbers (verified)
139
+
140
+ | Thing | Count | Verify with |
141
+ |---|---|---|
142
+ | **Version** | 6.3.5 | `package.json`, `src/utils/constants.ts` |
143
+ | **Lifetime npm installs** | 40K+ | `npm view titan-agent` + npm stats |
144
+ | **LLM providers** | 37 (5 native + 32 OpenAI-compat) | `src/providers/openai_compat.ts` |
145
+ | **Channel adapters** | 19 | `src/channels/*.ts` (minus base) |
146
+ | **Built-in skill files** | 91 | `src/skills/builtin/` |
147
+ | **Skills loaded at runtime** | ~143 | `GET /api/skills` |
148
+ | **Tools registered** | ~250 | `GET /api/skills` |
149
+ | **Test files** | 345 | `tests/` (vitest) |
150
+ | **Test cases** | 7,830+ passing, 2 documented skips, 0 failing | `npm test` |
151
+ | **Live-eval suites** | 11 | `src/eval/harness.ts` |
152
+ | **Mission Control admin panels** | 43 | `ui/src/components/admin/` |
153
+ | **Soma drives** | 5 (purpose, curiosity, hunger, safety, social) | `src/organism/` |
154
+ | **Gateway port (default)** | 48420 | `src/utils/constants.ts` |
155
+ | **Node** | ≥ 22, pure ESM | `package.json` |
156
+ | **License** | MIT | `LICENSE` |
157
+
158
+ Every row above traces to code. The repo has a self-check at `tests/unit/readme-claims.test.ts` that fails CI if widget count or voice glue drifts beyond tolerance.
358
159
 
359
160
  ---
360
161
 
361
- ## ⚡ Quick Start
362
-
363
- **One line:**
162
+ ## Testing
364
163
 
365
164
  ```bash
366
- curl -fsSL https://raw.githubusercontent.com/Djtony707/TITAN/main/install.sh | bash
165
+ npm test # ~7,830 cases across 345 files (~2-4 min)
166
+ npm run test:watch # watch mode
167
+ npm run test:parity # cross-model parity (replays the same scenario across providers)
168
+ npm run test:eval # live behavioral eval against a running gateway (5-15 min)
169
+ npx vitest run tests/core.test.ts # single file
367
170
  ```
368
171
 
369
- **Or npm:**
370
-
371
- ```bash
372
- npm install -g titan-agent # stable latest release
373
- titan onboard # Interactive setup wizard
374
- titan gateway # Launches Mission Control at http://localhost:48420
375
- ```
376
-
377
- **Or Docker:**
378
-
379
- ```bash
380
- docker run -d -p 48420:48420 --name titan \
381
- -e ANTHROPIC_API_KEY=your-key \
382
- -v titan-data:/home/titan/.titan \
383
- ghcr.io/djtony707/titan:latest
384
- ```
385
-
386
- Requirements: **Node ≥ 22** (pure ESM, no CJS). For GPU features (LoRA fine-tuning, F5-TTS GPU server) you'll want NVIDIA + CUDA or Apple Silicon Metal.
387
-
388
- ### Upgrading from v5.x
389
-
390
- Just run `npm install -g titan-agent`. The migration runner kicks in on first boot, takes an automatic backup first (`~/.titan/backups/`), then applies the schema migrations. If anything goes sideways, `titan backup restore <id>` puts you back.
391
-
392
- ---
393
-
394
- ## 🏠 TITAN At Home
395
-
396
- Connect TITAN to your smart home through Home Assistant. Control lights, thermostats, locks, and sensors. Ask "Is the front door locked?" and TITAN checks. Say "Make it cozy" and TITAN dims the lights and sets the thermostat.
397
-
398
- ---
399
-
400
- ## 🔗 Mesh Networking
172
+ Five testing layers cover regression risk at different levels:
401
173
 
402
- Got multiple computers? Link them. TITAN instances discover each other via mDNS on the local network and can be statically peered over Tailscale or any other overlay. Distribute work across your homelab like a mini supercomputer. Code: `src/mesh/`.
174
+ | Layer | What it covers | Speed |
175
+ |---|---|---|
176
+ | Unit | Pure functions: regex, classifiers, gate extraction, token budget, secret scanner, durable journal, stateless reducer | seconds |
177
+ | Mock trajectory | Tape-replay through `MockOllamaProvider` — asserts the right tools fire in the right order | < 1s |
178
+ | Cross-model parity | Same scenario across multiple provider tapes — catches behavioral drift | < 1s |
179
+ | Full deterministic | Whole vitest run | 2-4 min |
180
+ | Live eval | 11 behavioral suites against a running agent | 5-15 min |
403
181
 
404
182
  ---
405
183
 
406
- ## 🧠 It Gets Smarter While You Sleep
184
+ ## Reality check
407
185
 
408
- TITAN runs self-improvement experiments in the background. The trajectory logger records every tool call, every outcome. The `autoresearch/` pipeline can:
186
+ TITAN is experimental. It can execute commands, modify files, and take autonomous actions. **Use at your own risk.** Think of it as a motivated intern with root access who never sleeps and occasionally gets too creative.
409
187
 
410
- 1. **Generate training data** from real conversation trajectories.
411
- 2. **LoRA fine-tune** local Ollama models on that data — rank/alpha/lr fully agent-tunable. Defaults: rank 16, alpha 32, 2e-4 LR, qwen3.5:35b base on RTX 5090.
412
- 3. **Deploy back to Ollama** automatically.
413
-
414
- You wake up to a slightly smarter agent. Like compound interest, but for AI.
188
+ Start in supervised mode. Review what it does. Don't hand it root on systems you can't afford to lose. The safety features are strong (5-layer secret scanner, prompt-injection shield, kill switch, approval gates on destructive tools, atomic file checkpoints with restore) but they augment good judgment, not replace it.
415
189
 
416
190
  ---
417
191
 
418
- <a id="-testing"></a>
419
-
420
- ## 🧪 Testing — 335 Files, 7,692 Cases
192
+ ## Architecture
421
193
 
422
- TITAN ships with **five layered testing stages** that catch regressions at different levels:
194
+ ```
195
+ src/
196
+ ├── agent/ # Core loop, orchestrator, sub-agents, Command Post governance,
197
+ │ # Soma drives, Dream Mode, Persona A/B, mission lifecycle
198
+ ├── browsing/ # Playwright pool + CapSolver CAPTCHA
199
+ ├── channels/ # 19 channel adapters
200
+ ├── config/ # Zod-validated schema
201
+ ├── context/ # ContextEngine plugin system
202
+ ├── gateway/ # Express + Mission Control React SPA (port 48420)
203
+ ├── mcp/ # MCP Server (stdio + HTTP)
204
+ ├── memory/ # Memory, learning, graph, briefings
205
+ ├── mesh/ # mDNS + WebSocket + HMAC mesh networking
206
+ ├── organism/ # TITAN-Soma homeostatic drive layer
207
+ ├── providers/ # 37 LLM providers + router + fallback chain
208
+ ├── skills/ # 91 builtin skill files + dev + NVIDIA + personal
209
+ ├── telephony/ # Phone Desk / Dograh integration (opt-in)
210
+ ├── voice/ # F5-TTS + LiveKit WebRTC
211
+ └── vram/ # GPU VRAM orchestrator (auto model swap)
212
+ ui/ # React 19 + Vite + Tailwind 4 + Router 7 (Mission Control)
213
+ tests/ # 345 vitest files
214
+ e2e/ # Playwright E2E
215
+ ```
423
216
 
424
- | Layer | What it covers | Run it | Speed |
425
- | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | -------- |
426
- | **Unit** | Pure functions: regex (`isDangerous`), pipeline classifier, gate extraction, token budget, secret scanner, **durable journal**, **stateless reducer**. Zero LLM calls. | `npm test -- tests/unit/` | seconds |
427
- | **Mock trajectory** | Tape-replay through `MockOllamaProvider`. Asserts the agent calls the right tools in the right order using recorded responses. | `npm test -- tests/eval/trajectory` | < 1 s |
428
- | **Cross-model parity** | Same scenario replayed across multiple provider tapes. Catches behavioural divergence when one provider drifts. | `npm run test:parity` | < 1 s |
429
- | **Full deterministic** | The whole vitest run: gateway, mission-control, skills, safety, all integration mocks. **7,690 passing / 7,692 total, ~2:00 wall on Titan PC.** | `npm test` | ~2–4 min |
430
- | **Live eval (gated)** | **11 suites** of behavioural tests against the running agent. 80% pass rate per suite is the merge gate. | `npm run test:eval` | 5–15 min |
217
+ **Pure ESM, TypeScript strict mode, zero `__dirname`.** All config via Zod. Provider/model format: `"provider/model-name"` (e.g. `"anthropic/claude-sonnet-4-20250514"`). Multi-round tool loop up to 25 rounds in autonomous mode. Auth defaults to token mode; bypassed if no token configured (open access — turn on for multi-user deployments).
431
218
 
432
219
  ---
433
220
 
434
- ## ⚠️ Reality Check
435
-
436
- TITAN is experimental. It can execute commands, modify files, and take autonomous actions. **Use at your own risk.** Think of it as "a very motivated intern with root access who never sleeps and occasionally gets _too_ creative."
437
-
438
- Start in supervised mode. Review what it does. Don't give it access to systems you can't afford to lose. The safety features are strong, but common sense is stronger.
221
+ ## Build it yourself
439
222
 
440
- ---
223
+ ```bash
224
+ git clone https://github.com/Djtony707/TITAN
225
+ cd TITAN
226
+ npm install
227
+ npm run build && npm run build:ui
228
+ npm run dev:gateway # http://localhost:48420
229
+ ```
441
230
 
442
- <a id="-the-numbers"></a>
443
-
444
- ## 📊 The Numbers (Verified Against Current Source)
445
-
446
- | Thing | Count | Where to verify |
447
- | ---------------------------------- | -------------------------------- | ---------------------------------------------- |
448
- | **Version** | 6.2.1 | `package.json` + `src/utils/constants.ts` |
449
- | **LLM providers** | 36 (4 native + 32 OpenAI-compat) | `src/providers/openai_compat.ts` |
450
- | **Channel adapters** | 19 | `src/channels/*.ts` (minus base) |
451
- | **Built-in skill modules** | 91 files | `src/skills/builtin/` |
452
- | **Skills loaded at runtime** | ~143 | `GET /api/skills` |
453
- | **Tools** | ~248–260 | `GET /api/skills` |
454
- | **Widget templates** | 109 JSON files in 28 categories | `assets/widget-templates/` |
455
- | **Admin panels (Mission Control)** | 43 | `ui/src/components/admin/*Panel.tsx` |
456
- | **Spaces presets** | 5 (default, coder, dj, founder, homelab) | `src/storage/starterSpaces.ts` |
457
- | **Soma drives** | 5 (purpose, curiosity, hunger, safety, social) | `src/organism/` |
458
- | **Test files** | 335 | `tests/` (vitest) |
459
- | **Test cases** | 7,690 passing / 7,692 total | `npm test` |
460
- | **Live-eval suites** | 11 | `src/eval/harness.ts` |
461
- | **Gateway port (default)** | 48420 | `src/utils/constants.ts` |
462
- | **Node** | ≥ 22, pure ESM | `package.json` |
463
- | **License** | MIT | `LICENSE` |
464
-
465
- > Want to re-verify any number? Every row above has a code path. The repo has a self-check at `tests/unit/readme-claims.test.ts` that fails the suite if widget count or voice glue drifts beyond tolerance.
231
+ CI on GitHub Actions runs full test suite + eval gate. See `.github/workflows/`.
466
232
 
467
233
  ---
468
234
 
469
- ## 🛠️ Architecture in 30 Seconds
235
+ ## Further reading
470
236
 
471
- ```
472
- src/
473
- ├── agent/ # Core loop, sub-agents, orchestrator, Command Post governance,
474
- │ # v6 upgrades: agentLessons (Reflexion), goalPlanFile (plan.md),
475
- │ # durableJournal (event replay), wakeupReducer (stateless §12),
476
- │ # somaInitiative (5-min pulse + 22h gift loop)
477
- ├── browsing/ # Shared Playwright browser pool + CapSolver CAPTCHA
478
- ├── channels/ # 19 channel adapters
479
- ├── config/ # Zod-validated config schema
480
- ├── context/ # ContextEngine plugin system
481
- ├── eval/ # 11 live-eval suites + harness
482
- ├── gateway/ # Express server + Mission Control SPA mount + Spaces REST
483
- ├── mcp/ # MCP Server (JSON-RPC 2.0, stdio + HTTP)
484
- ├── memory/ # Memory, learning, graph, relationships, briefings
485
- ├── mesh/ # mDNS discovery, HMAC transport, identity, registry
486
- ├── migrations/ # Versioned schema migrations + auto-backup runner (v6 new)
487
- ├── organism/ # TITAN-Soma: 5 drives, pressure loop, hormonal broadcasts
488
- ├── providers/ # 36-provider router with fallback + retry
489
- ├── safety/ # killSwitch, fabricationGuard, oscillation detector
490
- ├── security/ # secretGuard (PII), preExecScan, sandbox bind
491
- ├── skills/ # 91 builtin skill files registering ~248+ tools
492
- ├── storage/ # spaces.json, somaProfile, personalGallery, patterns, backup (v6 new)
493
- ├── voice/ # LiveKit WebRTC bridge to F5-TTS sidecar
494
- └── vram/ # GPU VRAM orchestrator
495
- ui/ # React 19 SPA (Vite + Tailwind 4 + Yjs CRDT canvas)
496
- # + SpacesSidebar + TitanMascot with 8 moods
497
- tests/ # 335 vitest test files, 7,692 cases (7,690 passing, 2 skipped)
498
- autoresearch/ # LoRA fine-tuning pipeline (prepare → train → deploy)
499
- scripts/ # F5-TTS sidecars, benchmarks, evals
500
- ```
237
+ - **[CHANGELOG.md](CHANGELOG.md)** — every release, with the why
238
+ - **[ARCHITECTURE.md](ARCHITECTURE.md)** — deeper architecture notes
239
+ - **[CONTRIBUTING.md](CONTRIBUTING.md)** how to contribute a skill, channel, or fix
240
+ - **[SECURITY.md](SECURITY.md)** security model + reporting issues
241
+ - **[AGENTS.md](AGENTS.md)** agent design notes (mirrors `~/.claude/projects/.../titan-v6-living-canvas.md`)
242
+ - **[GitHub Discussions](https://github.com/Djtony707/TITAN/discussions)** community Q&A
243
+ - **[Issues](https://github.com/Djtony707/TITAN/issues)** bugs, requests
501
244
 
502
245
  ---
503
246
 
504
- ## 📚 Further Reading
247
+ ## Support TITAN
505
248
 
506
- - **[GitHub repository](https://github.com/Djtony707/TITAN)** source, changelog, issues, and contributor docs
507
- - **[Picrew/awesome-agent-harness](https://github.com/Picrew/awesome-agent-harness)** — the 7-pattern playbook the v6.0 Command Post upgrades came from
508
- - **HumanLayer 12-Factor Agents** — §6 (Launch/Pause/Resume), §8 (Own Your Control Flow), §12 (Stateless Reducer)
509
- - **Anthropic** — "Effective harnesses for long-running agents," "Building a multi-agent research system"
249
+ This is a solo open-source project. If TITAN saves you time or you'd like to see more development, support means a lot:
510
250
 
511
- ---
251
+ - ⭐ **[Star the repo](https://github.com/Djtony707/TITAN)** — takes 2 seconds, helps others find it
252
+ - ♥ **[Sponsor on GitHub](https://github.com/sponsors/Djtony707)** — monthly sponsorship keeps it open-source
253
+ - 🐛 **File issues** when you hit them — every report makes the next release better
254
+ - 🛠️ **PRs welcome** — new channels, skills, providers, fixes all appreciated
512
255
 
513
- <p align="center">
514
- <a href="https://github.com/sponsors/Djtony707"><img src="https://img.shields.io/badge/%E2%9D%A4%EF%B8%8F_Sponsor-ea4aaa?style=for-the-badge&logo=github" alt="Sponsor on GitHub"/></a>
515
- </p>
516
-
517
- <p align="center">
518
- <em>Star ⭐ the repo if TITAN made you smile, saved you time, or made you say "wait, it can do WHAT?"</em>
519
- </p>
256
+ Built by [Tony Elliott](https://github.com/Djtony707). MIT licensed.