PageSourceSearch

https://triplebits.com/

html triplebits.com collected 2026-10-01 16:22:46 UTC 58,104 bytes, 967 lines download raw bytes

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 &amp; 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 &amp; 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 &#34;Dangerous Path.&#34; Three Years Later, He Is Still Wrong.</h3>
850                        <p>Amodei&#39;s 2023 Senate testimony calling open source AI dangerous resurfaced in 2026. Reddit&#39;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&#39;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&#39;s Own Fix Proves the Problem Is Real.</h3>
859                        <p>Sakana AI&#39;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&#39;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&#39;s.</h3>
868                        <p>Sakana AI&#39;s Fugu Ultra benchmarks match Anthropic&#39;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">&copy; 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.