🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@openthomas/thomas

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@openthomas/thomas - npm Package Compare versions

Comparing version
0.2.0
to
0.4.0
+1
ui-dist/assets/index-By4Qi9RV.css
:root{--bg: #0d1117;--fg: #c9d1d9;--fg-muted: #8b949e;--border: #30363d;--accent: #58a6ff;--tool: #d29922;--thinking: #a371f7;--mcp: #3fb950;--err: #f85149;--risk-info: #58a6ff;--risk-warn: #d29922;--risk-high: #f85149}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--fg);font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,Monaco,monospace}.app{max-width:1200px;margin:0 auto;padding:1.5rem}header{display:flex;align-items:baseline;gap:1rem;border-bottom:1px solid var(--border);padding-bottom:.75rem;margin-bottom:1.5rem}header h1{margin:0;font-size:1.4rem;font-weight:600}header .slug{color:var(--fg-muted);font-size:.85rem}table.runs{width:100%;border-collapse:collapse}table.runs th,table.runs td{text-align:left;padding:.4rem .75rem;border-bottom:1px solid var(--border)}table.runs th{font-weight:500;color:var(--fg-muted);text-transform:uppercase;font-size:.7rem;letter-spacing:.05em}table.runs tbody tr{cursor:pointer}table.runs tbody tr:hover{background:#388bfd1a}code{font-family:inherit;color:var(--accent)}.run-detail .back{background:none;border:1px solid var(--border);color:var(--fg);padding:.3rem .6rem;cursor:pointer;font:inherit;border-radius:4px}.run-detail .back:hover{background:#ffffff0d}.run-detail .meta{margin:1rem 0 2rem}.run-detail .meta h2{margin:0 0 .75rem;font-size:1rem;font-weight:500}.run-detail .meta dl{display:grid;grid-template-columns:100px 1fr;gap:.25rem 1rem;font-size:.85rem;margin:0}.run-detail .meta dt{color:var(--fg-muted)}.run-detail .meta dd{margin:0}.action{border:1px solid var(--border);border-radius:6px;padding:.75rem 1rem;margin-bottom:1rem;background:#ffffff05}.action-head{display:flex;gap:1rem;align-items:center;margin-bottom:.5rem;font-size:.85rem}.action-head .kind{background:var(--border);padding:.1rem .5rem;border-radius:3px;color:var(--accent)}.action-head .kind.kind-mcp_call{color:var(--mcp)}.action-head .kind.kind-tool_call{color:var(--tool)}.mcp-dir{font-weight:700;display:inline-block;min-width:1ch}.mcp-dir-request{color:var(--accent)}.mcp-dir-response{color:var(--mcp)}.mcp-dir-notification{color:var(--fg-muted)}.risks{display:flex;flex-wrap:wrap;gap:.35rem;margin:.35rem 0 .5rem}.risk{font-size:.7rem;padding:.1rem .45rem;border-radius:3px;border:1px solid var(--border);white-space:nowrap}.risk-info{border-color:var(--risk-info);color:var(--risk-info)}.risk-warn{border-color:var(--risk-warn);color:var(--risk-warn)}.risk-high{border-color:var(--risk-high);color:var(--risk-high);background:#f851491f}.action-head .id{color:var(--fg-muted);font-size:.75rem}.action-head .time{margin-left:auto;color:var(--fg-muted)}.action .row{margin:.25rem 0}.action details{margin:.5rem 0}.action details summary{cursor:pointer;color:var(--fg-muted)}.action pre{background:#0000004d;padding:.75rem;border-radius:4px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;font-size:.8rem;margin:.5rem 0}.action .blocks{margin-top:.5rem}.block{margin:.5rem 0;padding:.5rem .75rem;border-left:2px solid var(--border)}.block.text{white-space:pre-wrap}.block.tool_use{border-left-color:var(--tool)}.block.tool_use .tool-name{color:var(--tool);font-weight:600;display:block;margin-bottom:.25rem}.block.thinking{color:var(--thinking);font-style:italic;white-space:pre-wrap;border-left-color:var(--thinking)}.drift-banner{margin:0 0 1.25rem;padding:.75rem 1rem;border:1px solid var(--risk-warn);border-radius:6px;background:#d2992214;color:var(--fg);font-size:.85rem}.drift-banner strong{color:var(--risk-warn)}.drift-banner ul{margin:.4rem 0;padding-left:1.2rem}.drift-banner li{margin:.15rem 0}.drift-banner .path{color:var(--fg-muted);font-size:.8rem}.empty,.loading,.error{padding:2rem;text-align:center;color:var(--fg-muted)}.error{color:var(--err)}.empty .hint{font-size:.85rem;margin-top:1rem}.err{color:var(--err)}.share-app{max-width:none;padding:1.25rem 2rem}.share-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem;font:.85rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.share-back{color:var(--fg-muted);text-decoration:none}.share-back:hover{color:var(--fg)}.share-actions{display:flex;gap:.6rem}.share-btn{background:transparent;border:1px solid var(--border);color:var(--fg);padding:.5rem 1rem;border-radius:6px;font:inherit;cursor:pointer;transition:border-color .15s,color .15s}.share-btn:hover{border-color:var(--fg)}.share-btn.primary{background:#d97706;border-color:#d97706;color:#fff}.share-btn.primary:hover{background:#b45309;border-color:#b45309}.share-stage{position:relative;overflow:hidden}.share-card-wrap{display:inline-block;box-shadow:0 8px 40px #00000080}.share-hint{margin-top:1.25rem;font:.8rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--fg-muted)}.share-hint code{background:#ffffff0d;padding:.1rem .4rem;border-radius:3px;font-size:.85rem}.share-toast{position:fixed;bottom:2rem;left:50%;transform:translate(-50%);background:var(--fg);color:var(--bg);padding:.65rem 1.25rem;border-radius:6px;font:.85rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;box-shadow:0 4px 20px #0006;z-index:100}:root{--accent-amber: #d97706}.nav{display:flex;align-items:center;gap:2rem;padding-bottom:.75rem;margin-bottom:1.5rem;border-bottom:1px solid var(--border);font:.85rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.nav-brand{display:flex;align-items:center;gap:.5rem;font-weight:600;font-size:1rem;color:var(--fg)}.nav-dot{width:10px;height:10px;border-radius:50%;background:var(--accent-amber);display:inline-block}.nav-links{display:flex;gap:1.25rem}.nav-links a{color:var(--fg-muted);text-decoration:none;padding:.25rem 0;border-bottom:2px solid transparent;transition:color .15s,border-color .15s}.nav-links a:hover{color:var(--fg)}.nav-links a.active{color:var(--fg);border-bottom-color:var(--accent-amber)}.nav-meta{margin-left:auto;display:flex;align-items:center;gap:1rem;color:var(--fg-muted)}.nav-drift{color:var(--risk-warn)}.nav-health.ok:before{content:"●";color:var(--mcp);margin-right:.4em}.nav-health.fail{color:var(--err)}.nav-health.fail:before{content:"●";margin-right:.4em}.home{display:flex;flex-direction:column;gap:1.25rem}.module{border:1px solid var(--border);border-radius:8px;padding:1.25rem 1.5rem;background:#ffffff04}.module-row{display:flex;align-items:center;justify-content:space-between;gap:1.5rem}.module-title{font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.module-summary{color:var(--fg-muted);font-size:.9rem}.module-link{color:var(--fg-muted);text-decoration:none;font-size:.85rem}.module-link:hover{color:var(--accent-amber)}.spend-module .hero-stat{display:flex;flex-direction:column;gap:.25rem}.spend-module .hero-stat-label{font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.spend-module .hero-stat-value{font-size:2.6rem;font-weight:700;letter-spacing:-.02em;color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.sparkline{display:flex;align-items:flex-end;gap:2px;height:64px;flex:1;max-width:480px}.sparkline-bar{flex:1;background:var(--border);border-radius:1px;min-height:2px;transition:background .15s}.sparkline-bar:hover,.sparkline-bar.current{background:var(--accent-amber)}.sub-stats{margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--border);display:flex;gap:3rem;justify-content:flex-start}.sub-stat-label{font-size:.75rem;color:var(--fg-muted);letter-spacing:.05em;text-transform:uppercase;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;margin-bottom:.25rem}.sub-stat-value{font-size:1.1rem;color:var(--fg);font-weight:500;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-row{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem}@media(max-width:720px){.card-row{grid-template-columns:1fr}}.card-module{padding:1rem 1.25rem .75rem}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.card-title{font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-meta{color:var(--accent-amber);font-weight:600;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-empty{color:var(--fg-muted);font-size:.85rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-body{display:flex;flex-direction:column;gap:.3rem}.card-body-empty{padding:1rem 0;color:var(--fg-muted);font-size:.85rem;text-align:left;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-row-link{display:grid;grid-template-columns:80px 1fr auto;align-items:baseline;gap:.75rem;padding:.4rem 0;color:var(--fg);text-decoration:none;border-bottom:1px dashed transparent}.card-row-link:hover{border-bottom-color:var(--border)}.cost{font-weight:600;text-align:right}.cost-accent{color:var(--accent-amber)}.cost-warn{color:#f97316}.card-row-desc{color:var(--fg);font-size:.85rem}.card-row-meta{color:var(--fg-muted);font-size:.75rem}.card-footer{padding-top:.6rem;margin-top:.4rem;border-top:1px solid var(--border)}.card-footer a{color:var(--fg-muted);text-decoration:none;font-size:.8rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-footer a:hover{color:var(--accent-amber)}.agent-bars{margin-top:1rem;display:flex;flex-direction:column;gap:.5rem}.agent-bar{display:grid;grid-template-columns:130px 1fr 160px;align-items:center;gap:1rem}.agent-bar-label{font-weight:500}.agent-bar-track{height:8px;background:var(--border);border-radius:4px;overflow:hidden}.agent-bar-fill{height:100%;background:var(--accent-amber);border-radius:4px;transition:width .4s}.agent-bar-stat{color:var(--fg-muted);font-size:.85rem;text-align:right;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.activity{margin-top:.75rem;display:flex;flex-direction:column}.activity-row{display:grid;grid-template-columns:50px 130px 1fr 80px 90px;align-items:baseline;gap:1rem;padding:.5rem 0;border-bottom:1px solid var(--border);color:var(--fg);text-decoration:none;font-size:.9rem}.activity-row:hover{background:#ffffff05}.activity-time{color:var(--fg-muted);font-size:.85rem}.activity-agent{color:var(--fg)}.activity-goal{color:var(--fg-muted);font-size:.85rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-dur{color:var(--fg-muted);font-size:.8rem;text-align:right}.activity-cost{color:var(--accent-amber);font-weight:500;text-align:right}.run-header{display:flex;align-items:baseline;gap:1rem;flex-wrap:wrap;margin-bottom:1rem}.run-header h2{margin:0}.run-header-meta{color:var(--fg-muted);font-size:.85rem;display:flex;gap:.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.cost-breakdown{border:1px solid var(--border);border-radius:8px;padding:1rem 1.25rem;margin:1rem 0;background:#ffffff04}.cost-breakdown-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.6rem}.cost-breakdown-title{font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.cost-breakdown-total{font-size:1.4rem;font-weight:700;color:var(--accent-amber);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.cost-breakdown-rows{display:flex;flex-direction:column;gap:.35rem}.cost-breakdown-row{display:grid;grid-template-columns:100px 40px 1fr 70px 40px;align-items:center;gap:.6rem;font-size:.85rem}.cost-breakdown-count{color:var(--fg-muted);font-size:.8rem}.cost-breakdown-bar-track{height:6px;background:var(--border);border-radius:3px;overflow:hidden}.cost-breakdown-bar-fill{height:100%;background:var(--accent-amber);border-radius:3px}.cost-breakdown-cost{text-align:right;font-weight:500;color:var(--fg)}.cost-breakdown-pct{text-align:right;color:var(--fg-muted);font-size:.8rem}.action-cost{margin-left:auto;color:var(--fg-muted);font-weight:500}.action-cost-top{color:var(--accent-amber)}.action-cost-tag{margin-left:.5rem;font-size:.7rem;color:var(--accent-amber);letter-spacing:.04em}.action.action-top-cost{border-left:2px solid var(--accent-amber);padding-left:.75rem}.helptip{display:inline-flex;align-items:center;position:relative;cursor:help;margin-left:.4em;vertical-align:middle}.helptip-icon{width:14px;height:14px;border:1px solid var(--fg-muted);border-radius:50%;color:var(--fg-muted);display:inline-flex;align-items:center;justify-content:center;font:600 9px/1 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;text-transform:none;letter-spacing:0;transition:color .15s,border-color .15s}.helptip:hover .helptip-icon{color:var(--accent-amber);border-color:var(--accent-amber)}.helptip-content{position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%);width:280px;background:#1a1f26;border:1px solid var(--border);padding:.7rem .85rem;border-radius:6px;font:.78rem/1.55 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--fg);text-transform:none;letter-spacing:0;opacity:0;visibility:hidden;transition:opacity .15s,visibility .15s;z-index:20;box-shadow:0 6px 24px #00000080;pointer-events:none}.helptip-content code{background:#ffffff0f;padding:.05rem .3rem;border-radius:3px;font-size:.9em}.helptip:hover .helptip-content{opacity:1;visibility:visible}.sparkline-with-label{display:flex;flex-direction:column;align-items:stretch;gap:.4rem;flex:1;max-width:480px}.sparkline-label{font:.7rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--fg-muted);letter-spacing:.04em;display:flex;align-items:center;justify-content:flex-end}:root{--thomas-gold: #f5b500;--thomas-gold-dim: rgba(245, 181, 0, .18);--thomas-blue-1: #0d1530;--thomas-blue-2: #14204a;--thomas-blue-3: #1c2b65;--thomas-text: #e9eaf5;--thomas-text-dim: rgba(233, 234, 245, .6)}.thomas-hero{background:linear-gradient(135deg,var(--thomas-blue-1) 0%,var(--thomas-blue-2) 60%,var(--thomas-blue-3) 100%);color:var(--thomas-text);border-radius:12px;padding:1.75rem 2rem 1.5rem;position:relative;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.thomas-hero:after{content:"";position:absolute;width:380px;height:380px;right:-120px;top:-120px;border-radius:50%;background:radial-gradient(circle,#f5b5001f,#f5b50000 70%);pointer-events:none}.thomas-hero-eyebrow{display:flex;align-items:center;gap:.6rem;font-size:.7rem;letter-spacing:.14em;text-transform:uppercase;color:var(--thomas-text-dim);margin-bottom:.6rem}.thomas-hero-eyebrow .helptip-icon{border-color:var(--thomas-text-dim);color:var(--thomas-text-dim)}.thomas-hero-eyebrow .helptip:hover .helptip-icon{color:var(--thomas-gold);border-color:var(--thomas-gold)}.period-tabs{margin-left:auto;display:flex;gap:.3rem}.period-tab{background:transparent;border:1px solid rgba(255,255,255,.1);color:var(--thomas-text-dim);padding:.25rem .7rem;font:inherit;font-size:.75rem;letter-spacing:.04em;cursor:pointer;border-radius:4px;transition:all .15s}.period-tab:hover{color:var(--thomas-text);border-color:#ffffff4d}.period-tab.active{color:var(--thomas-gold);border-color:var(--thomas-gold-dim);background:#f5b50014}.thomas-hero-main{display:flex;flex-direction:column;gap:.5rem;margin-bottom:.6rem}.thomas-numbers{display:flex;align-items:baseline;gap:1.5rem}.thomas-number-block{display:flex;flex-direction:column;gap:.1rem}.thomas-number{font-size:5.5rem;font-weight:700;line-height:1;letter-spacing:-.04em;color:var(--thomas-gold)}.thomas-number-verified{font-size:3rem;font-weight:600;line-height:1;letter-spacing:-.03em;color:#e9eaf5d9}.thomas-number-label{font-size:.7rem;letter-spacing:.14em;text-transform:uppercase;color:var(--thomas-text-dim);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;margin-top:.2rem}.thomas-number-sep{font-size:3rem;font-weight:300;color:#e9eaf54d;align-self:center;margin-bottom:1.2rem}.thomas-band{color:var(--thomas-text-dim);font-size:.95rem;font-style:italic}.thomas-gap{font-style:normal}.thomas-gap-pct{font-style:normal;font-weight:600}.thomas-gap-pct.gap-good{color:#34d399}.thomas-gap-pct.gap-warn{color:var(--thomas-gold)}.thomas-gap-pct.gap-bad{color:#f97316}.thomas-summary{display:flex;flex-direction:column;gap:.25rem;margin-bottom:1rem}.thomas-summary strong{color:var(--thomas-text);font-weight:600}.thomas-summary .dim{color:var(--thomas-text-dim);font-size:.85rem}.thomas-submetrics{display:flex;gap:2.5rem;margin-bottom:1.25rem}.submetric-label{font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:var(--thomas-text-dim);margin-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;display:flex;align-items:center}.submetric-value{font-size:1.15rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--thomas-text)}.thomas-actions{display:flex;gap:1.25rem;align-items:center}.thomas-share-btn{background:var(--thomas-gold);color:var(--thomas-blue-1);font-weight:600;padding:.55rem 1.1rem;border-radius:6px;text-decoration:none;font-size:.9rem;transition:background .15s,transform .15s}.thomas-share-btn:hover{background:#ffc91a;transform:translateY(-1px)}.thomas-spec-link{color:var(--thomas-text-dim);text-decoration:none;font-size:.85rem}.thomas-spec-link:hover{color:var(--thomas-gold)}.outcomes-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(135px,1fr));gap:.7rem;margin-top:.6rem}.outcome-tile{border:1px solid var(--border);border-radius:6px;padding:.7rem .9rem;background:#ffffff05}.outcome-tile-icon{font-size:1rem;opacity:.7;margin-bottom:.25rem}.outcome-tile-count{font-size:1.6rem;font-weight:700;color:var(--thomas-gold);line-height:1;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;letter-spacing:-.02em}.outcome-tile-label{font-size:.75rem;color:var(--fg-muted);margin-top:.3rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.agent-thomas-rows{display:flex;flex-direction:column;gap:.65rem;margin-top:.6rem}.agent-thomas-row{display:grid;grid-template-columns:140px 1fr 230px;align-items:center;gap:1rem}.agent-thomas-name{font-weight:500;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;display:flex;flex-direction:column;gap:.15rem}.agent-thomas-type{font-size:.65rem;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:400}.agent-thomas-bar-track{height:10px;background:#ffffff0d;border-radius:5px;overflow:hidden;position:relative}.agent-thomas-bar-fill{height:100%;background:#f5b50059;border-radius:5px;transition:width .4s;position:absolute;left:0;top:0}.agent-thomas-bar-verified{height:100%;background:var(--thomas-gold);border-radius:5px;transition:width .4s;position:absolute;left:0;top:0}.agent-thomas-stat{display:flex;flex-direction:column;align-items:flex-end;text-align:right;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.agent-thomas-t{color:var(--thomas-gold);font-weight:600}.agent-thomas-t-verified{color:#e9eaf5a6;font-weight:400;font-size:.85em}.agent-thomas-sub{font-size:.78rem;color:var(--fg-muted);margin-top:.15rem}.tools-ranking .module-title{display:flex;align-items:center;gap:.5rem}.tools-rows{display:flex;flex-direction:column;gap:.4rem;margin-top:.5rem}.tools-row{display:grid;grid-template-columns:1fr 2fr 3rem 4rem 1.6fr;align-items:center;gap:.75rem;font-size:13px}.tools-name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tools-bar-track{height:8px;background:#ffffff0d;border-radius:4px;overflow:hidden;position:relative}.tools-bar-fill{height:100%;background:#f5b50080;border-radius:4px;position:absolute;left:0;top:0;transition:width .4s}.tools-bar-error{height:100%;background:#dc4646b3;border-radius:4px;position:absolute;left:0;top:0;transition:width .4s}.tools-count{text-align:right;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--fg-muted)}.tools-cost{text-align:right;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--thomas-gold);font-size:12px}.tools-agents{color:var(--fg-muted);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-thomas-row{display:grid;grid-template-columns:1.6fr 3fr 1.5fr;grid-template-rows:auto auto;align-items:center;gap:.4rem .8rem}.agent-subagents{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:.35rem;padding-left:.2rem;padding-top:.15rem}.agent-subagent-chip{display:inline-flex;align-items:baseline;gap:.35rem;padding:.15rem .5rem;border-radius:9999px;background:#f5b50014;border:1px solid rgba(245,181,0,.18);font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.agent-subagent-name{color:var(--fg)}.agent-subagent-count{color:var(--fg-muted)}.full-messages{margin-top:1rem;display:flex;flex-direction:column;gap:.5rem}.full-messages-head{display:flex;align-items:baseline;gap:.5rem;margin-bottom:.3rem}.full-messages-title{font-size:13px;font-weight:600;color:var(--fg)}.full-messages-count{background:#ffffff14;color:var(--fg-muted);font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;padding:.1rem .5rem;border-radius:9999px}.full-messages-list{display:flex;flex-direction:column;gap:.75rem}.msg-card{border:1px solid rgba(255,255,255,.08);border-radius:6px;background:#ffffff06;overflow:hidden}.msg-card-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.5rem .75rem;background:#ffffff08;border-bottom:1px solid rgba(255,255,255,.06);font-size:12px;flex-wrap:wrap}.msg-card-head-left{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;min-width:0}.msg-card-num{color:var(--fg-muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.msg-role{font-size:11px;font-weight:600;padding:.1rem .55rem;border-radius:9999px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:lowercase;letter-spacing:.02em;border:1px solid}.msg-role-system{background:#a855f71f;color:#d8b4fe;border-color:#d8b4fe66}.msg-role-user{background:#3b82f61f;color:#93c5fd;border-color:#93c5fd66}.msg-role-assistant{background:#10b9811f;color:#6ee7b7;border-color:#6ee7b766}.msg-role-tool{background:#f59e0b1f;color:#fcd34d;border-color:#fcd34d66}.msg-role-developer,.msg-role-function{background:#6366f11f;color:#a5b4fc;border-color:#a5b4fc66}.msg-role-unknown{background:#a0a0a01f;color:#d2d2d2d9;border-color:#a0a0a059}.msg-meta{font-size:11px;color:var(--fg-muted);font-family:-apple-system,BlinkMacSystemFont,sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.msg-meta code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--fg);background:transparent;padding:0}.msg-expand-btn{background:#ffffff0d;border:1px solid rgba(255,255,255,.1);color:var(--fg);font-size:11px;padding:.15rem .55rem;border-radius:3px;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,sans-serif;white-space:nowrap;transition:background .12s,border-color .12s}.msg-expand-btn:hover{background:#f5b5001f;border-color:#f5b50059}.msg-card-body{margin:0;padding:.65rem .85rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;line-height:1.55;color:#e6edf3;white-space:pre-wrap;word-break:break-word;max-height:28rem;overflow:auto;background:transparent}.msg-card-toolcalls{display:flex;flex-direction:column;gap:.4rem;padding:.5rem .75rem .65rem;border-top:1px solid rgba(255,255,255,.06);background:#0000001f}.toolcall-card{border:1px solid rgba(255,255,255,.08);border-radius:5px;background:#ffffff06;overflow:hidden}.toolcall-card-head{display:flex;align-items:center;gap:.5rem;padding:.35rem .6rem;border-bottom:1px solid rgba(255,255,255,.06);font-size:11.5px;flex-wrap:wrap}.toolcall-badge{font-size:10px;font-weight:600;padding:.08rem .5rem;border-radius:9999px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:lowercase;letter-spacing:.04em;background:#f59e0b1f;color:#fcd34d;border:1px solid rgba(252,211,77,.4)}.toolcall-name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:var(--fg);background:transparent;padding:0}.toolcall-id{font-size:11px;color:var(--fg-muted)}.toolcall-id code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--fg);background:transparent;padding:0}.toolcall-card-body{margin:0;padding:.5rem .75rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;line-height:1.55;color:#e6edf3;white-space:pre-wrap;word-break:break-word;max-height:16rem;overflow:auto;background:#0000002e}.args-list{margin:0;padding:.45rem .75rem .5rem;display:grid;grid-template-columns:max-content 1fr;gap:.15rem .85rem;background:#00000029;max-height:18rem;overflow:auto;align-content:start}.args-list-result{max-height:32rem;background:transparent;padding:.65rem .85rem}.msg-card-result{background:#0000001f}.args-row{display:contents}.args-key{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;color:#fcd34d;font-weight:500;padding-top:.05rem;white-space:nowrap}.args-key-nested{color:#fcd34db3}.args-val{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.55;color:#e6edf3;word-break:break-word;white-space:pre-wrap;min-width:0}.args-string{color:#a5d6ff}.args-num{color:#79c0ff}.args-bool{color:#ffa657;font-weight:500}.args-dim{color:var(--fg-muted)}.args-array{color:#e6edf3}.args-array-item{color:#a5d6ff}.args-array-item:not(:last-child):after{content:", ";color:var(--fg-muted)}.args-nested{display:grid;grid-template-columns:max-content 1fr;gap:.1rem .65rem;padding:.25rem 0 .1rem .6rem;border-left:1px dashed rgba(255,255,255,.1);margin:.15rem 0}.conversation{display:flex;flex-direction:column;gap:.6rem;margin-top:.6rem}.turn{border-left:2px solid rgba(255,255,255,.08);padding:.5rem .85rem .6rem;margin-left:.25rem}.turn-user{border-left-color:#508cdc99;background:#508cdc06;border-radius:0 4px 4px 0}.turn-assistant{border-left-color:#f5b500b3;background:#f5b50005;border-radius:0 4px 4px 0}.turn-mcp{border-left-color:#b464dc8c;background:#b464dc06;border-radius:0 4px 4px 0;padding:.35rem .85rem .4rem}.turn-role{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem;font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--fg-muted);font-weight:600;margin-bottom:.35rem}.turn-assistant .turn-role>span:first-child{color:#f5b500f2}.turn-user .turn-role>span:first-child{color:#78aaf0f2}.turn-mcp .turn-role{color:#c88cebf2}.turn-stamp{font-size:10px;letter-spacing:normal;text-transform:none;font-weight:400;color:var(--fg-muted);display:inline-flex;align-items:baseline;gap:.25rem}.turn-stamp code{font-size:10px;background:transparent;padding:0;color:var(--fg)}.turn-stamp .dim{color:#b4b4b480}.turn-stamp .err{color:#ef4444}.turn-risks{display:inline-flex;gap:.35rem;flex-wrap:wrap;margin-left:auto}.turn-blocks{display:flex;flex-direction:column;gap:.5rem}.block-text{font-size:14px;line-height:1.6;white-space:pre-wrap;word-break:break-word;color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.block-text+.block-text{margin-top:.25rem}.block-thinking{font-size:12px;color:var(--fg-muted)}.block-thinking summary{cursor:pointer;font-style:italic;color:var(--fg-muted)}.block-thinking-text{margin-top:.35rem;padding:.5rem .7rem;border-left:2px solid rgba(160,160,160,.3);white-space:pre-wrap;background:#ffffff05;font-style:italic;font-size:12.5px}.tool-card{background:#f5b5000d;border:1px solid rgba(245,181,0,.22);border-radius:5px;overflow:hidden}.tool-card-err{border-color:#ef444466}.tool-card-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:.45rem;font-size:13.5px;padding:.45rem .65rem;border-bottom:1px dashed rgba(245,181,0,.18)}.tool-card-icon{color:#f5b500f2;font-weight:700;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.tool-card-name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:var(--fg);background:#f5b5001f;padding:0 .4rem;border-radius:3px;font-size:12px}.tool-card-headline{color:var(--fg-muted);font-size:13px;overflow:hidden;text-overflow:ellipsis;word-break:break-word;flex:1}.tool-card-headline code{font-size:12px;background:transparent;padding:0;color:var(--fg)}.tool-card-headline .dim{color:#b4b4b48c}.tool-card-headline .cmd{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--fg);font-size:12px}.tool-card-body{font-size:12px;padding:.45rem .65rem .5rem;border-bottom:1px dashed rgba(245,181,0,.12)}.tool-card-body:last-child{border-bottom:none}.tool-diff{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;border-radius:3px;overflow:hidden}.tool-diff .diff-removed{background:#ef444414;border-left:2px solid rgba(239,68,68,.4);padding:.3rem .55rem;white-space:pre-wrap;color:#ef6464f2}.tool-diff .diff-added{background:#22c55e14;border-left:2px solid rgba(34,197,94,.4);padding:.3rem .55rem;white-space:pre-wrap;color:#50c878f2;margin-top:2px}.tool-note{font-size:12px;color:var(--fg-muted);white-space:pre-wrap;padding-left:.6rem;border-left:2px solid rgba(160,160,160,.2)}.todo-list{list-style:none;padding:0;margin:0;font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.todo-list li{padding:1px 0}.todo-list .todo-completed{color:#b4b4b4b3;text-decoration:line-through}.todo-list .todo-in_progress{color:#f5b500f2}.tool-args{display:flex;flex-wrap:wrap;gap:.35rem .85rem;margin:0;padding:0;font-size:11.5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.tool-arg-key{color:var(--fg-muted)}.tool-arg-val{color:var(--fg)}.tool-arg.dim{color:#b4b4b48c}.tool-result{padding:.45rem .65rem .5rem;background:#ffffff05;font-size:12.5px}.tool-result-ok{border-left:2px solid rgba(34,197,94,.5)}.tool-result-err{border-left:2px solid rgba(239,68,68,.6);background:#ef44440a}.tool-result-head{display:flex;align-items:baseline;gap:.45rem;margin-bottom:.2rem}.tool-result-icon{font-weight:700;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.tool-result-ok .tool-result-icon{color:#50c878f2}.tool-result-err .tool-result-icon{color:#ef6464f2}.tool-result-summary{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--fg);word-break:break-word}.tool-result-summary.dim{color:var(--fg-muted)}.tool-result-output{margin:.25rem 0 0;padding:.35rem .5rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;white-space:pre-wrap;word-break:break-word;max-height:16rem;overflow:auto;background:#0000002e;border-radius:3px;color:var(--fg)}.tool-result-error{margin-top:.3rem;font-size:11px;color:#ef6464f2;white-space:pre-wrap}.tool-result-url{margin:.2rem 0 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:#78aaf0d9;word-break:break-all}.tool-result-kv{display:flex;flex-wrap:wrap;gap:.35rem .85rem;margin:.25rem 0 0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px}.mcp-compact .mcp-compact-line{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--fg)}.mcp-compact .mcp-method{color:var(--fg);background:#b464dc1f;padding:0 .35rem;border-radius:3px}.mcp-compact .dim{color:#b4b4b48c}.run-list-wrap{display:flex;flex-direction:column;gap:.6rem}.pager{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:.5rem;font-size:12px;color:var(--fg-muted);padding:.5rem .25rem;border-top:1px solid rgba(255,255,255,.06)}.pager-count{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.pager-controls{display:flex;align-items:center;gap:.35rem}.pager-btn{background:#ffffff0a;border:1px solid rgba(255,255,255,.08);color:var(--fg);padding:.25rem .6rem;border-radius:3px;font-size:12px;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,sans-serif;transition:background .12s}.pager-btn:hover:not(:disabled){background:#f5b5001f;border-color:#f5b50059}.pager-btn:disabled{opacity:.35;cursor:not-allowed}.pager-page{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;padding:0 .4rem;color:var(--fg)}.msg-card-prompt{padding:.55rem .85rem .7rem}.prompt-structured{display:flex;flex-direction:column;gap:.5rem}.prompt-lede .prompt-section-body{background:#a855f70f;border-left:2px solid rgba(216,180,254,.45);padding:.45rem .7rem;border-radius:0 3px 3px 0;font-style:normal}.prompt-section{border:1px solid rgba(255,255,255,.06);background:#ffffff05;border-radius:5px;overflow:hidden}.prompt-section-title{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;padding:.35rem .7rem;background:#a855f70f;border-bottom:1px solid rgba(216,180,254,.18);font-size:12.5px;font-weight:600;color:#e6d6fa}.prompt-section-marker{color:#d8b4feb3;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:700;font-size:12px}.prompt-section-count{background:#d8b4fe24;border:1px solid rgba(216,180,254,.3);color:#d8b4fe;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;padding:.02rem .45rem;border-radius:9999px;font-weight:600}.prompt-section-expand{margin-left:auto}.prompt-section-body{padding:.55rem .85rem .65rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.55;white-space:pre-wrap;word-break:break-word;color:#d4dae3;max-height:22rem;overflow:auto}.prompt-skills .prompt-section-title{background:#f59e0b0f;border-bottom-color:#fcd34d38;color:#fde68a}.prompt-skills .prompt-section-marker{color:#fcd34d}.prompt-skills .prompt-section-count{background:#f59e0b1f;border-color:#fcd34d66;color:#fcd34d}.prompt-skills-groups{display:flex;flex-direction:column;gap:.5rem;padding:.55rem .7rem .7rem}.prompt-skills-group-name{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:#fcd34db3;margin-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.prompt-skills-list{display:flex;flex-wrap:wrap;gap:.35rem;padding:.55rem .7rem .7rem}.prompt-skills-group .prompt-skills-list{padding:0}.skill-chip{display:inline-flex;align-items:baseline;gap:.4rem;padding:.15rem .55rem;border-radius:9999px;background:#f59e0b14;border:1px solid rgba(252,211,77,.28);font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;max-width:32rem}.skill-chip-name{color:#fcd34d;font-weight:600}.skill-chip-desc{color:var(--fg-muted);font-family:-apple-system,BlinkMacSystemFont,sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:26rem}.prompt-skills-more{align-self:center;font-size:11px;color:var(--fg-muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.prompt-reminder .prompt-section-title{background:#fca5a50f;border-bottom-color:#fca5a538;color:#fecaca}.prompt-reminder .prompt-section-marker{color:#fca5a5}.prompt-reminder-body{background:#fca5a505}.models-page{display:flex;flex-direction:column;gap:1.25rem}.models-head{display:flex;flex-direction:column;gap:.35rem}.models-head h2{margin:0;font-size:1.2rem;font-weight:600;letter-spacing:-.005em}.models-head .dim{font-size:.85rem;color:var(--fg-muted)}.models-head a{color:var(--accent);text-decoration:none}.models-head a:hover{text-decoration:underline}.models-table{width:100%;border-collapse:collapse;font-size:13px}.models-table th,.models-table td{text-align:left;padding:.4rem .55rem;border-bottom:1px solid var(--border);vertical-align:middle}.models-table th{font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-muted);font-weight:500}.models-table th.num,.models-table td.num{text-align:right;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-variant-numeric:tabular-nums;white-space:nowrap}.models-table .dim{color:var(--fg-muted)}.models-table td code{background:transparent;color:var(--fg);font-size:12px;padding:0}.models-table tr.is-editing{background:#f5b5000a}.models-table tr.edit-row td{border-bottom:1px solid var(--border);background:#ffffff05;padding:.65rem .85rem}.models-table .row-actions{white-space:nowrap;text-align:right}.models-table .row-actions>*+*{margin-left:.35rem}.btn-small{background:#ffffff0a;border:1px solid rgba(255,255,255,.1);color:var(--fg);padding:.2rem .6rem;border-radius:3px;font-size:11px;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,sans-serif}.btn-small:hover:not(:disabled){background:#f5b5001f;border-color:#f5b50059}.btn-small:disabled{opacity:.4;cursor:not-allowed}.btn-small.btn-primary{background:#f5b50029;border-color:#f5b50080;color:#fcd34d}.btn-small.btn-primary:hover:not(:disabled){background:#f5b5003d}.btn-small.btn-danger{border-color:#ef444466;color:#ef6464f2}.btn-small.btn-danger:hover:not(:disabled){background:#ef44441f}.badge{font-size:10px;font-weight:600;padding:.1rem .5rem;border-radius:9999px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:lowercase;letter-spacing:.02em;border:1px solid}.badge-custom{background:#f5b5001f;color:#fcd34d;border-color:#fcd34d66}.badge-resolved{background:#10b9811a;color:#6ee7b7;border-color:#6ee7b759}.badge-missing{background:#ef444414;color:#ef6464f2;border-color:#ef444459}.catalog-filters{display:flex;align-items:center;gap:.6rem;padding:.35rem 0 .5rem;font-size:12px}.catalog-search{flex:1;max-width:22rem;background:#ffffff0d;border:1px solid var(--border);color:var(--fg);padding:.3rem .55rem;border-radius:3px;font:inherit}.catalog-filters select{background:#ffffff0d;border:1px solid var(--border);color:var(--fg);padding:.3rem .55rem;border-radius:3px;font:inherit}.catalog-filters .dim{color:var(--fg-muted);margin-left:auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.add-card{background:#ffffff05;border:1px solid var(--border);border-radius:5px;padding:.65rem .85rem;margin-bottom:.6rem}.pricing-editor{display:flex;flex-direction:column;gap:.55rem}.pricing-editor-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));gap:.5rem .85rem}.pricing-editor label{display:flex;flex-direction:column;gap:.2rem;font-size:11px;color:var(--fg-muted)}.pricing-editor label>span{font-size:10px;letter-spacing:.08em;text-transform:uppercase}.pricing-editor input,.pricing-editor select{background:#ffffff0d;border:1px solid var(--border);color:var(--fg);padding:.3rem .5rem;border-radius:3px;font:inherit;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.pricing-editor input:disabled,.pricing-editor select:disabled{opacity:.55}.pricing-editor-err{color:#ef6464f2;font-size:12px}.pricing-editor-actions{display:flex;justify-content:flex-end;gap:.4rem}.model-cell{max-width:22rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prompt-tagged .prompt-section-title{background:#6366f114;border-bottom-color:#a5b4fc38;color:#c7d2fe}.prompt-tagged .prompt-section-marker{color:#a5b4fc;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.prompt-tagged-body{background:#6366f105}.thomas-magnitude-block{display:flex;flex-direction:column;align-items:flex-start;gap:.15rem}.thomas-magnitude{font-size:2.6rem;font-weight:700;line-height:1;color:#d4dae3;letter-spacing:-.02em;font-variant-numeric:tabular-nums}:root{--tier-personal: #58a6ff;--tier-solo: #d97706;--tier-team: #a371f7;--pillar-locked-fg: #6b7280;--pillar-locked-bg: rgba(255, 255, 255, .015)}.nav{display:flex;flex-direction:column;gap:0;align-items:stretch;padding-bottom:0;margin-bottom:1.5rem;border-bottom:1px solid var(--border)}.nav-row{display:flex;align-items:center;gap:1.5rem}.nav-row-main{padding:.5rem 0 .7rem}.nav-row-sub{padding:.45rem 0 .6rem;border-top:1px solid rgba(255,255,255,.04);font-size:.78rem}.nav-pillars{display:flex;align-items:stretch;gap:.25rem}.nav-pillar{display:flex;flex-direction:column;gap:.1rem;padding:.4rem .85rem;border-radius:6px;text-decoration:none;color:var(--fg);border:1px solid transparent;transition:background .15s,border-color .15s,color .15s;position:relative}.nav-pillar-label{font-size:.92rem;font-weight:600;letter-spacing:-.005em;display:inline-flex;align-items:center;gap:.35em}.nav-pillar-sub{font-size:.66rem;text-transform:uppercase;letter-spacing:.07em;color:var(--fg-muted)}.nav-pillar:hover{background:#ffffff08;border-color:var(--border)}.nav-pillar.active{background:#d9770612;border-color:#d9770652}.nav-pillar.active .nav-pillar-sub{color:var(--accent-amber)}.nav-pillar-locked,.nav-pillar-locked .nav-pillar-sub{color:var(--pillar-locked-fg)}.nav-pillar-locked.active{background:#6366f10f;border-color:#6366f14d;color:var(--fg)}.nav-pillar-locked.active .nav-pillar-sub{color:#818cf8}.nav-pillar-lock{font-size:.7em;opacity:.7}.nav-sub{display:flex;gap:1.25rem;padding-left:.25rem}.nav-sub a{color:var(--fg-muted);text-decoration:none;padding:.2rem 0;border-bottom:2px solid transparent;transition:color .15s,border-color .15s}.nav-sub a:hover{color:var(--fg)}.nav-sub a.active{color:var(--fg);border-bottom-color:var(--accent-amber)}.nav-tier-badge{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .7rem;border-radius:999px;border:1px solid rgba(217,119,6,.35);background:#d9770614;color:var(--fg);text-decoration:none;font-size:.78rem;font-weight:500;transition:background .15s,border-color .15s}.nav-tier-badge:hover,.nav-tier-badge.active{background:#d9770629;border-color:var(--accent-amber)}.nav-tier-dot{width:7px;height:7px;border-radius:50%;background:var(--accent-amber);display:inline-block}.nav-tier-text{font-weight:600}.nav-tier-sub{color:var(--fg-muted);font-size:.7rem;letter-spacing:.04em;text-transform:uppercase;border-left:1px solid rgba(217,119,6,.3);padding-left:.4rem}.pillar-locked{display:flex;flex-direction:column;gap:2rem;font:.9rem/1.55 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.pillar-hero{display:grid;grid-template-columns:1fr 320px;gap:2rem;align-items:stretch;padding:1.75rem 2rem;border-radius:12px;background:linear-gradient(135deg,#6366f10f,#d977060a);border:1px solid rgba(99,102,241,.18)}.pillar-hero-left h1{margin:.2rem 0 .6rem;font-size:2.2rem;font-weight:700;letter-spacing:-.025em;color:var(--fg)}.pillar-kicker{font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:#818cf8}.pillar-lock{font-size:.85em;margin-right:.25em}.pillar-tagline{margin:0;font-size:1.05rem;line-height:1.5;color:#c9d1d9;max-width:56ch}.pillar-unlock-card{display:flex;flex-direction:column;gap:.4rem;padding:1.1rem 1.25rem;border-radius:10px;background:#00000040;border:1px solid rgba(217,119,6,.3)}.pillar-unlock-eyebrow{font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;color:var(--fg-muted)}.pillar-unlock-tier{font-size:1.2rem;font-weight:700;color:var(--fg);letter-spacing:-.01em}.pillar-unlock-price{font-size:.92rem;color:var(--accent-amber);margin-bottom:.5rem}.pillar-cta-primary{display:block;padding:.55rem .9rem;background:var(--accent-amber);color:#fff;border-radius:6px;text-align:center;text-decoration:none;font-weight:600;transition:background .15s}.pillar-cta-primary:hover{background:#b45309}.pillar-cta-secondary{display:block;padding:.45rem .9rem;border:1px solid var(--border);border-radius:6px;text-align:center;text-decoration:none;color:var(--fg);font-size:.85rem;transition:border-color .15s}.pillar-cta-secondary:hover{border-color:var(--fg)}.pillar-section{display:flex;flex-direction:column;gap:.9rem}.pillar-section-head{display:flex;align-items:baseline;gap:1rem;flex-wrap:wrap}.pillar-section-head h3{margin:0;font-size:1.05rem;font-weight:600;color:var(--fg)}.pillar-section-sub{font-size:.82rem;color:var(--fg-muted)}.pillar-free-list{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:.5rem 1.5rem}.pillar-free-list li{display:flex;align-items:flex-start;gap:.45rem;color:var(--fg);font-size:.88rem}.pillar-check{color:var(--mcp);font-weight:700;flex-shrink:0}.pillar-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:.85rem}.pillar-card{display:flex;flex-direction:column;gap:.55rem;padding:1rem 1.1rem;border-radius:8px;border:1px solid var(--border);background:#ffffff05}.pillar-card-locked{background:var(--pillar-locked-bg);border-style:dashed;border-color:#ffffff1f;position:relative}.pillar-card-locked:before{content:"🔒";position:absolute;top:.75rem;right:.85rem;font-size:.85em;opacity:.4}.pillar-card-head{display:flex;flex-direction:column;gap:.3rem}.pillar-card-head h4{margin:0;font-size:.95rem;font-weight:600;color:var(--fg);padding-right:1.5em}.pillar-card p{margin:0;font-size:.84rem;line-height:1.5;color:#b1bac4}.pillar-card-foot{margin-top:auto;padding-top:.5rem;font-size:.72rem;color:var(--fg-muted)}.pillar-status{display:inline-block;padding:.1rem .5rem;border-radius:999px;border:1px solid var(--border);background:#ffffff05;color:var(--fg-muted);letter-spacing:.02em}.pillar-tier-chip{display:inline-flex;align-items:center;padding:.12rem .55rem;border-radius:999px;font-size:.7rem;font-weight:600;letter-spacing:.02em;width:fit-content}.tier-personal{background:#58a6ff1f;color:var(--tier-personal);border:1px solid rgba(88,166,255,.35)}.tier-solo{background:#d977061f;color:var(--accent-amber);border:1px solid rgba(217,119,6,.35)}.tier-team{background:#a371f71f;color:var(--tier-team);border:1px solid rgba(163,113,247,.35)}.pillar-prose{margin:0;max-width:70ch;color:#b1bac4}.pillar-foot{border-top:1px solid var(--border);padding-top:1rem;font-size:.85rem;color:var(--fg-muted)}.pillar-foot a{color:var(--accent-amber);text-decoration:none}.pillar-foot a:hover{text-decoration:underline}.pricing-page{font:.9rem/1.55 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;display:flex;flex-direction:column;gap:2.5rem}.pricing-hero{display:flex;flex-direction:column;gap:.7rem;padding:1.5rem 0 1.8rem;border-bottom:1px solid var(--border)}.pricing-kicker{font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:var(--accent-amber)}.pricing-hero h1{margin:0;font-size:2.3rem;font-weight:700;letter-spacing:-.025em;color:var(--fg)}.pricing-hero-accent{color:var(--accent-amber)}.pricing-sub{margin:0;max-width:72ch;font-size:1rem;line-height:1.55;color:#b1bac4}.pricing-pillars-row{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:.4rem}.pillar-chip{display:inline-flex;align-items:center;padding:.3rem .75rem;border-radius:999px;font-size:.78rem;font-weight:600;letter-spacing:.01em}.pillar-chip.verb-see{background:#d977061f;color:var(--accent-amber);border:1px solid rgba(217,119,6,.4)}.pillar-chip.verb-control{background:#58a6ff1a;color:var(--tier-personal);border:1px solid rgba(88,166,255,.35)}.pillar-chip.verb-govern{background:#a371f71a;color:var(--tier-team);border:1px solid rgba(163,113,247,.35)}.tier-enterprise{background:#a371f71f;color:var(--tier-team);border:1px solid rgba(163,113,247,.35)}.pricing-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(205px,1fr));gap:.85rem}.pricing-card{display:flex;flex-direction:column;gap:1.25rem;padding:1.5rem 1.4rem;border:1px solid var(--border);border-radius:12px;background:#ffffff05;transition:border-color .15s,transform .15s}.pricing-card-featured{border-color:#d9770680;background:linear-gradient(180deg,#d977060f,#ffffff05 60%);box-shadow:0 10px 30px #d9770614}.pricing-card-enterprise{border-color:#a371f752;background:linear-gradient(180deg,#a371f70d,#ffffff05 60%)}.pricing-card-enterprise .pricing-card-cta{background:var(--tier-team);border-color:var(--tier-team);color:#fff}.pricing-card-enterprise .pricing-card-cta:hover{background:#8a52f5;border-color:#8a52f5}.pricing-card-head{display:flex;flex-direction:column;gap:.5rem}.pricing-card-name{font-size:1.1rem;font-weight:700;color:var(--fg);letter-spacing:-.01em}.pricing-card-pillar{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-muted)}.pricing-card-price-row{display:flex;align-items:baseline;gap:.35rem;margin-top:.5rem}.pricing-card-price{font-size:1.7rem;font-weight:700;letter-spacing:-.02em;color:var(--fg)}.pricing-card-unit{font-size:.78rem;color:var(--fg-muted)}.pricing-card-tagline{font-size:.86rem;color:#b1bac4;line-height:1.45}.pricing-features{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.45rem}.pricing-features li{display:flex;align-items:flex-start;gap:.5rem;font-size:.85rem;line-height:1.45}.pricing-feature-on{color:var(--fg)}.pricing-feature-off{color:var(--fg-muted)}.pricing-feature-mark{flex-shrink:0;width:1.1em;text-align:center;font-weight:700}.pricing-feature-on .pricing-feature-mark{color:var(--mcp)}.pricing-feature-off .pricing-feature-mark{color:var(--border)}.pricing-card-cta{margin-top:auto;padding:.6rem 1rem;text-align:center;text-decoration:none;border-radius:6px;font-weight:600;font-size:.88rem;border:1px solid var(--border);color:var(--fg);transition:background .15s,border-color .15s}.pricing-card-cta:hover{border-color:var(--fg)}.pricing-card-featured .pricing-card-cta{background:var(--accent-amber);border-color:var(--accent-amber);color:#fff}.pricing-card-featured .pricing-card-cta:hover{background:#b45309;border-color:#b45309}.pricing-note{padding:1.5rem 1.75rem;border-radius:10px;background:#ffffff05;border:1px solid var(--border)}.pricing-note h3{margin:0 0 .75rem;font-size:1rem;font-weight:600;color:var(--fg)}.pricing-note p{margin:0 0 .85rem;max-width:78ch;color:#b1bac4}.pricing-fineprint{font-size:.82rem;color:var(--fg-muted)!important}.pricing-faq h3{margin:0 0 1rem;font-size:1.1rem;font-weight:600}.pricing-faq-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.5rem}.pricing-faq-grid h4{margin:0 0 .4rem;font-size:.95rem;font-weight:600;color:var(--fg)}.pricing-faq-grid p{margin:0;font-size:.86rem;line-height:1.5;color:#b1bac4}.pricing-faq-grid a,.pricing-note a{color:var(--accent-amber);text-decoration:none}.pricing-faq-grid a:hover,.pricing-note a:hover{text-decoration:underline}.pricing-faq-grid code,.pricing-note code{font:.85em ui-monospace,SFMono-Regular,Menlo,monospace;background:#ffffff0f;padding:.05em .4em;border-radius:3px;color:var(--fg)}.harness-diagram{font:.85rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.hd-frame{border:2px solid rgba(217,119,6,.4);border-radius:14px;padding:1.1rem 1.25rem 1.25rem;background:linear-gradient(180deg,#d977060d,#ffffff04 40%);position:relative}.hd-head{display:flex;align-items:baseline;gap:.75rem;flex-wrap:wrap;margin-bottom:.9rem}.hd-label{font-size:.95rem;font-weight:700;color:var(--fg);letter-spacing:-.01em}.hd-tagline{font-size:.78rem;color:var(--fg-muted)}.hd-components{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:.6rem;margin-bottom:.9rem}.hd-tile{border:1px solid var(--border);border-radius:8px;padding:.6rem .7rem;background:#0d11178c;display:flex;flex-direction:column;gap:.3rem}.hd-tile-name{font-size:.84rem;font-weight:700;color:var(--fg)}.hd-tile-free{font-size:.76rem;color:#b1bac4;line-height:1.4}.hd-tile-paid{font-size:.76rem;color:#8b97f5;line-height:1.4}.hd-track{display:flex;gap:.25rem;margin-top:.15rem}.hd-verb{flex:1;text-align:center;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:.15rem 0;border-radius:4px;border:1px solid var(--border)}.hd-verb.off{color:#3a414d;border-color:#ffffff0d}.hd-verb.on.verb-see{color:var(--accent-amber);background:#d9770624;border-color:#d9770666}.hd-verb.on.verb-control{color:var(--tier-personal);background:#58a6ff1f;border-color:#58a6ff66}.hd-verb.on.verb-govern{color:var(--tier-team);background:#a371f71f;border-color:#a371f766}.hd-fleet{border:1px dashed rgba(255,255,255,.18);border-radius:9px;padding:.7rem .85rem;background:#00000040}.hd-fleet-label{font-size:.68rem;text-transform:uppercase;letter-spacing:.12em;color:var(--fg-muted)}.hd-fleet-chips{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.5rem}.hd-agent{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .65rem;border-radius:6px;border:1px solid var(--border);background:#ffffff08;font-size:.8rem;color:var(--fg)}.hd-agent-byoa{border-style:dashed;border-color:#a371f780;color:#c9b6f5}.hd-byoa-tag{font-size:.6rem;font-weight:700;letter-spacing:.06em;padding:.05rem .35rem;border-radius:999px;background:#a371f733;color:var(--tier-team)}.pricing-card-toprow{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.pricing-verb-badge{font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:.15rem .5rem;border-radius:999px}.pricing-verb-badge.verb-see{color:var(--accent-amber);background:#d9770624;border:1px solid rgba(217,119,6,.4)}.pricing-verb-badge.verb-control{color:var(--tier-personal);background:#58a6ff1f;border:1px solid rgba(88,166,255,.4)}.pricing-verb-badge.verb-govern{color:var(--tier-team);background:#a371f71f;border:1px solid rgba(163,113,247,.4)}.pricing-family{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;padding:1.25rem 1.5rem;border:1px dashed rgba(163,113,247,.4);border-radius:10px;background:#a371f70a;font:.9rem/1.55 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.pricing-family-name{font-size:1.05rem;font-weight:700;color:var(--fg);margin-bottom:.35rem}.pricing-family-tag{font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--tier-team);border:1px solid rgba(163,113,247,.4);border-radius:999px;padding:.1rem .5rem;margin-left:.5rem;vertical-align:middle}.pricing-family-left p{margin:0;max-width:70ch;color:#b1bac4;font-size:.86rem}.pricing-family-cta{flex-shrink:0;padding:.55rem 1rem;border:1px solid rgba(163,113,247,.5);border-radius:6px;color:#c9b6f5;text-decoration:none;font-weight:600;font-size:.85rem;white-space:nowrap}.pricing-family-cta:hover{background:#a371f71f}.pillar-unlock-note{font-size:.74rem;color:var(--fg-muted);line-height:1.4;margin-top:.5rem;padding-top:.5rem;border-top:1px solid rgba(255,255,255,.06)}.pillar-byoa{padding:1.1rem 1.25rem;border-radius:10px;border:1px solid rgba(163,113,247,.22);background:#a371f70d}.pillar-family{padding:1.1rem 1.25rem;border-radius:10px;border:1px dashed rgba(163,113,247,.3);background:#a371f708}.update-banner{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin:0 0 1.25rem;padding:.7rem 1rem;border-radius:6px;border:1px solid var(--border);font:.85rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.update-banner-available{border-color:#d9770680;background:#d9770614}.update-banner-progress{border-color:#58a6ff73;background:#58a6ff14}.update-banner-ok{border-color:#3fb95080;background:#3fb95017}.update-banner-fail{border-color:var(--risk-high);background:#f851491a}.update-actions{display:flex;gap:.5rem;flex-shrink:0}.update-btn{font:inherit;font-size:.8rem;padding:.3rem .75rem;border-radius:5px;border:1px solid var(--border);background:transparent;color:var(--fg);cursor:pointer;transition:background .15s,border-color .15s}.update-btn:hover{border-color:var(--fg)}.update-btn.primary{background:var(--accent-amber);border-color:var(--accent-amber);color:#fff;font-weight:600}.update-btn.primary:hover{background:#b45309;border-color:#b45309}.update-btn:disabled{opacity:.6;cursor:default}.update-spinner{width:12px;height:12px;border:2px solid rgba(88,166,255,.3);border-top-color:var(--accent);border-radius:50%;display:inline-block;animation:update-spin .7s linear infinite;flex-shrink:0}@keyframes update-spin{to{transform:rotate(360deg)}}

Sorry, the diff of this file is too big to display

+7
-2
{
"name": "@openthomas/thomas",
"version": "0.2.0",
"description": "Open-source flight recorder for AI agents — the orchestrator's instrument panel.",
"version": "0.4.0",
"description": "The dynamic harness for your agent fleet — make every agent reliable. See your fleet free; Control + Govern with paid editions.",
"license": "MIT",

@@ -39,2 +39,6 @@ "type": "module",

"typecheck": "tsc --noEmit",
"test": "vitest run",
"test:watch": "vitest",
"test:smoke": "node ./scripts/smoke-test.mjs",
"refresh:pricing": "node --experimental-strip-types ./scripts/refresh-pricing.ts",
"prepack": "cp ../../LICENSE ../../README.md ../../PRIVACY.md . && npm run build"

@@ -56,4 +60,5 @@ },

"valibot": "^1.0.0",
"vitest": "^3.2.0",
"yaml": "^2.6.0"
}
}
# Privacy & data handling
Thomas is local-first. Everything you capture stays on your own
machine under `~/.thomas/`. The published package does **not** phone
home, does **not** collect telemetry, does **not** auto-update, and
does **not** report crashes. There is no `openthomas.com` host wired
into the source.
machine under `~/.thomas/`. The published package does **not** collect
telemetry, does **not** report crashes, and does **not** send any data
**about you or your usage** anywhere. There is no `openthomas.com` /
Thomas / Anthropic host wired into the package.
From v0.4 the daemon makes one outbound request of its own: a daily
**version check** against the public npm registry — see the v0.4
section. It carries no user data, contacts only the registry npm
itself uses, and can be switched off.
This file is updated **every release** with the exact behaviour of
the version it ships with. If a future release introduces any
behaviour that sends data anywhere, it will be:
the version it ships with. If a future release sends any data **about
you or your usage** anywhere, it will be:
1. Strictly opt-in.

