titan-agent 6.3.3 → 6.3.5
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 +154 -417
- package/dist/utils/constants.js +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/package.json +1 -1
- package/ui/dist/assets/{AuditPanel-srKuRJBx.js → AuditPanel-C7rrUHBM.js} +1 -1
- package/ui/dist/assets/{AutonomyPanel-DTOg92_8.js → AutonomyPanel-CcOxsveF.js} +1 -1
- package/ui/dist/assets/{AutopilotPanel-C-XlExji.js → AutopilotPanel-CjrYEF2s.js} +1 -1
- package/ui/dist/assets/{AutoresearchPanel-BYffkknO.js → AutoresearchPanel-CBdGRAdZ.js} +1 -1
- package/ui/dist/assets/{BackupPanel-BpqVqS2y.js → BackupPanel-BhU-utCn.js} +1 -1
- package/ui/dist/assets/{BrowserPanel-CpcHkt_q.js → BrowserPanel-Dr-B5Kva.js} +1 -1
- package/ui/dist/assets/{CPActivity-BDsBsGAV.js → CPActivity-C5kJWqWc.js} +1 -1
- package/ui/dist/assets/{CPAgentDetail-C8kfr8IG.js → CPAgentDetail-BVE3LoLA.js} +1 -1
- package/ui/dist/assets/{CPAgents-DO7kdGWL.js → CPAgents-BKBSyXHs.js} +1 -1
- package/ui/dist/assets/{CPApprovals-UJ-Rs0IT.js → CPApprovals-AkRGu05y.js} +1 -1
- package/ui/dist/assets/{CPCosts-C7ZevZP2.js → CPCosts-DC5mPwVm.js} +1 -1
- package/ui/dist/assets/{CPDashboard-BZN7lJ4t.js → CPDashboard-C7G-H6HW.js} +1 -1
- package/ui/dist/assets/{CPFiles-Bx4ttNJ8.js → CPFiles-IhcbsdvY.js} +1 -1
- package/ui/dist/assets/{CPGoals-Bvzkk8W6.js → CPGoals-BL0rrvT5.js} +1 -1
- package/ui/dist/assets/{CPInbox-BczZjFbO.js → CPInbox-CBUkqu4i.js} +1 -1
- package/ui/dist/assets/{CPIssueDetail-DRVr_aqu.js → CPIssueDetail-HuI9tPu4.js} +1 -1
- package/ui/dist/assets/{CPIssues-DpeO_37Y.js → CPIssues-Do9d-evH.js} +1 -1
- package/ui/dist/assets/CPLayout-DlpdPzBu.js +2 -0
- package/ui/dist/assets/{CPOrg-CZaFupL_.js → CPOrg-WHkSBNGU.js} +1 -1
- package/ui/dist/assets/{CPRuns-LfgKZcY5.js → CPRuns-B4Pz5QkG.js} +1 -1
- package/ui/dist/assets/{CPSocial-aV6eplfG.js → CPSocial-DayQlwZL.js} +1 -1
- package/ui/dist/assets/{CPVoice-CJfW9Rmi.js → CPVoice-C2ry-Muk.js} +1 -1
- package/ui/dist/assets/{ChannelsPanel-C2BO3kax.js → ChannelsPanel-CeIEB9Es.js} +1 -1
- package/ui/dist/assets/{CheckpointsPanel-CBcHZncd.js → CheckpointsPanel-BkqqvLDL.js} +1 -1
- package/ui/dist/assets/{CommandPostHub-CLnqGM62.js → CommandPostHub-Jd5_PAh3.js} +3 -3
- package/ui/dist/assets/{CronPanel-DGraqIbo.js → CronPanel-COkBBcTV.js} +1 -1
- package/ui/dist/assets/{DataTable-BJlvWF1y.js → DataTable-YQ9l5Xab.js} +1 -1
- package/ui/dist/assets/{DreamPanel-DfczImsZ.js → DreamPanel-B5M--_sB.js} +1 -1
- package/ui/dist/assets/{EmptyState-D_fRWCXx.js → EmptyState-DtSIPEVv.js} +1 -1
- package/ui/dist/assets/{EvalHarnessPanel-Benn3gFG.js → EvalHarnessPanel-DXU9jNmm.js} +1 -1
- package/ui/dist/assets/{EvalPanel-DDDTr1W8.js → EvalPanel-CY1kmmoG.js} +1 -1
- package/ui/dist/assets/{FileViewer-CFDLpbl3.js → FileViewer-BPLxBXEr.js} +1 -1
- package/ui/dist/assets/{FilesPanel-g8k7Z_ea.js → FilesPanel-B5RpGquX.js} +1 -1
- package/ui/dist/assets/{FleetPanel-01gxZlxR.js → FleetPanel-1g-MrF81.js} +1 -1
- package/ui/dist/assets/{HomelabPanel-C_Kpp-jq.js → HomelabPanel-CxkWfeeN.js} +1 -1
- package/ui/dist/assets/InfraView-CYH3ieie.js +2 -0
- package/ui/dist/assets/{InlineEditableField-zyYfa5Jl.js → InlineEditableField-BuXVLQiL.js} +1 -1
- package/ui/dist/assets/{Input-Cm4ppgbt.js → Input-C6OxbFDH.js} +1 -1
- package/ui/dist/assets/{IntegrationsPanel-DLfYHy7-.js → IntegrationsPanel-CPZclot5.js} +1 -1
- package/ui/dist/assets/IntelligenceView-DqwlFo91.js +2 -0
- package/ui/dist/assets/{LearningPanel-2LcS5Vqm.js → LearningPanel-DHQSZZGb.js} +1 -1
- package/ui/dist/assets/{LogsPanel-YDE1-OQU.js → LogsPanel-XfC4fyQ6.js} +1 -1
- package/ui/dist/assets/{McpPanel-D1v3LwyX.js → McpPanel-CBN7xizL.js} +1 -1
- package/ui/dist/assets/{MemoryGraphPanel-CtWA8YuJ.js → MemoryGraphPanel-BBxgK2Lo.js} +1 -1
- package/ui/dist/assets/{MemoryWikiPanel-Cqps7hGG.js → MemoryWikiPanel-BNv9ycwr.js} +1 -1
- package/ui/dist/assets/{MeshPanel-BNBI60Kh.js → MeshPanel-GFPkWStS.js} +1 -1
- package/ui/dist/assets/{MissionCanvas-CPmsOHNs.js → MissionCanvas-BR9tT-Vs.js} +1 -1
- package/ui/dist/assets/{MissionChat-BhdcG_8G.js → MissionChat-B_fuBUn5.js} +1 -1
- package/ui/dist/assets/{MissionLibrary-Deks4dm7.js → MissionLibrary-C9fCMdpu.js} +1 -1
- package/ui/dist/assets/{MissionStart-ClQzNvvk.js → MissionStart-Bb2fCB2u.js} +1 -1
- package/ui/dist/assets/{Modal-D3kmdSBW.js → Modal-9_l_CYE2.js} +1 -1
- package/ui/dist/assets/{NvidiaPanel-BhSsBbMG.js → NvidiaPanel-CiB9Nlbq.js} +1 -1
- package/ui/dist/assets/{OrganismPanel-5eKj-u5O.js → OrganismPanel-d6mPFcBq.js} +1 -1
- package/ui/dist/assets/{OverviewPanel-C7YJgjIS.js → OverviewPanel-DF7eBJCF.js} +1 -1
- package/ui/dist/assets/{PageHeader-0FZrM9sX.js → PageHeader-BQEb_uAl.js} +1 -1
- package/ui/dist/assets/{PersonaProfilesPanel-Kbyz2S3M.js → PersonaProfilesPanel-qAgZyu1B.js} +1 -1
- package/ui/dist/assets/{PersonasPanel-DzJFmfaz.js → PersonasPanel-CxDpp_3j.js} +1 -1
- package/ui/dist/assets/{PhoneDeskPanel-DZDPkVmm.js → PhoneDeskPanel-CLp3E_Ry.js} +1 -1
- package/ui/dist/assets/{RecipesPanel-sG2wIUOY.js → RecipesPanel-DqMMQnyc.js} +1 -1
- package/ui/dist/assets/{SecurityPanel-R8QcTvYn.js → SecurityPanel-BQ3-aMmO.js} +1 -1
- package/ui/dist/assets/{SelfImprovePanel-Burrv2Jw.js → SelfImprovePanel-C-ylXP-k.js} +1 -1
- package/ui/dist/assets/{SelfProposalsPanel-DdHyA7M7.js → SelfProposalsPanel-d5W-0A3P.js} +1 -1
- package/ui/dist/assets/{SessionsPanel-ByV8dYnL.js → SessionsPanel-DzbNc8iW.js} +1 -1
- package/ui/dist/assets/{SessionsTab-BRpcK3SC.js → SessionsTab-CuRh8SAw.js} +1 -1
- package/ui/dist/assets/{SettingsPanel-E5WyEqka.js → SettingsPanel-C1FbNM3W.js} +1 -1
- package/ui/dist/assets/SettingsView-ZTklN8Q3.js +2 -0
- package/ui/dist/assets/{SkeletonLoader-BxTaQoW_.js → SkeletonLoader-CrZUFaIM.js} +1 -1
- package/ui/dist/assets/{SkillsPanel-BXyiyd7F.js → SkillsPanel-eyCYqSuP.js} +1 -1
- package/ui/dist/assets/{SomaView-w865kZBc.js → SomaView-CvHD2r-j.js} +1 -1
- package/ui/dist/assets/{StatCard-D2OzXAEF.js → StatCard-_MlD8k-5.js} +1 -1
- package/ui/dist/assets/{StatusBadge-9A-LF8XO.js → StatusBadge-MIQ4EfQR.js} +1 -1
- package/ui/dist/assets/{Tabs-C7UF63vs.js → Tabs-DkooY-W7.js} +1 -1
- package/ui/dist/assets/{TeamsPanel-BeNA1P-k.js → TeamsPanel-fa--osWi.js} +1 -1
- package/ui/dist/assets/{TelemetryPanel-D8gu25aT.js → TelemetryPanel-BEEWcoNE.js} +1 -1
- package/ui/dist/assets/{TitanCanvas-D7KEvDFz.js → TitanCanvas-LWyPGpf5.js} +27 -27
- package/ui/dist/assets/{ToolsView-CDeB3RtS.js → ToolsView-UCDMsvb1.js} +2 -2
- package/ui/dist/assets/{Tooltip-1mExUZjj.js → Tooltip-DrpHNalN.js} +1 -1
- package/ui/dist/assets/{TraceViewer-MDRjeVoy.js → TraceViewer-XsmYbc0e.js} +1 -1
- package/ui/dist/assets/{TrainingPanel-CS9oWB58.js → TrainingPanel-CmJXLn4n.js} +1 -1
- package/ui/dist/assets/{VoiceOverlay-BeQ9oiym.js → VoiceOverlay-D2N-c76K.js} +1 -1
- package/ui/dist/assets/{VramPanel-BNOFAvif.js → VramPanel-h6zjNx-6.js} +1 -1
- package/ui/dist/assets/{WatchView-COyUaBza.js → WatchView-DDNt13KH.js} +1 -1
- package/ui/dist/assets/{WorkTab-BFYrzFcn.js → WorkTab-CLXkjuee.js} +1 -1
- package/ui/dist/assets/{WorkflowsPanel-DEz8opv0.js → WorkflowsPanel-BYtLGQVm.js} +1 -1
- package/ui/dist/assets/{archive-D0TMs-ec.js → archive-BSupLPZM.js} +1 -1
- package/ui/dist/assets/{arrow-left-BflMGFJr.js → arrow-left-BaVVZjqf.js} +1 -1
- package/ui/dist/assets/{book-open-DucGf6Ry.js → book-open-CZxMkLs8.js} +1 -1
- package/ui/dist/assets/{bot-DlZ9827e.js → bot-Cv-edYov.js} +1 -1
- package/ui/dist/assets/{chart-column-Dva45R9X.js → chart-column-BSVdQ9RP.js} +1 -1
- package/ui/dist/assets/{check-o_c7GSUi.js → check-DbgTEg8O.js} +1 -1
- package/ui/dist/assets/{chevron-right-B2xN7vZr.js → chevron-right-DfToq0aQ.js} +1 -1
- package/ui/dist/assets/{chevron-up-DNehgPl9.js → chevron-up-DMS2Tjip.js} +1 -1
- package/ui/dist/assets/{circle-check-big-BTui49nQ.js → circle-check-big-BBQqeCVt.js} +1 -1
- package/ui/dist/assets/{circle-stop-GEGv_qUQ.js → circle-stop-CZNS3Uri.js} +1 -1
- package/ui/dist/assets/{clipboard-list-Dy-3UtJn.js → clipboard-list-CzMXlUCb.js} +1 -1
- package/ui/dist/assets/{clock-DSVWc_hS.js → clock-BvWNugZo.js} +1 -1
- package/ui/dist/assets/{dollar-sign-B57wYnbN.js → dollar-sign-pghzkByE.js} +1 -1
- package/ui/dist/assets/{download-BYoF2I2k.js → download-CupMD2Qi.js} +1 -1
- package/ui/dist/assets/{external-link-BbZ5ZMbT.js → external-link-8Pnd2MvS.js} +1 -1
- package/ui/dist/assets/{file-text-BsTFGmBj.js → file-text-rkojc4Uq.js} +1 -1
- package/ui/dist/assets/{flask-conical-D8gouq57.js → flask-conical-BtbE3rIA.js} +1 -1
- package/ui/dist/assets/{folder-C0s6yhdf.js → folder-65U1Euur.js} +1 -1
- package/ui/dist/assets/{funnel-CYj9F_J0.js → funnel-D9FpWHn9.js} +1 -1
- package/ui/dist/assets/{git-branch-BFjAPkNq.js → git-branch-D6YV_OC1.js} +1 -1
- package/ui/dist/assets/{index-Dnvk3jCu.js → index-BslUQuVl.js} +61 -61
- package/ui/dist/assets/{layers-7OM7j4xy.js → layers-rc37Q5yX.js} +1 -1
- package/ui/dist/assets/{legacy-DWFG28eD.js → legacy-BydeSW77.js} +1 -1
- package/ui/dist/assets/{lightbulb-KE9dVLJ1.js → lightbulb-BEx7BdxD.js} +1 -1
- package/ui/dist/assets/{list-todo-I7S4ILfX.js → list-todo-6N1AZe4i.js} +1 -1
- package/ui/dist/assets/{message-square-BktXdPkG.js → message-square-BEGY8pHF.js} +1 -1
- package/ui/dist/assets/{mic-CQcJXVlD.js → mic-CGj6cLoV.js} +1 -1
- package/ui/dist/assets/{missions-DoFF2JOc.js → missions-BohoEPZo.js} +1 -1
- package/ui/dist/assets/{network-CxR7yDrR.js → network-DxIkmFJR.js} +1 -1
- package/ui/dist/assets/{pause-CoNV7lxb.js → pause-CxvyFedA.js} +1 -1
- package/ui/dist/assets/{pencil-BfcTfeAV.js → pencil-D5LooNFk.js} +1 -1
- package/ui/dist/assets/{play-BQj0nGq2.js → play-6W8amqUG.js} +1 -1
- package/ui/dist/assets/{plug-Bt3RMNci.js → plug-C3Ecy-Ji.js} +1 -1
- package/ui/dist/assets/{plus-D3aWFzy1.js → plus-BtmCDNeU.js} +1 -1
- package/ui/dist/assets/{proxy-Dxc39wKi.js → proxy-BD29vUSb.js} +1 -1
- package/ui/dist/assets/{radio-DwaUeLWj.js → radio-Bl9Tibea.js} +1 -1
- package/ui/dist/assets/{refresh-cw-pV7an3cE.js → refresh-cw-BHphkMjv.js} +1 -1
- package/ui/dist/assets/{rotate-ccw-DQ2_e6Ey.js → rotate-ccw-DQzGCkVc.js} +1 -1
- package/ui/dist/assets/{save-Bc5LT98_.js → save-Bk90yLic.js} +1 -1
- package/ui/dist/assets/{search-5DwwxYyL.js → search-DxM6zcDJ.js} +1 -1
- package/ui/dist/assets/{send-D1b4UjEx.js → send-ChZ5Hsne.js} +1 -1
- package/ui/dist/assets/{server-DjUE1pG1.js → server-CSOB40Ah.js} +1 -1
- package/ui/dist/assets/{shield-check-CFFgZVUJ.js → shield-check-uMK1alGs.js} +1 -1
- package/ui/dist/assets/{terminal-BgivA6PX.js → terminal-lIpm0q0K.js} +1 -1
- package/ui/dist/assets/{test-tube-dYWRJTXm.js → test-tube-DuTInDo7.js} +1 -1
- package/ui/dist/assets/{toggle-right-C0WDq8zW.js → toggle-right-j4jgj1NQ.js} +1 -1
- package/ui/dist/assets/{trash-2-BYDarYfk.js → trash-2-2Qmp8Fyr.js} +1 -1
- package/ui/dist/assets/{trending-up-gomnMzHI.js → trending-up-BydxQces.js} +1 -1
- package/ui/dist/assets/{trophy-BdGosdNp.js → trophy-B8Fq83wO.js} +1 -1
- package/ui/dist/assets/{volume-2-UXO66-b3.js → volume-2-B6qThcBF.js} +1 -1
- package/ui/dist/assets/{wifi-off-BBMJbZvM.js → wifi-off-BX5XYuML.js} +1 -1
- package/ui/dist/index.html +1 -1
- package/ui/dist/sw.js +1 -1
- package/ui/dist/assets/CPLayout-B2Odh1We.js +0 -2
- package/ui/dist/assets/InfraView-DLhemt3r.js +0 -2
- package/ui/dist/assets/IntelligenceView-I7i3t8kE.js +0 -2
- package/ui/dist/assets/SettingsView-BPVPhIUK.js +0 -2
package/README.md
CHANGED
|
@@ -1,519 +1,256 @@
|
|
|
1
1
|
[//]: # "npm-text-start"
|
|
2
2
|
|
|
3
|
-
> **TITAN** —
|
|
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
|
|
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="
|
|
13
|
+
<img src="assets/titan-logo.png" alt="TITAN Logo" width="240"/>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
17
|
-
<strong>
|
|
18
|
-
<br><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/
|
|
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="
|
|
30
|
-
<
|
|
31
|
-
<
|
|
32
|
-
<
|
|
33
|
-
<
|
|
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/
|
|
38
|
+
⭐ <a href="https://github.com/Djtony707/TITAN">Star us on GitHub</a> ·
|
|
39
|
+
♥ <a href="https://github.com/sponsors/Djtony707">Sponsor</a> ·
|
|
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
|
-
|
|
45
|
+
<a id="whats-new"></a>
|
|
214
46
|
|
|
215
|
-
|
|
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
|
-
|
|
49
|
+
A focused run of canvas + agent UX improvements (6 patch releases in 24 hours):
|
|
224
50
|
|
|
225
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
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
|
-
|
|
75
|
+
```bash
|
|
76
|
+
curl -fsSL https://raw.githubusercontent.com/Djtony707/TITAN/main/install.sh | bash
|
|
77
|
+
```
|
|
268
78
|
|
|
269
|
-
|
|
79
|
+
Or Docker:
|
|
270
80
|
|
|
271
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
287
|
-
|
|
288
|
-
New in v6.0:
|
|
94
|
+
## What TITAN actually does
|
|
289
95
|
|
|
290
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
122
|
+
## Where TITAN runs
|
|
334
123
|
|
|
335
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
132
|
+
**Home Assistant.** Voice or text control of lights, thermostats, locks, sensors via the `home_assistant` skill.
|
|
348
133
|
|
|
349
|
-
**
|
|
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
|
-
##
|
|
356
|
-
|
|
357
|
-
|
|
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
|
-
##
|
|
362
|
-
|
|
363
|
-
**One line:**
|
|
162
|
+
## Testing
|
|
364
163
|
|
|
365
164
|
```bash
|
|
366
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
184
|
+
## Reality check
|
|
407
185
|
|
|
408
|
-
TITAN
|
|
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
|
-
|
|
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
|
-
|
|
419
|
-
|
|
420
|
-
## 🧪 Testing — 335 Files, 7,692 Cases
|
|
192
|
+
## Architecture
|
|
421
193
|
|
|
422
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
##
|
|
235
|
+
## Further reading
|
|
470
236
|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
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
|
-
##
|
|
247
|
+
## Support TITAN
|
|
505
248
|
|
|
506
|
-
-
|
|
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
|
-
|
|
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.
|