1 2<!DOCTYPE html> 3 4<html lang="en" class="scroll-smooth h-full"> 5<head> 6 <meta charset="utf-8"> 7 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 8 <meta name="viewport" content="width=device-width, initial-scale=1"> 9 <meta name="view-transition" content="same-origin"> 10 <meta name="app-env" content="production"> 11 <title>TripleBits - Apprentice - Software for Agents</title> 12 <meta name="description" content="Apprentice is batteries-included desktop software for creating local, private agent teams that can use a computer, collaborate, and work autonomously inside the boundaries you set."> 13 14 15 16 17 18 19 20 21 22 <meta property="og:title" content="Apprentice - Software for Agents"> 23 <meta property="og:description" content="Create local, private computer-using agent teams with collaboration, autonomous work, tools, memory, browser access, schedules, channels, budgets, permissions, guardrails, and audit trails built in."> 24 <meta property="og:image" content="https://triplebits.com/static/images/apprentice-dashboard.png"> 25 <meta property="og:type" content="website"> 26 27 <meta name="csrf-token" content="cdbda588-6f73-40fe-81cd-00660d23d500"> 28 <link rel="icon" href="/static/icons/favicon.ico?v=1790871766" sizes="any"> 29 <link rel="icon" href="/static/icons/favicon.svg?v=1790871766" type="image/svg+xml"> 30 <link rel="apple-touch-icon" href="/static/icons/apple-touch-icon.png?v=1790871766"> 31
32<script> 33 (function() { 34 try { 35 var theme = window.localStorage.getItem("tb-theme") || "light"; 36 if (theme !== "dark" && theme !== "light") { 37 theme = "light"; 38 } 39 40 var root = document.documentElement; 41 root.dataset.theme = theme; 42 root.style.colorScheme = theme === "dark" ? "dark" : "light"; 43 root.style.backgroundColor = theme === "dark" ? "#08090d" : "#f6f7f9"; 44 } catch (_) { 45 document.documentElement.dataset.theme = "light"; 46 document.documentElement.style.colorScheme = "light"; 47 } 48 })(); 49</script>
49 50 51 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 52 <link rel="stylesheet" href="/static/css/index.css?v=1790871766"> 53 54 <meta name="sentry-dsn" content="https://[email protected]/1"> 55 <meta name="sentry-env" content="production"> 56 <meta name="sentry-tunnel" content="/api/v1/errors/intake"> 57 <meta name="sentry-release" content="1.0.0"> 58 59 60 61
61<script> 62 window.triplebitsAnalyticsBeforeSend = function(_type, payload) { 63 if (!payload || typeof payload !== "object") return payload; 64 65 var sanitizePath = function(value) { 66 try { 67 var parsed = new URL(value, window.location.origin); 68 if (parsed.origin !== window.location.origin) return parsed.origin; 69 var path = parsed.pathname || "/"; 70 var rules = [ 71 [/^\/newsletter\/confirm\/[^/]+$/, "/newsletter/confirm/:token"], 72 [/^\/newsletter\/unsubscribe\/[^/]+$/, "/newsletter/unsubscribe/:token"], 73 [/^\/download\/[^/]+$/, "/download/:asset_id"], 74 [/^\/support\/[^/]+\/attachments\/[^/]+$/, "/support/:ticket_id/attachments/:attachment_id"], 75 [/^\/support\/[^/]+$/, "/support/:ticket_id"], 76 [/^\/licenses\/[^/]+\/cancel$/, "/licenses/:license_id/cancel"], 77 [/^\/billing\/invoices\/[^/]+$/, "/billing/invoices/:reference"] 78 ]; 79 for (var i = 0; i < rules.length; i += 1) { 80 if (rules[i][0].test(path)) return rules[i][1]; 81 } 82 var allowedParams = ["utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term", "ref"]; 83 var kept = new URLSearchParams(); 84 allowedParams.forEach(function(key) { 85 var value = parsed.searchParams.get(key); 86 if (value && value.length <= 100 && value.indexOf("@") === -1 && value.indexOf("://") === -1) { 87 kept.set(key, value); 88 } 89 }); 90 return kept.toString() ? path + "?" + kept.toString() : path; 91 } catch (_error) { 92 return "/"; 93 } 94 }; 95 96 var scrubData = function(data) { 97 if (!data || typeof data !== "object") return data; 98 var blocked = /address|authorization|customer|email|invoice|key|license|name|password|provider|reference|secret|session|subscription|ticket|token|transaction|user/i; 99 Object.keys(data).forEach(function(key) { 100 if (blocked.test(key)) delete data[key]; 101 }); 102 return data; 103 }; 104 105 if (payload.url) payload.url = sanitizePath(payload.url); 106 if (payload.referrer) payload.referrer = sanitizePath(payload.referrer); 107 if (payload.data) payload.data = scrubData(payload.data); 108 return payload; 109 }; 110 </script>
110 111
111<script defer src="/api/v1/analytics/script.js" data-website-id="58250d69-0e7d-4f52-82e2-d9af37a9b6a3" data-host-url="https://triplebits.com" data-exclude-hash="true" data-do-not-track="true" data-before-send="triplebitsAnalyticsBeforeSend"></script>
111 112 113 114 115
115<script src="https://cdn.paddle.com/paddle/v2/paddle.js"></script>
115 116
116<script> 117 118 Paddle.Initialize({ 119 token: 'live_2554492b521138c92fa97ad297a', 120 eventCallback: function(event) { 121 console.log('Paddle event:', event.name, event); 122 if (event.name === 'checkout.completed') { 123 var txnId = (event.data && (event.data.transaction_id || event.data.id)) || ''; 124 if (txnId) { 125 window.location.href = '/checkout/success?transaction_id=' + encodeURIComponent(txnId); 126 } else { 127 window.location.href = '/checkout/success?trial=1'; 128 } 129 } 130 } 131 }); 132 </script>
132 133 134
134<script type="module" src="/static/js/index.js?v=1790871766" defer></script>
134 135</head> 136<body x-data="{}" x-init="$store.frame.init($el.dataset)" x-bind:data-theme="$store.frame.theme" data-layout="public" data-page="index" data-user-role="" class="tb-bg-canvas tb-text-primary antialiased h-full"> 137<a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:z-50 focus:m-4 focus:rounded-md focus:bg-[var(--accent-primary)] focus:px-4 focus:py-2 focus:text-white font-medium transition">Skip to main content</a> 138<div class="min-h-screen flex flex-col"> 139 140 141 142 143<header class="site-header z-50" x-bind:class="$store.frame.headerPositioningClass" x-bind:style="$store.frame.headerTransform"> 144 <div class="mx-auto w-full max-w-7xl px-4 pt-4 sm:px-6 lg:px-10"> 145 <div class="site-header__card" x-data="{ userMenuOpen: false }" x-on:keyup.escape.window="$store.frame.mobileOpen = false; userMenuOpen = false" x-effect="document.body.classList.toggle('overflow-hidden', $store.frame.mobileOpen)"> 146 <div class="site-header__row"> 147 148 <div class="site-header__brand"> 149 <a href="/" class="site-brand"> 150 <span class="site-brand__emblem brand-mark" aria-hidden="true"> 151 <img class="brand-mark__image brand-mark__image--dark" src="/static/images/logo.svg?v=1790871766" alt="" width="512" height="512" decoding="async"> 152 <img class="brand-mark__image brand-mark__image--light" src="/static/images/logo-light.svg?v=1790871766" alt="" width="512" height="512" decoding="async"> 153 </span> 154 <span class="site-brand__text"> 155 <span class="site-brand__title">TripleBits</span> 156 <span class="site-brand__subtitle">Apprentice - Software for Agents</span> 157 </span> 158 </a> 159 </div> 160 161 <nav class="site-header__nav" aria-label="Main navigation"> 162 163 164 <ul class="hidden lg:flex lg:items-center lg:gap-1 text-sm font-medium tb-text-secondary"> 165 166 167 168 169 <li> 170 <a href="/" class="inline-flex items-center gap-2 rounded-lg border px-3 py-1.5 transition duration-150 border-[var(--border-soft)] bg-[var(--surface-muted)] tb-text-primary"> 171 <span>Apprentice</span> 172 </a> 173 </li> 174 175 176 177 178 179 <li> 180 <a href="/#pricing" class="inline-flex items-center gap-2 rounded-lg border px-3 py-1.5 transition duration-150 border-transparent hover:border-[var(--border-soft)] hover:text-[var(--text-primary)]"> 181 <span>Pricing</span> 182 </a> 183 </li> 184 185 186 187 188 189 <li> 190 <a href="/posts" class="inline-flex items-center gap-2 rounded-lg border px-3 py-1.5 transition duration-150 border-transparent hover:border-[var(--border-soft)] hover:text-[var(--text-primary)]"> 191 <span>Posts</span> 192 </a> 193 </li> 194 195 196 197 198 199 200 201 202 <li> 203 <a href="/docs" class="inline-flex items-center gap-2 rounded-lg border px-3 py-1.5 transition duration-150 border-transparent hover:border-[var(--border-soft)] hover:text-[var(--text-primary)]">
204 <span>Documentation</span> 205 </a> 206 </li> 207 208 209 </ul> 210 211 </nav> 212 213 214 <div class="site-header__actions"> 215 <a href="/downloads" class="site-header__auth-btn site-header__auth-btn--primary hidden lg:inline-flex" 216 data-track-event="download_clicked" 217 data-track-prop-location="header">Download</a> 218 219 220 <a href="/login" hx-boost="false" class="site-header__auth-btn site-header__auth-btn--secondary hidden lg:inline-flex"> 221 Sign In 222 </a> 223 224 <a href="/register" hx-boost="false" class="site-header__auth-btn site-header__auth-btn--secondary hidden lg:inline-flex"> 225 Register 226 </a> 227 228 <button type="button" class="site-header__icon hidden lg:inline-flex" @click="$store.frame.toggleTheme()" aria-label="Toggle theme"> 229 230 <svg class="site-header__theme-icon site-header__theme-icon--sun h-5 w-5" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.6" viewBox="0 0 24 24"> 231 <path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2m0 14v2m10-10h-2M4 12H2m15.536-7.536-1.414 1.414M7.05 16.95l-1.414 1.414m12.728 0-1.414-1.414M7.05 7.05 5.636 5.636M16 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0Z"/> 232 </svg> 233 234 <svg class="site-header__theme-icon site-header__theme-icon--moon h-5 w-5" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.6" viewBox="0 0 24 24"> 235 <path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z"/> 236 </svg> 237 </button> 238 239 240 241 <button type="button" class="site-header__icon lg:hidden" x-on:click="$store.frame.mobileOpen = !$store.frame.mobileOpen" :aria-expanded="$store.frame.mobileOpen" aria-controls="mobile-nav"> 242 <svg class="h-5 w-5" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.6" fill="none" aria-hidden="true"> 243 <path stroke-linecap="round" d="M4 7h16M4 12h16M10 17h10"/> 244 </svg> 245 </button> 246 </div> 247 </div> 248 </div> 249 </div> 250</header> 251 252 253<div 254 id="mobile-nav" 255 class="site-header__mobile fixed inset-0 z-50 flex flex-col bg-[var(--surface-canvas)]/90 backdrop-blur-md px-6 py-8 lg:hidden" 256 x-show="$store.frame.mobileOpen" 257 x-transition:enter="transition ease-out duration-200" 258 x-transition:enter-start="opacity-0" 259 x-transition:enter-end="opacity-100" 260 x-transition:leave="transition ease-in duration-150" 261 x-transition:leave-start="opacity-100" 262 x-transition:leave-end="opacity-0" 263 x-cloak 264 x-on:click.self="$store.frame.mobileOpen = false" 265 > 266 <div class="mb-6 flex items-center justify-between"> 267 <p class="text-sm font-semibold tb-text-muted">Menu</p> 268 <button type="button" class="site-header__icon" @click="$store.frame.mobileOpen = false" aria-label="Close menu"> 269 <svg class="h-5 w-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"> 270 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18
27018 6M6 6l12 12" /> 271 </svg> 272 </button> 273 </div> 274 275 276 <nav class="flex-1" aria-label="Mobile navigation"> 277 278 <div class="mb-6"> 279 <p class="mb-2 text-xs font-semibold tb-text-muted">Discover</p> 280 <ul class="space-y-2"> 281 282 <li> 283 <a href="/" class="block rounded-lg px-3 py-2 tb-text-secondary hover:bg-[var(--surface-muted)] hover:tb-text-primary transition" @click="$store.frame.mobileOpen = false">Apprentice</a> 284 </li> 285 286 <li> 287 <a href="/#pricing" class="block rounded-lg px-3 py-2 tb-text-secondary hover:bg-[var(--surface-muted)] hover:tb-text-primary transition" @click="$store.frame.mobileOpen = false">Pricing</a> 288 </li> 289 290 <li> 291 <a href="/posts" class="block rounded-lg px-3 py-2 tb-text-secondary hover:bg-[var(--surface-muted)] hover:tb-text-primary transition" @click="$store.frame.mobileOpen = false">Posts</a> 292 </li> 293 294 <li> 295 <a href="/downloads" class="block rounded-lg px-3 py-2 tb-text-secondary hover:bg-[var(--surface-muted)] hover:tb-text-primary transition" @click="$store.frame.mobileOpen = false">Downloads</a> 296 </li> 297 298 <li> 299 <a href="/docs" class="block rounded-lg px-3 py-2 tb-text-secondary hover:bg-[var(--surface-muted)] hover:tb-text-primary transition" @click="$store.frame.mobileOpen = false">Documentation</a> 300 </li> 301 302 </ul> 303 </div> 304 305 </nav> 306 307 <div class="space-y-3 border-t pt-4 tb-border-soft"> 308 <button type="button" class="flex w-full items-center justify-between rounded-lg px-3 py-2 tb-text-secondary hover:bg-[var(--surface-muted)] hover:tb-text-primary transition" @click.stop="$store.frame.toggleTheme()"> 309 <span>Switch to <span x-text="$store.frame.theme === 'dark' ? 'Light' : 'Dark'"></span> Mode</span> 310 <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"> 311 <path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2m0 14v2m10-10h-2M4 12H2m15.536-7.536-1.414 1.414M7.05 16.95l-1.414 1.414m12.728 0-1.414-1.414M7.05 7.05 5.636 5.636M16 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0Z" /> 312 </svg> 313 </button> 314 315 <a href="/login" hx-boost="false" class="site-header__auth-btn site-header__auth-btn--secondary w-full text-center" @click="$store.frame.mobileOpen = false">Sign In</a> 316 <a href="/register" hx-boost="false" class="site-header__auth-btn site-header__auth-btn--primary w-full text-center" @click="$store.frame.mobileOpen = false">Register</a> 317 </div> 318 319</div> 320 321 322 <main id="main-content" class="flex-1"> 323 324 325 326<section class="landing-hero" data-story-stop="Overview"> 327 <div class="landing-hero__inner"> 328 <div class="landing-hero__copy"> 329 330 <span class="landing-hero__eyebrow">Apprentice · Local · Private · No telemetry</span> 331 332 <h1 class="landing-hero__title">Run AI agents on your own machine.</h1> 333 <p class="landing-hero__subtitle">Apprentice is a desktop app for building your digital team: local, private agents that browse the web, work with files, run tools, and hand work to each other. No cloud middleman, no per-run fees. Bring the AI subscriptions, cloud providers, or local models you already use.</p> 334 <div class="landing-hero__actions"> 335 336 <a href="/downloads" class="btn btn-primary">Download free</a> 337 338 339 <a href="#pricing" class="btn btn-secondary">See pricing</a> 340 341 </div> 342 343 <ul class="landing-hero__trust"> 344 345 <li>
346 <svg class="landing-hero__trust-icon" viewBox="0 0 20 20" fill="none" aria-hidden="true"> 347 <path d="M4 10.5l3.5 3.5L16 5.5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 348 </svg> 349 <span>30-day full Pro trial</span> 350 </li> 351 352 <li> 353 <svg class="landing-hero__trust-icon" viewBox="0 0 20 20" fill="none" aria-hidden="true"> 354 <path d="M4 10.5l3.5 3.5L16 5.5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 355 </svg> 356 <span>No account needed</span> 357 </li> 358 359 <li> 360 <svg class="landing-hero__trust-icon" viewBox="0 0 20 20" fill="none" aria-hidden="true"> 361 <path d="M4 10.5l3.5 3.5L16 5.5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 362 </svg> 363 <span>Nothing phones home</span> 364 </li> 365 366 </ul> 367 368 </div> 369 <div class="landing-hero__visual"> 370 371 <div class="landing-hero__frame"> 372 <picture> 373 <source srcset="/static/images/apprentice-dashboard.png" media="(prefers-color-scheme: dark)"> 374 <img src="/static/images/apprentice-dashboard.png" alt="Apprentice desktop app dashboard" class="landing-hero__image" data-hero-visual> 375 </picture> 376 </div> 377 378 </div> 379 </div> 380</section> 381 382 383 384 385 386<div class="landing" data-story> 387 388 <section class="download-stats" data-scene data-story-stop="Downloads" aria-label="Download statistics"> 389 <header class="download-stats__header"> 390 <p class="scene__eyebrow reveal">Downloads</p> 391 <h2 class="download-stats__title reveal">Early days, real downloads.</h2> 392 <p class="download-stats__lead reveal">Apprentice is young and already putting agents to work. Here is the live count, straight from GitHub.</p> 393 </header> 394 <ul class="download-stats__grid reveal"> 395 <li class="download-stats__card download-stats__card--total"> 396 <span class="download-stats__value" data-count-to="1410">1.4K</span> 397 <span class="download-stats__label">Total downloads</span> 398 </li> 399 <li class="download-stats__card"> 400 <span class="download-stats__value" data-count-to="523">523</span> 401 <span class="download-stats__label">Windows</span> 402 </li> 403 <li class="download-stats__card"> 404 <span class="download-stats__value" data-count-to="441">441</span> 405 <span class="download-stats__label">macOS</span> 406 </li> 407 <li class="download-stats__card"> 408 <span class="download-stats__value" data-count-to="446">446</span> 409 <span class="download-stats__label">Linux</span> 410 </li> 411 </ul> 412 <p class="download-stats__caption reveal">GitHub download stats · no telemetry · updated hourly</p> 413 </section> 414 415 416 <section class="statement" data-scene data-story-stop="The idea"> 417 <p class="statement__text reveal">Not a chat box. Apprentice agents <em>actually use your computer</em>, driving a browser, reading and writing files, running shell tools, and calling your MCP integrations. Real work, on a real machine.</p> 418 </section> 419 420 <section class="scene" data-scene data-story-stop="Set it up"> 421 <div class="scene__inner"> 422 <p class="scene__eyebrow reveal">Set it up</p> 423 <h2 class="scene__headline reveal">Hire an agent in minutes.</h2> 424 <p class="scene__lead reveal">Give each one a purpose, a model, memory, a budget, a schedule, and exactly the tools it needs. No wiring, no glue code.</p> 425 <figure class="scene__figure reveal"> 426 <button type="button" class="scene__shot" data-lightbox-trigger aria-label="Play Any agent you need video"> 427 <video class="scene__media" muted loop playsinline preload="none" data-autoplay-in-view 428 poster="/static/images/apprentice_hire_agents-poster.jpg"
429 data-alt="Creating a new Apprentice agent from a template, with AI, or manually"> 430 <source src="/static/images/apprentice_hire_agents_1.5x.webm" type="video/webm"> 431 <source src="/static/images/apprentice_hire_agents_1.5x.mp4" type="video/mp4"> 432 </video> 433 </button> 434 <figcaption> 435 <strong>Any agent you need, in seconds</strong> 436 <span>Start from a template, build it with AI, or set it up yourself.</span> 437 </figcaption> 438 </figure> 439 </div> 440 </section> 441 442 <section class="scene" data-scene data-story-stop="Teamwork"> 443 <div class="scene__inner"> 444 <p class="scene__eyebrow reveal">Teamwork</p> 445 <h2 class="scene__headline reveal">One agent hands work to the next.</h2> 446 <p class="scene__lead reveal">Agents coordinate through chats, mentions, tasks, and shared activity, and every run is visible, so you always know what happened and why.</p> 447 <figure class="scene__figure reveal"> 448 <button type="button" class="scene__shot" data-lightbox-trigger aria-label="Play Agents that work together video"> 449 <video class="scene__media" muted loop playsinline preload="none" data-autoplay-in-view 450 poster="/static/images/apprentice_collaboration-poster.jpg" 451 data-alt="Apprentice agents coordinating and handing off work to each other"> 452 <source src="/static/images/apprentice_collaboration_3.5x.webm" type="video/webm"> 453 <source src="/static/images/apprentice_collaboration_3.5x.mp4" type="video/mp4"> 454 </video> 455 </button> 456 <figcaption> 457 <strong>Agents that work together</strong> 458 <span>
458They coordinate autonomously, decide, and hand off work to each other.</span> 459 </figcaption> 460 </figure> 461 </div> 462 </section> 463 464 <section class="scene scene--private" data-scene data-story-stop="Privacy"> 465 <div class="scene__inner"> 466 <p class="scene__eyebrow reveal">Private by design</p> 467 <h2 class="scene__headline reveal">Nothing phones home.</h2> 468 <p class="scene__lead reveal">Apprentice runs on your machine: your data, your credentials, your model providers. The Community edition sends nothing at all. Pro makes exactly one network call, checking your license is valid. That's it.</p> 469 <figure class="scene__figure reveal"> 470 <button type="button" class="scene__shot" data-lightbox-trigger aria-label="Open Providers and models screenshot"> 471 <img src="/static/images/apprentice-provider-settings.png" alt="Apprentice provider settings with connected account and model list" loading="lazy"> 472 </button> 473 <figcaption> 474 <strong>Providers & models</strong> 475 <span>Connect the runtimes your agents use, on your terms.</span> 476 </figcaption> 477 </figure> 478 <p class="scene__fineprint reveal">Even downloads are just anonymous counters, with no account, no cookies, and no personal data. <a href="/privacy">How I handle data</a>.</p> 479 </div> 480 </section> 481 482 <div class="landing-shell"> 483 484 <div class="story-handoff reveal" aria-hidden="true"> 485 <span class="story-handoff__line"></span> 486 <span class="story-handoff__label">The details</span> 487 <span class="story-handoff__line"></span> 488 </div> 489 <div class="landing-stack"> 490 <section class="landing-section use-cases" data-story-stop="Use cases"> 491 <header class="landing-section__header"> 492 <div> 493 <p class="eyebrow">Use cases</p> 494 <h2 class="landing-section__title">A teammate for the work that lives in tabs, inboxes, and dashboards.</h2> 495 </div> 496 </header> 497 <ul class="use-cases__strip"> 498 <li class="use-case"> 499 <span class="use-case__tag">Support</span> 500 <p>Triage requests, draft replies, and create follow-ups.</p> 501 </li> 502 <li class="use-case"> 503 <span class="use-case__tag">Research</span> 504 <p>Watch sites and feeds on a schedule and report what changed.</p> 505 </li> 506 <li class="use-case"> 507 <span class="use-case__tag">Community</span> 508 <p>Answer repeat questions and summarize feedback.</p> 509 </li> 510 <li class="use-case"> 511 <span class="use-case__tag">Sales</span> 512 <p>Research accounts, draft outreach, and track follow-ups.</p> 513 </li> 514 <li class="use-case"> 515 <span class="use-case__tag">Engineering</span> 516 <p>Run focused triage, release, or DevOps agents with scoped access.</p> 517 </li> 518 <li class="use-case"> 519 <span class="use-case__tag">Personal</span> 520 <p>Handle reminders, weekly reviews, and recurring admin.</p> 521 </li> 522 </ul> 523 <p class="use-cases__note">A few examples, not a menu. If you can describe the job, you can build an agent for it. <strong>Your needs are the only limit.</strong></p> 524 </section> 525 526 <section class="landing-section apprentice-safety"> 527 <header class="landing-section__header"> 528 <div> 529 <p class="eyebrow">You stay in control</p> 530 <h2 class="landing-section__title">Autonomy, inside boundaries you set.</h2> 531 </div> 532 </header> 533 <div class="apprentice-safety__grid"> 534 <article class="safety-card"> 535 <h3>Sandboxed by default</h3> 536 <p>Each agent runs in its own isolated Docker container and touches only the directories you allow.</p> 537 </article> 538 <article class="safety-card"> 539 <h3>Budgets that hold</h3> 540 <p>
540Per-agent spending caps with daily, weekly, or monthly resets. You choose what happens on overrun: pause, notify, or hard stop.</p> 541 </article> 542 <article class="safety-card"> 543 <h3>Guardrails and permissions</h3> 544 <p>AI-moderated guardrails, command allow and block lists, website filtering, and a permission broker for sensitive actions.</p> 545 </article> 546 <article class="safety-card"> 547 <h3>Everything on the record</h3> 548 <p>Every run is logged on your machine. See what each agent did, when, and why.</p> 549 </article> 550 </div> 551 </section> 552 553 <section class="landing-section apprentice-fits"> 554 <header class="landing-section__header"> 555 <div> 556 <p class="eyebrow">Bring your own AI</p> 557 <h2 class="landing-section__title">Works with the models and channels you already use.</h2> 558 </div> 559 </header> 560 <div class="apprentice-fits__groups"> 561 <div class="apprentice-fits__group"> 562 <h3>Providers</h3> 563 <ul class="chip-list"> 564 <li>Claude Code</li> 565 <li>Codex</li> 566 <li>Antigravity CLI</li> 567 <li>ChatGPT Subscription</li> 568 <li>Anthropic / Claude API</li> 569 <li>Google / Gemini API</li> 570 <li>OpenAI</li> 571 <li>xAI (Grok)</li> 572 <li>DeepSeek</li> 573 <li>Mistral</li> 574 <li>Kimi (Moonshot)</li> 575 <li>GLM (Zhipu)</li> 576 <li>Qwen (Alibaba)</li> 577 <li>Groq</li> 578 <li>Cerebras</li> 579 <li>Fireworks</li> 580 <li>Together.ai</li> 581 <li>OpenRouter</li> 582 <li>NeuralWatt</li> 583 <li>OpenCode Go</li> 584 <li>Kilo Gateway</li> 585 <li>Ollama</li> 586 <li>Ollama Cloud</li> 587 <li>LM Studio</li> 588 <li>Docker Model Runner</li> 589 </ul> 590 <p class="apprentice-fits__note">API keys, the AI subscriptions you already pay for, or fully local models. No markup on model calls. Image generation included, with Nano Banana via Google Gemini and GPT Image and DALL-E via OpenAI.</p> 591 </div> 592 <div class="apprentice-fits__group"> 593 <h3>Triggers & channels</h3> 594 <ul class="chip-list"> 595 <li>Telegram</li> 596 <li>Discord</li> 597 <li>Slack</li> 598 <li>Signal</li> 599 <li>WhatsApp</li> 600 <li>Twitch</li> 601 <li>Email</li> 602 <li>Cron schedules</li> 603 </ul> 604 <p class="apprentice-fits__note">Message an agent from your phone or put it on a schedule. It works while you don't.</p> 605 </div> 606 </div> 607 </section> 608 609 <section class="landing-section apprentice-compare"> 610 <header class="landing-section__header"> 611 <div> 612 <p class="eyebrow">Why local</p> 613 <h2 class="landing-section__title">Cloud platforms charge per task, forever. Apprentice doesn't.</h2> 614 </div> 615 </header> 616 <div class="apprentice-compare__scroll"> 617 <table class="apprentice-compare__table"> 618 <thead> 619 <tr> 620 <th scope="col"></th> 621 <th scope="col">Apprentice</th> 622 <th scope="col">Cloud agent platforms</th> 623 </tr> 624 </thead> 625 <tbody> 626 <tr> 627 <th scope="row">Where agents run</th> 628 <td>On your machine, sandboxed in Docker</td> 629 <td>On someone else's servers</td> 630 </tr> 631 <tr> 632 <th scope="row">Pricing</th> 633 <td>Free, or a flat subscription with no per-task fees</td> 634 <td>Per task, per run, or per seat, forever</td> 635 </tr> 636 <tr> 637 <th scope="row">Your data</th> 638 <td>Never leaves your computer</td> 639 <td>Passes through their cloud</td> 640 </tr> 641 <tr> 642 <th scope="row">Model costs</th> 643 <td>Your keys and subscriptions, no markup</td> 644 <td>Bundled credits with a margin</td> 645 </tr> 646 <tr> 647 <th scope="row">What agents can do</th> 648 <td>Use a real computer: browser, files, shell, MCP</td> 649 <td>Whatever connectors they offer</td> 650 </tr> 651 </tbody> 652 </table> 653 </div> 654 </section> 655 656 <section id="pricing" class="landing-section apprentice-pricing"> 657 <header class="landing-section__header"> 658 <div> 659 <p class="eyebrow">Pricing</p> 660 <h2 class="landing-section__title">Start free. Upgrade when your agent team grows.</h2> 661 <p class="apprentice-pricing__assurance">Every install starts a <strong>30-day full Pro trial</strong>. Every paid tier includes a <strong>30-day money-back guarantee</strong>.</p> 662 </div> 663 </header> 664 <div class="apprentice-pricing__grid"> 665 <article class="apprentice-price"> 666 <div> 667 <p class="apprentice-price__label">Community</p> 668 <h3 class="apprentice-price__price">
668Free <span class="apprentice-price__cycle">forever</span></h3> 669 <p class="apprentice-price__body">The full product for one agent at a time. No account, no telemetry, no time limit.</p> 670 <ul class="apprentice-price__features"> 671 <li>Up to 3 agents, 1 active at a time</li> 672 <li>1 run at a time</li> 673 <li>Every integration, guardrail, and budget control included</li> 674 <li>Local models, cloud APIs, or your AI subscriptions</li> 675 </ul> 676 </div> 677 <div class="apprentice-price__actions"> 678 <a href="/downloads" class="btn btn-secondary" 679 data-track-event="download_clicked" 680 data-track-prop-location="pricing">Download free</a> 681 </div> 682 </article> 683 <article class="apprentice-price apprentice-price--featured" x-data="{ billing: 'yearly' }"> 684 <div> 685 <div class="apprentice-price__header"> 686 <p class="apprentice-price__label">Pro</p> 687 <div class="apprentice-price__toggle" role="tablist" aria-label="Billing period"> 688 <button type="button" class="apprentice-price__toggle-option" role="tab" 689 :class="{ 'apprentice-price__toggle-option--active': billing === 'yearly' }" 690 :aria-selected="billing === 'yearly'" 691 @click="billing = 'yearly'"> 692 Yearly <span class="apprentice-price__toggle-tag">Founding price</span> 693 </button> 694 <button type="button" class="apprentice-price__toggle-option" role="tab" 695 :class="{ 'apprentice-price__toggle-option--active': billing === 'monthly' }" 696 :aria-selected="billing === 'monthly'" 697 @click="billing = 'monthly'"> 698 Monthly 699 </button> 700 </div> 701 </div> 702 <div x-show="billing === 'yearly'"> 703 704 <h3 class="apprentice-price__price"><s class="apprentice-price__strike">â¬99</s> â¬59 <span class="apprentice-price__cycle">/ year</span></h3> 705 <p class="apprentice-price__hint">Founding price for early customers, locked in for as long as you stay subscribed. That's â¬4.92 a month, billed yearly.</p> 706 707 </div> 708 <div x-show="billing === 'monthly'" x-cloak> 709 <h3 class="apprentice-price__price">â¬9.9 <span class="apprentice-price__cycle">/ month</span></h3> 710 <p class="apprentice-price__hint">Billed monthly, cancel anytime. Switch to yearly to lock in the â¬59 founding price.</p> 711 </div> 712 <p class="apprentice-price__body">Your whole agent team, working in parallel.</p> 713 <ul class="apprentice-price__features"> 714 <li>Unlimited agents, all running in parallel</li> 715 <li>Use on 2 devices, up to 2 device changes a year</li> 716 <li x-show="billing === 'yearly'">Perpetual fallback license: cancel and keep the versions you paid for</li> 717 <li>Direct support from me</li> 718 </ul> 719 </div> 720 <div class="apprentice-price__actions"> 721 <button type="button" class="btn btn-primary" 722 x-show="billing === 'yearly'" 723 data-checkout-offer="yearly" 724 data-track-event="pricing_offer_clicked" 725 data-track-prop-offer="yearly" 726 data-track-prop-location="pricing">Get Pro yearly</button> 727 <button type="button" class="btn btn-primary" 728 x-show="billing === 'monthly'" 729 x-cloak 730 data-checkout-offer="monthly" 731 data-track-event="pricing_offer_clicked" 732 data-track-prop-offer="monthly" 733 data-track-prop-location="pricing">Get Pro monthly</button> 734 </div> 735 </article> 736 737 <article class="apprentice-price"> 738 <div> 739 <p class="apprentice-price__label">Lifetime <span class="apprentice-price__badge apprentice-price__badge--scarce">Limited</span></p> 740 <h3 class="apprentice-price__price">â¬249 <span class="apprentice-price__cycle">one-time</span></h3> 741 <p class="apprentice-price__hint">A small, fixed batch of seats. When they're gone, this closes for good.</p> 742 <p class="apprentice-price__body">
742Pay once, own Pro forever, and fund focused development.</p> 743 <ul class="apprentice-price__features"> 744 <li>Everything in Pro, plus every future feature</li> 745 <li>Use on 2 devices, up to 2 device changes a year</li> 746 <li>1 year of direct support</li> 747 <li>Lifetime member badge and roadmap priority</li> 748 </ul> 749 </div> 750 <div class="apprentice-price__actions"> 751 <button type="button" class="btn btn-secondary" 752 data-checkout-offer="lifetime" 753 data-track-event="pricing_offer_clicked" 754 data-track-prop-offer="lifetime" 755 data-track-prop-location="pricing">Get lifetime</button> 756 </div> 757 </article> 758 759 </div> 760 <p class="apprentice-pricing__note" data-checkout-feedback aria-live="polite"></p> 761 762 <div class="pricing-faq"> 763 <h3 class="pricing-faq__title">Pricing questions</h3> 764 765 <details class="pricing-faq__item"> 766 <summary>What is the founding price?</summary> 767 <p>The list price for Pro is â¬99/year. While the founding offer lasts, early customers pay â¬59/year, and that price is kept for as long as the subscription stays active. No silent hikes. If you cancel and come back later, you pay the price at that time.</p> 768 </details> 769 770 <details class="pricing-faq__item"> 771 <summary>What happens if I cancel Pro?</summary> 772 <p>Yearly Pro includes a perpetual fallback license: after your paid year, you keep using the newest version released while you were subscribed, forever. You only lose access to newer updates and direct support. Monthly Pro does not include the fallback license.</p> 773 </details> 774 <details class="pricing-faq__item"> 775 <summary>How does the free trial work?</summary> 776 <p>Every install starts with 30 days of the full Pro experience, no card required. When the trial ends, Apprentice drops to the Community edition. Nothing breaks and your agents and data stay on your machine.</p> 777 </details> 778 <details class="pricing-faq__item"> 779 <summary>What is the refund policy?</summary> 780 <p>Every paid tier has a 30-day money-back guarantee. I will ask one question, what did not work for you, so I can make Apprentice better. Your refund does not depend on the answer. It covers a lifetime purchase and the first payment of a new subscription. Renewals are not refundable, but you can cancel anytime before the next billing date.</p> 781 </details> 782 <details class="pricing-faq__item"> 783 <summary>Is the lifetime tier really limited?</summary> 784 <p>Yes. It is a single small batch of seats, sold once. When they are gone it closes permanently, with no second wave and no raised cap. Lifetime covers every future Pro feature.</p> 785 </details> 786 <details class="pricing-faq__item"> 787 <summary>How many devices, and what about VAT?</summary> 788 <p>Each license runs on 2 devices at once, and you can change devices up to twice a year, so a license stays with you rather than being shared across a rotating set of machines. Payments are handled by Paddle as the merchant of record; VAT or sales tax is calculated at checkout based on your country.</p> 789 </details> 790 </div> 791 </section> 792 793 <section class="landing-section apprentice-download"> 794 795 796 <header class="landing-section__header"> 797 <div> 798 <p class="eyebrow">Download</p> 799 <h2 class="landing-section__title">Latest version</h2> 800 </div> 801 <div class="apprentice-updates__links">
802 <a href="/releases/v2026.08.12" class="landing-section__link">Release notes</a> 803 <a href="/releases" class="landing-section__link">All releases</a> 804 </div> 805 </header> 806 <div class="apprentice-download__panel"> 807 <div class="apprentice-download__info"> 808 <h2 class="apprentice-download__title">Apprentice <span>v2026.08.12</span></h2> 809 810 <p class="apprentice-download__meta">Released Aug 12, 2026</p> 811 </div> 812 <div class="apprentice-download__actions"> 813 <a href="/downloads" class="btn btn-primary" 814 data-track-event="download_clicked" 815 data-track-prop-location="latest_version">Download free</a> 816 </div> 817 </div> 818 819 </section> 820 821 <section class="landing-section apprentice-founder"> 822 <div class="apprentice-founder__inner"> 823 <p class="eyebrow">From the maker</p> 824 <p class="apprentice-founder__text">I'm Ilgit, and Apprentice is a one-person product on purpose. No investors pushing per-seat pricing, no growth team, no telemetry dashboards. I run my own agents with it every day, and I answer support tickets myself. If it doesn't earn its place on your machine, there's a 30-day refund.</p> 825 <div class="apprentice-founder__actions"> 826 <a href="/about" class="landing-section__link">About me</a> 827 <a href="/contact" class="landing-section__link">Say hello</a> 828 </div> 829 </div> 830 </section> 831 832 <section class="landing-section apprentice-posts"> 833 <header class="landing-section__header"> 834 <div> 835 <p class="eyebrow">Blog</p> 836 <h2 class="landing-section__title">Latest posts</h2> 837 </div> 838 <div class="apprentice-updates__links"> 839 <a href="/posts" class="landing-section__link">All posts</a> 840 </div> 841 </header> 842 <div class="apprentice-posts__grid"> 843 844 <a href="/posts/dario-amodei-said-open-source-ai-was-a-dangerous-path-three-years-later-he-is-still-wrong" class="update-card update-card--link"> 845 <div class="update-card__meta"> 846 847 <span class="update-card__timestamp">Jul 01, 2026</span> 848 </div> 849 <h3>Dario Amodei Said Open Source AI Was a "Dangerous Path." Three Years Later, He Is Still Wrong.</h3> 850 <p>Amodei's 2023 Senate testimony calling open source AI dangerous resurfaced in 2026. Reddit's technical community fact-checked every claim and found the same pattern that began with GPT-2 in 2019: safety language that happens to benefit Anthropic's bottom line.</p> 851 </a> 852 853 <a href="/posts/sakana-ai-scientist-peer-review" class="update-card update-card--link"> 854 <div class="update-card__meta"> 855 <span class="update-card__category">AI</span> 856 <span class="update-card__timestamp">Jun 23, 2026</span> 857 </div> 858 <h3>An AI Passed Peer Review. The Team's Own Fix Proves the Problem Is Real.</h3> 859 <p>Sakana AI's AI Scientist scored higher than 55% of human submissions at ICLR 2025. Each paper cost $15. Nature published a paper about the system. The team's recommended fix is an admission the existing system cant tell the difference.</p> 860 </a> 861 862 <a href="/posts/sakana-fugu-ultra-orchestrator-benchmark" class="update-card update-card--link"> 863 <div class="update-card__meta">
864 <span class="update-card__category">AI</span> 865 <span class="update-card__timestamp">Jun 23, 2026</span> 866 </div> 867 <h3>Fugu Ultra Is an Orchestrator. The Benchmarks Are Someone Else's.</h3> 868 <p>Sakana AI's Fugu Ultra benchmarks match Anthropic's best model. But the scores belong to GPT-5 and Claude Sonnet 4. Here is what Fugu actually is, and what it isnt.</p> 869 </a> 870 871 </div> 872 </section> 873 874 875<section id="newsletter-cta" class="newsletter-cta"> 876 <div class="newsletter-cta__content"> 877 878 <p class="eyebrow">Stay in the loop</p> 879 880 <h2 class="newsletter-cta__title">Get notified when it matters</h2> 881 882 <p class="newsletter-cta__subtitle">Dev logs, releases, and important updates. No spam, ever.</p> 883 884 </div> 885 <form action="/newsletter/subscribe" method="post" class="newsletter-cta__form"> 886 <input type="hidden" name="_csrf" value="cdbda588-6f73-40fe-81cd-00660d23d500"> 887 <input type="hidden" name="source" value=""> 888 <div class="newsletter-cta__input-group"> 889 <label for="newsletter-email-newsletter" class="sr-only">Email address</label> 890 <input 891 id="newsletter-email-newsletter" 892 type="email" 893 name="email" 894 895 placeholder="Enter your email" 896 required 897 autocomplete="email" 898 > 899 <button type="submit" class="btn btn-primary">Subscribe</button> 900 </div> 901 902 903 904 <div class="cap-widget-wrapper" style="margin-top: 0.75rem;"> 905
905<script>window.CAP_CUSTOM_WASM_URL="/static/wasm/cap_wasm_bg.wasm";</script>
905 906
906<script type="module" src="/static/js/cap-widget.js"></script>
906 907 <cap-widget data-cap-api-endpoint="/cap/1094d53da9/"></cap-widget> 908 </div> 909 910 <p class="newsletter-cta__note">Unsubscribe anytime with one click.</p> 911 </form> 912</section> 913 914 </div> 915 </div> 916 917 <div class="apprentice-lightbox" data-lightbox hidden role="dialog" aria-modal="true" aria-label="Apprentice screenshot gallery"> 918 <button type="button" class="apprentice-lightbox__close" data-lightbox-close aria-label="Close screenshot viewer">Close</button> 919 <button type="button" class="apprentice-lightbox__nav apprentice-lightbox__nav--prev" data-lightbox-prev aria-label="Previous screenshot">â¹</button> 920 <figure class="apprentice-lightbox__figure"> 921 <img src="" alt="" data-lightbox-image> 922 <video data-lightbox-video controls loop muted playsinline preload="metadata" hidden></video> 923 <figcaption class="apprentice-lightbox__caption"> 924 <strong data-lightbox-title></strong> 925 <span data-lightbox-caption></span> 926 </figcaption> 927 </figure> 928 <button type="button" class="apprentice-lightbox__nav apprentice-lightbox__nav--next" data-lightbox-next aria-label="Next screenshot">âº</button> 929 </div> 930</div> 931 932 933 </main> 934 935 936<footer class="border-t tb-border-soft tb-bg-muted"> 937 <div class="mx-auto flex w-full max-w-7xl flex-col gap-8 px-6 py-10 text-sm tb-text-muted sm:px-6 lg:flex-row lg:items-center lg:justify-between lg:px-10"> 938 <div class="space-y-3"> 939 <p class="text-sm font-semibold tb-text-secondary">TripleBits</p> 940 <p class="text-[11px] tb-text-muted">© 2026 TripleBits. Apprentice - Software for Agents.</p> 941 <div class="flex flex-wrap items-center gap-4 text-xs"> 942 <a href="/about" class="transition-colors hover:text-[var(--text-primary)]">About</a> 943 <a href="/privacy" class="transition-colors hover:text-[var(--text-primary)]">Privacy</a> 944 <a href="/terms" class="transition-colors hover:text-[var(--text-primary)]">Terms</a> 945 <a href="/help" class="transition-colors hover:text-[var(--text-primary)]">Support</a> 946 <a href="/contact" class="transition-colors hover:text-[var(--text-primary)]">Contact</a> 947 </div> 948 </div> 949 <div class="flex flex-col gap-3"> 950 <p class="text-[11px] tb-text-muted">Social</p> 951 <div class="flex flex-wrap items-center gap-3 text-xs"> 952 <a href="https://discord.gg/WmWxYbeJuu" class="transition-colors hover:text-[var(--text-primary)]">Discord</a> 953 <a href="https://www.reddit.com/user/triplebits/" class="transition-colors hover:text-[var(--text-primary)]">Reddit</a> 954 <a href="https://github.com/ilgityildirim?tab=repositories" class="transition-colors hover:text-[var(--text-primary)]">GitHub</a> 955 <a href="https://youtube.com/@triplebits" class="transition-colors hover:text-[var(--text-primary)]">YouTube</a> 956 <a href="https://bsky.app/profile/ilgityildirim.bsky.social" class="transition-colors hover:text-[var(--text-primary)]">Bluesky</a> 957 </div> 958 </div> 959 </div> 960</footer> 961 962 963</div> 964 965 <div id="loading-bar" class="htmx-indicator fixed inset-x-0 top-0 z-[9999] h-1 origin-left scale-x-0 bg-gradient-to-r from-accent-solid to-accent-solid-alt transition-transform duration-300"></div>
966<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a43cced89a9a92b6',t:'MTc5MDg3MTc2NQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
966</body> 967</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.