@@ -17,2 +22,6 @@ 2. Documented here under that version's section with what is sent,

(A version check against the public package registry is not in that
category — it reveals nothing about you — but it is documented in full
below and is disableable all the same.)
Audit the claims yourself by reading the source — `git grep https://`

@@ -23,2 +32,65 @@ finds every URL the package can talk to.

## v0.4
v0.4 adds the **update system** — `thomas update`, `thomas rollback`,
the dashboard update banner, and optional auto-update. This is the
first Thomas behaviour that contacts a host other than your agent's
own upstream. Here is exactly what it does.
### The version check
The daemon checks once a day whether a newer Thomas has been
published:
* **Request:** a plain HTTPS `GET` to
`https://registry.npmjs.org/@openthomas/thomas/latest` — the public
npm registry, the same one `npm install` used to put Thomas on your
machine.
* **What it sends:** the package name, in the URL. Nothing else. No
user data, no machine ID, no install ID, no usage data, no header
that identifies you. The registry sees an anonymous GET, exactly
like `npm view @openthomas/thomas version`.
* **Where it does NOT go:** not `openthomas.com`, not any Thomas or
Anthropic server. We never see this request.
* **On by default**, because it carries nothing about you. Turn it
off completely with `updateCheck: false` in `~/.thomas/config.json`
— the daemon then makes no version checks at all.
* The result is cached in `~/.thomas/update.json` and never leaves
your machine.
### Installing an update
`thomas update`, or "Update now" in the dashboard, runs
`npm install -g @openthomas/thomas@<version>` — exactly what you would
run by hand. Before installing, Thomas snapshots your trace database
into `~/.thomas/backups/`. After installing it restarts the daemon
(waiting for a quiet moment so no in-flight agent call is dropped) and
health-checks the new version; if the new version does not come up
healthy it automatically reinstalls the previous one and restores the
database snapshot. None of this uploads anything.
### Auto-update
Off until you turn it on. After your first manual update, Thomas asks
once whether to auto-update future releases. If you say yes
(`autoUpdate: true` in `~/.thomas/config.json`), the daily check will
install a new version on its own — still backed up, still
health-gated, still auto-rolled-back on failure. Say no and updates
stay manual.
### New files on disk
| Path | What |
|---|---|
| `~/.thomas/config.json` | Your preferences: `updateCheck`, `autoUpdate`, `autoUpdateAsked`. |
| `~/.thomas/update.json` | Cached result of the last version check. |
| `~/.thomas/update-progress.json` | State of the current / last update, for the CLI and dashboard. |
| `~/.thomas/backups/db-pre-<version>-<ts>.sqlite` | Database snapshots taken before each update so a rollback can restore them. The most recent 3 are kept. |
| `~/.thomas/pending-db-restore` | Transient marker written during a rollback; consumed and deleted at the next daemon boot. |
All of these are local files. Nothing in the update system uploads
anything.
---
## v0.1

@@ -107,2 +179,16 @@

### What the daemon does on its own
Once started, the daemon performs one background activity that touches
your data without an explicit command:
* **Auto-prune.** Every 24 hours, the daemon deletes captured actions
older than `THOMAS_RETENTION_DAYS` (default 30). This only removes
data **from your local trace database** — nothing leaves your machine
before, during, or after. In-flight runs (open `ended_at`) are never
pruned. Disable with `THOMAS_RETENTION_DAYS=0` in the daemon
environment. To also reclaim disk space to the OS (slow, pauses
writes), set `THOMAS_PRUNE_VACUUM=1`. The same logic is available
manually via `thomas prune`.
### Reporting

@@ -109,0 +195,0 @@

+112
-46

@@ -5,15 +5,51 @@ # Thomas

**The orchestrator's instrument panel for AI agents.**
**The dynamic harness for your agent fleet.**
The 2026 founder's job is to orchestrate agents — Claude Code shipping
code, Claude Cowork running ops, Hermes answering support, a dozen
agents working in parallel while you sleep. You cannot orchestrate
what you cannot see.
Your agent fleet is only as reliable as its harness.
Thomas is the local-first flight recorder. Every model call, every
tool call, every MCP message, every file change, every dollar — all
captured on your own machine, decoded into an execution graph you can
actually read. The paid tiers add the control plane on top: block
risky actions, set budgets, route models, govern across a team.
2025 was the year of agents. 2026 is the year of harnesses — the
scaffolding around a model (tools, context, guardrails, the loop, the
verify step) that decides whether it is reliable. Claude Code is a
harness for one model. Your *fleet* of agents — Claude Code, Codex,
OpenClaw, Hermes, all running in parallel while you sleep — has no
harness around it. Thomas is that harness.
It is generated on the fly: `thomas wire` detects what you run and
wraps it — no rewrites, no framework. Thomas wraps the **wire**, not
the agent, so it works even on agents it does not own.
### Three verbs
| Verb | What the harness does | Edition |
|---|---|---|
| **See** | Capture, decode, replay every action; score outcomes with the T metric | **Free, forever** |
| **Control** | Enforce on your own agents — approval gates, blocking, policy, budgets | Personal · Solo |
| **Govern** | Enforce across a team's agents — BYOA, RBAC, audit, compliance | Team · Enterprise |
**See is free and complete** — capture, decode, view, replay, and score
every agent action forever, locally, without paying a cent. **Control
and Govern are paid** (see [Pricing](#pricing) below): the same binary,
gated by a cloud license token.
## Thomas (T) — your outcome-per-token score
Thomas computes a single dimensionless KPI from everything it captures:
```
Σ human-equivalent value of outcomes (USD)
T = ──────────────────────────────────────────
total AI cost (USD)
```
A `T = 47` means: every $1 of AI spend produced $47 of human-equivalent
labor. Higher is better. The companion `T_verified` (v1.1) restricts the
numerator to outcomes whose tool_result indicated success — so 19 failed
attempts on a vulnerability search don't get scored as 19 wins. Token
spend on failures still hits the cost basis.
Run `thomas thomas` to see yours. Full spec at
[openthomas.com/thomas](https://openthomas.com/thomas) (v1.1, MIT). The
spec is frozen for 12 months so the number means the same thing across
operators and time.
## Quick start

@@ -26,3 +62,4 @@

# …run your agent as usual…
thomas # open the UI at http://localhost:9877
thomas thomas # see your T (outcome / AI cost)
thomas # open the dashboard at http://localhost:9877
```

@@ -42,6 +79,6 @@

new failure modes the playbook explicitly warns about. Thomas is the
instrument set that lets the orchestrator see and control what AI is
doing on their behalf, at every stage.
harness that lets the orchestrator see, control, and govern what their
fleet does, at every stage.
| Stage | Where you are | Thomas (free) gives | Natural upgrade |
| Stage | Where you are | See — free — gives | Natural upgrade |
|---|---|---|---|

@@ -59,38 +96,54 @@ | **Idea** | Ten hypotheses, ten Claude bills running in parallel | Cost X-ray per agent, per project, per day | **Personal**: budget caps so rabbit holes can't drain credits |

## Thomas (free) → Thomas Personal / Solo / Team
## Pricing
The free package — Thomas — is the **see** layer. Capture, decode,
timeline, cost X-ray, risk flags, mock replay, shareable reports. MIT
licensed, fully local, complete on its own.
Thomas Free is **See** — the legible harness, complete on its own. Paid
editions turn the harness from read-only to enforcing. They divide by
**who the harness answers to**: *self-harness* (you enforce on your own
agents) and *governed-harness* (an authority enforces across a group's
agents, including ones each member brings — **BYOA**).
The paid tiers — Personal / Solo / Team — are the **control** layer
that builds on the same daemon: act on what you saw, set budgets,
route models, sync across machines, govern across team members.
| | Free | Personal | Solo | Team | Enterprise |
|---|---|---|---|---|---|
| Verb | See | Control | Control | Govern | Govern |
| Capture, decode, timeline, replay | ✅ | ✅ | ✅ | ✅ | ✅ |
| T metric + cost X-ray + risk flags | ✅ | ✅ | ✅ | ✅ | ✅ |
| Approval gates, blocking, policy | — | ✅ | ✅ | ✅ | ✅ |
| Budget caps, model routing, sync | — | ✅ | ✅ | ✅ | ✅ |
| Multi-project, CI replay, evals | — | — | ✅ | ✅ | ✅ |
| BYOA — govern agents you don't own | — | — | — | ✅ | ✅ |
| RBAC, SSO, fleet view, audit log | — | — | — | ✅ | ✅ |
| Compliance pack, on-prem, custom SLA | — | — | — | — | ✅ |
| Price | $0 | $19/mo | $99/mo+ | $499/mo+ | Custom |
| | Thomas (free) | Personal | Solo | Team |
|---|---|---|---|---|
| Local capture, decode, timeline | ✅ | ✅ | ✅ | ✅ |
| Cost X-ray, risk flags (read-only) | ✅ | ✅ | ✅ | ✅ |
| Shareable reports, mock replay | ✅ | ✅ | ✅ | ✅ |
| Active blocking & policy | — | ✅ | ✅ | ✅ |
| Approval gates (live YES/NO on risky actions) | — | ✅ | ✅ | ✅ |
| Budget caps & model routing | — | ✅ | ✅ | ✅ |
| Encrypted cloud sync across your machines | — | ✅ | ✅ | ✅ |
| Multi-project workspaces | — | — | ✅ | ✅ |
| CI replay (live, deterministic) | — | — | ✅ | ✅ |
| Eval suites built from your real traces | — | — | ✅ | ✅ |
| RBAC, SSO, shared policies | — | — | — | ✅ |
| Fleet management & audit log | — | — | — | ✅ |
**Thomas Family** — the governed harness for the household (a parent
governing a child's AI) — is sequenced separately; no date yet.
Paid features ship in the same binary, gated by a cloud-issued license
token — no plugins to install, no separate CLI to learn. The free
package never calls cloud, never phones home, and is a complete flight
recorder forever.
Every edition is the **same binary**, gated by a cloud-issued license
token — no plugins, no separate CLI. The free package never calls
cloud, never phones home, stays complete forever. The protection is
structural: the cloud rejects un-licensed requests, and replicating the
cloud service is the actual product moat.
Today (v0.1): free only. **Personal** launches in v0.4; Solo and Team
follow.
Run `thomas upgrade` for the in-product comparison, or visit
`http://localhost:9877/#/pricing` while the daemon is running.
Today (v0.4): free only — the See edition. **Personal** and the other
paid editions land in later releases.
## What you'll see
```
$ thomas thomas
Your Thomas · last 24h · spec v1.1
25.0 $13.8K solo founder with reasonable hygiene
T verified outcomes
$553.71 of AI spend → $13,821 of verified human-equivalent labour
1,093 actions · 129 verified outcomes · 322.9M tokens
action_rate: 3.39 a/Mtok outcome_rate: 11.8%
Outcomes: 47 commits · 44 files edited · 27 files created · 9 CI passed
```
```
$ thomas list

@@ -142,3 +195,3 @@ ID STARTED AGENT STATUS DUR ACT COST IN/OUT CACHE R/W

| OpenCode | ✅ | |
| Codex | ⓘ manual | |
| Codex | ✅ | rewrites `[model_providers.openai]` in `~/.codex/config.toml` (Responses API) |
| Cursor | ⓘ manual | |

@@ -163,7 +216,20 @@ | Gemini CLI | ⓘ manual | |

v0.1. Solo-built and used daily by the author. Tested against real
Claude Code / OpenClaw / Hermes traffic. Bug reports and PRs welcome.
v0.4 — first public release. Solo-built and used daily by the author.
Tested against real Claude Code / OpenClaw / Codex / Hermes traffic.
Bug reports and PRs welcome.
## License
## License & trust
MIT.
Thomas is MIT licensed. All code that runs on your machine — including
the implementations of paid commands — is open source. The free tier
**never calls cloud, never phones home, never sends telemetry**. See
[`PRIVACY.md`](./PRIVACY.md) for the load-bearing privacy contract,
which lists every file Thomas writes and the only place it sends data
(your own agent's traffic, to the model provider your agent already
calls).
Paid tiers ship in the same MIT-licensed binary. They activate when a
cloud license token is placed at `~/.thomas/license.json`; without one,
the cloud rejects requests. We are open-source on the client and
proprietary on the cloud — the same model as Sentry, PostHog, Cal.com,
Tailscale, and Stripe CLI.

@@ -7,4 +7,4 @@ <!doctype html>

<title>Thomas</title>
<script type="module" crossorigin src="/assets/index-Bv3bo0Fl.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-iBM-SSfB.css">
<script type="module" crossorigin src="/assets/index-ByfAPVbT.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-By4Qi9RV.css">
</head>

@@ -11,0 +11,0 @@ <body>

Sorry, the diff of this file is too big to display

:root{--bg: #0d1117;--fg: #c9d1d9;--fg-muted: #8b949e;--border: #30363d;--accent: #58a6ff;--tool: #d29922;--thinking: #a371f7;--mcp: #3fb950;--err: #f85149;--risk-info: #58a6ff;--risk-warn: #d29922;--risk-high: #f85149}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--fg);font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,Monaco,monospace}.app{max-width:1200px;margin:0 auto;padding:1.5rem}header{display:flex;align-items:baseline;gap:1rem;border-bottom:1px solid var(--border);padding-bottom:.75rem;margin-bottom:1.5rem}header h1{margin:0;font-size:1.4rem;font-weight:600}header .slug{color:var(--fg-muted);font-size:.85rem}table.runs{width:100%;border-collapse:collapse}table.runs th,table.runs td{text-align:left;padding:.4rem .75rem;border-bottom:1px solid var(--border)}table.runs th{font-weight:500;color:var(--fg-muted);text-transform:uppercase;font-size:.7rem;letter-spacing:.05em}table.runs tbody tr{cursor:pointer}table.runs tbody tr:hover{background:#388bfd1a}code{font-family:inherit;color:var(--accent)}.run-detail .back{background:none;border:1px solid var(--border);color:var(--fg);padding:.3rem .6rem;cursor:pointer;font:inherit;border-radius:4px}.run-detail .back:hover{background:#ffffff0d}.run-detail .meta{margin:1rem 0 2rem}.run-detail .meta h2{margin:0 0 .75rem;font-size:1rem;font-weight:500}.run-detail .meta dl{display:grid;grid-template-columns:100px 1fr;gap:.25rem 1rem;font-size:.85rem;margin:0}.run-detail .meta dt{color:var(--fg-muted)}.run-detail .meta dd{margin:0}.action{border:1px solid var(--border);border-radius:6px;padding:.75rem 1rem;margin-bottom:1rem;background:#ffffff05}.action-head{display:flex;gap:1rem;align-items:center;margin-bottom:.5rem;font-size:.85rem}.action-head .kind{background:var(--border);padding:.1rem .5rem;border-radius:3px;color:var(--accent)}.action-head .kind.kind-mcp_call{color:var(--mcp)}.action-head .kind.kind-tool_call{color:var(--tool)}.mcp-dir{font-weight:700;display:inline-block;min-width:1ch}.mcp-dir-request{color:var(--accent)}.mcp-dir-response{color:var(--mcp)}.mcp-dir-notification{color:var(--fg-muted)}.risks{display:flex;flex-wrap:wrap;gap:.35rem;margin:.35rem 0 .5rem}.risk{font-size:.7rem;padding:.1rem .45rem;border-radius:3px;border:1px solid var(--border);white-space:nowrap}.risk-info{border-color:var(--risk-info);color:var(--risk-info)}.risk-warn{border-color:var(--risk-warn);color:var(--risk-warn)}.risk-high{border-color:var(--risk-high);color:var(--risk-high);background:#f851491f}.action-head .id{color:var(--fg-muted);font-size:.75rem}.action-head .time{margin-left:auto;color:var(--fg-muted)}.action .row{margin:.25rem 0}.action details{margin:.5rem 0}.action details summary{cursor:pointer;color:var(--fg-muted)}.action pre{background:#0000004d;padding:.75rem;border-radius:4px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;font-size:.8rem;margin:.5rem 0}.action .blocks{margin-top:.5rem}.block{margin:.5rem 0;padding:.5rem .75rem;border-left:2px solid var(--border)}.block.text{white-space:pre-wrap}.block.tool_use{border-left-color:var(--tool)}.block.tool_use .tool-name{color:var(--tool);font-weight:600;display:block;margin-bottom:.25rem}.block.thinking{color:var(--thinking);font-style:italic;white-space:pre-wrap;border-left-color:var(--thinking)}.drift-banner{margin:0 0 1.25rem;padding:.75rem 1rem;border:1px solid var(--risk-warn);border-radius:6px;background:#d2992214;color:var(--fg);font-size:.85rem}.drift-banner strong{color:var(--risk-warn)}.drift-banner ul{margin:.4rem 0;padding-left:1.2rem}.drift-banner li{margin:.15rem 0}.drift-banner .path{color:var(--fg-muted);font-size:.8rem}.empty,.loading,.error{padding:2rem;text-align:center;color:var(--fg-muted)}.error{color:var(--err)}.empty .hint{font-size:.85rem;margin-top:1rem}.err{color:var(--err)}.share-app{max-width:none;padding:1.25rem 2rem}.share-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem;font:.85rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.share-back{color:var(--fg-muted);text-decoration:none}.share-back:hover{color:var(--fg)}.share-actions{display:flex;gap:.6rem}.share-btn{background:transparent;border:1px solid var(--border);color:var(--fg);padding:.5rem 1rem;border-radius:6px;font:inherit;cursor:pointer;transition:border-color .15s,color .15s}.share-btn:hover{border-color:var(--fg)}.share-btn.primary{background:#d97706;border-color:#d97706;color:#fff}.share-btn.primary:hover{background:#b45309;border-color:#b45309}.share-stage{position:relative;overflow:hidden}.share-card-wrap{display:inline-block;box-shadow:0 8px 40px #00000080}.share-hint{margin-top:1.25rem;font:.8rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--fg-muted)}.share-hint code{background:#ffffff0d;padding:.1rem .4rem;border-radius:3px;font-size:.85rem}.share-toast{position:fixed;bottom:2rem;left:50%;transform:translate(-50%);background:var(--fg);color:var(--bg);padding:.65rem 1.25rem;border-radius:6px;font:.85rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;box-shadow:0 4px 20px #0006;z-index:100}:root{--accent-amber: #d97706}.nav{display:flex;align-items:center;gap:2rem;padding-bottom:.75rem;margin-bottom:1.5rem;border-bottom:1px solid var(--border);font:.85rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.nav-brand{display:flex;align-items:center;gap:.5rem;font-weight:600;font-size:1rem;color:var(--fg)}.nav-dot{width:10px;height:10px;border-radius:50%;background:var(--accent-amber);display:inline-block}.nav-links{display:flex;gap:1.25rem}.nav-links a{color:var(--fg-muted);text-decoration:none;padding:.25rem 0;border-bottom:2px solid transparent;transition:color .15s,border-color .15s}.nav-links a:hover{color:var(--fg)}.nav-links a.active{color:var(--fg);border-bottom-color:var(--accent-amber)}.nav-meta{margin-left:auto;display:flex;align-items:center;gap:1rem;color:var(--fg-muted)}.nav-drift{color:var(--risk-warn)}.nav-health.ok:before{content:"●";color:var(--mcp);margin-right:.4em}.nav-health.fail{color:var(--err)}.nav-health.fail:before{content:"●";margin-right:.4em}.home{display:flex;flex-direction:column;gap:1.25rem}.module{border:1px solid var(--border);border-radius:8px;padding:1.25rem 1.5rem;background:#ffffff04}.module-row{display:flex;align-items:center;justify-content:space-between;gap:1.5rem}.module-title{font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.module-summary{color:var(--fg-muted);font-size:.9rem}.module-link{color:var(--fg-muted);text-decoration:none;font-size:.85rem}.module-link:hover{color:var(--accent-amber)}.spend-module .hero-stat{display:flex;flex-direction:column;gap:.25rem}.spend-module .hero-stat-label{font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.spend-module .hero-stat-value{font-size:2.6rem;font-weight:700;letter-spacing:-.02em;color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.sparkline{display:flex;align-items:flex-end;gap:2px;height:64px;flex:1;max-width:480px}.sparkline-bar{flex:1;background:var(--border);border-radius:1px;min-height:2px;transition:background .15s}.sparkline-bar:hover,.sparkline-bar.current{background:var(--accent-amber)}.sub-stats{margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--border);display:flex;gap:3rem;justify-content:flex-start}.sub-stat-label{font-size:.75rem;color:var(--fg-muted);letter-spacing:.05em;text-transform:uppercase;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;margin-bottom:.25rem}.sub-stat-value{font-size:1.1rem;color:var(--fg);font-weight:500;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-row{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem}@media(max-width:720px){.card-row{grid-template-columns:1fr}}.card-module{padding:1rem 1.25rem .75rem}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.card-title{font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-meta{color:var(--accent-amber);font-weight:600;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-empty{color:var(--fg-muted);font-size:.85rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-body{display:flex;flex-direction:column;gap:.3rem}.card-body-empty{padding:1rem 0;color:var(--fg-muted);font-size:.85rem;text-align:left;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-row-link{display:grid;grid-template-columns:80px 1fr auto;align-items:baseline;gap:.75rem;padding:.4rem 0;color:var(--fg);text-decoration:none;border-bottom:1px dashed transparent}.card-row-link:hover{border-bottom-color:var(--border)}.cost{font-weight:600;text-align:right}.cost-accent{color:var(--accent-amber)}.cost-warn{color:#f97316}.card-row-desc{color:var(--fg);font-size:.85rem}.card-row-meta{color:var(--fg-muted);font-size:.75rem}.card-footer{padding-top:.6rem;margin-top:.4rem;border-top:1px solid var(--border)}.card-footer a{color:var(--fg-muted);text-decoration:none;font-size:.8rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.card-footer a:hover{color:var(--accent-amber)}.agent-bars{margin-top:1rem;display:flex;flex-direction:column;gap:.5rem}.agent-bar{display:grid;grid-template-columns:130px 1fr 160px;align-items:center;gap:1rem}.agent-bar-label{font-weight:500}.agent-bar-track{height:8px;background:var(--border);border-radius:4px;overflow:hidden}.agent-bar-fill{height:100%;background:var(--accent-amber);border-radius:4px;transition:width .4s}.agent-bar-stat{color:var(--fg-muted);font-size:.85rem;text-align:right;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.activity{margin-top:.75rem;display:flex;flex-direction:column}.activity-row{display:grid;grid-template-columns:50px 130px 1fr 80px 90px;align-items:baseline;gap:1rem;padding:.5rem 0;border-bottom:1px solid var(--border);color:var(--fg);text-decoration:none;font-size:.9rem}.activity-row:hover{background:#ffffff05}.activity-time{color:var(--fg-muted);font-size:.85rem}.activity-agent{color:var(--fg)}.activity-goal{color:var(--fg-muted);font-size:.85rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-dur{color:var(--fg-muted);font-size:.8rem;text-align:right}.activity-cost{color:var(--accent-amber);font-weight:500;text-align:right}.run-header{display:flex;align-items:baseline;gap:1rem;flex-wrap:wrap;margin-bottom:1rem}.run-header h2{margin:0}.run-header-meta{color:var(--fg-muted);font-size:.85rem;display:flex;gap:.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.cost-breakdown{border:1px solid var(--border);border-radius:8px;padding:1rem 1.25rem;margin:1rem 0;background:#ffffff04}.cost-breakdown-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.6rem}.cost-breakdown-title{font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.cost-breakdown-total{font-size:1.4rem;font-weight:700;color:var(--accent-amber);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.cost-breakdown-rows{display:flex;flex-direction:column;gap:.35rem}.cost-breakdown-row{display:grid;grid-template-columns:100px 40px 1fr 70px 40px;align-items:center;gap:.6rem;font-size:.85rem}.cost-breakdown-count{color:var(--fg-muted);font-size:.8rem}.cost-breakdown-bar-track{height:6px;background:var(--border);border-radius:3px;overflow:hidden}.cost-breakdown-bar-fill{height:100%;background:var(--accent-amber);border-radius:3px}.cost-breakdown-cost{text-align:right;font-weight:500;color:var(--fg)}.cost-breakdown-pct{text-align:right;color:var(--fg-muted);font-size:.8rem}.action-cost{margin-left:auto;color:var(--fg-muted);font-weight:500}.action-cost-top{color:var(--accent-amber)}.action-cost-tag{margin-left:.5rem;font-size:.7rem;color:var(--accent-amber);letter-spacing:.04em}.action.action-top-cost{border-left:2px solid var(--accent-amber);padding-left:.75rem}.helptip{display:inline-flex;align-items:center;position:relative;cursor:help;margin-left:.4em;vertical-align:middle}.helptip-icon{width:14px;height:14px;border:1px solid var(--fg-muted);border-radius:50%;color:var(--fg-muted);display:inline-flex;align-items:center;justify-content:center;font:600 9px/1 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;text-transform:none;letter-spacing:0;transition:color .15s,border-color .15s}.helptip:hover .helptip-icon{color:var(--accent-amber);border-color:var(--accent-amber)}.helptip-content{position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%);width:280px;background:#1a1f26;border:1px solid var(--border);padding:.7rem .85rem;border-radius:6px;font:.78rem/1.55 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--fg);text-transform:none;letter-spacing:0;opacity:0;visibility:hidden;transition:opacity .15s,visibility .15s;z-index:20;box-shadow:0 6px 24px #00000080;pointer-events:none}.helptip-content code{background:#ffffff0f;padding:.05rem .3rem;border-radius:3px;font-size:.9em}.helptip:hover .helptip-content{opacity:1;visibility:visible}.sparkline-with-label{display:flex;flex-direction:column;align-items:stretch;gap:.4rem;flex:1;max-width:480px}.sparkline-label{font:.7rem/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--fg-muted);letter-spacing:.04em;display:flex;align-items:center;justify-content:flex-end}

Sorry, the diff of this file is too big to display