aidn commited on
Commit
8c557f2
·
verified ·
1 Parent(s): 95e4820

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +597 -358
index.html CHANGED
@@ -3,384 +3,623 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>pi agents setup | valantic insights</title>
7
- <script src="https://cdn.tailwindcss.com"></script>
8
  <style>
9
- /* valantic CI Colors & Typography */
10
- @font-face {
11
- font-family: 'Segoe UI Variable';
12
- src: local('Segoe UI Variable'), local('Segoe UI'), local('Helvetica Neue'), sans-serif;
13
- }
14
-
15
- :root {
16
- --v-black: #100C2A;
17
- --v-red: #FF4B4B;
18
- --v-orange: #FF744F;
19
- --v-indigo: #193773;
20
- --v-silver: #cdcdcd;
21
- }
22
-
23
- body {
24
- font-family: 'Segoe UI Variable', 'Segoe UI', system-ui, sans-serif;
25
- background-color: #ffffff;
26
- color: var(--v-black);
27
- overflow-x: hidden;
28
- }
29
-
30
- /* Topographic Route A Background (NO SVG) */
31
- .topo-bg {
32
- position: fixed;
33
- top: 0; left: 0; right: 0; bottom: 0;
34
- z-index: 0;
35
- pointer-events: none;
36
- background-image:
37
- repeating-radial-gradient(circle at -10% -10%, transparent, transparent 40px, rgba(255, 75, 75, 0.03) 40px, rgba(255, 75, 75, 0.03) 41px),
38
- repeating-radial-gradient(circle at 110% 50%, transparent, transparent 60px, rgba(255, 116, 79, 0.02) 60px, rgba(255, 116, 79, 0.02) 62px);
39
- opacity: 0.8;
40
- }
41
-
42
- /* Gradients & Text */
43
- .bg-v-gradient {
44
- background: linear-gradient(315deg, var(--v-red), var(--v-orange));
45
- }
46
- .text-gradient {
47
- background: linear-gradient(315deg, var(--v-red), var(--v-orange));
48
- -webkit-background-clip: text;
49
- -webkit-text-fill-color: transparent;
50
- display: inline-block;
51
- }
52
-
53
- /* Pill Shapes & UI */
54
- .pill-inactive {
55
- border: 1px solid var(--v-black);
56
- background-color: #ffffff;
57
- color: var(--v-black);
58
- border-radius: 999px;
59
- transition: all 0.3s ease;
60
- }
61
- .pill-active {
62
- border: 1px solid var(--v-indigo);
63
- background-color: var(--v-indigo);
64
- color: #ffffff;
65
- border-radius: 999px;
66
- transition: all 0.3s ease;
67
- }
68
-
69
- /* valantic Custom Bullets */
70
- ul.v-list {
71
- list-style: none;
72
- padding-left: 0;
73
- }
74
- ul.v-list li {
75
- position: relative;
76
- padding-left: 1.5rem;
77
- margin-bottom: 0.5rem;
78
- }
79
- ul.v-list li::before {
80
- content: '';
81
- position: absolute;
82
- left: 0;
83
- top: 0.6rem;
84
- width: 8px;
85
- height: 8px;
86
- border-radius: 50%;
87
- background: linear-gradient(315deg, var(--v-red), var(--v-orange));
88
- }
89
-
90
- .glass-card {
91
- background: rgba(255, 255, 255, 0.9);
92
- backdrop-filter: blur(10px);
93
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  </style>
95
  </head>
96
- <body class="antialiased relative selection:bg-[#193773] selection:text-white">
97
-
98
- <!-- Chosen Palette: valantic CI (White, valantic Black #100C2A, Red 01 #FF4B4B, valantic Orange #FF744F, Indigo #193773, Silver #cdcdcd) -->
99
- <!-- Application Structure Plan: Designed to reflect the valantic CI "Route A". It uses extreme whitespace, lightweight typography, and asymmetrical content blocks. The layout flows from an introduction to an interactive structure explorer, then to code execution, and finally replaces the chart with an interactive Model Recommendation grid based on Hugging Face data. This categorizes complex data into digestible, human-centric UI cards with Pill filters, aligning with valantic's clean, technological, yet approachable ethos. -->
100
- <!-- Visualization & Content Choices:
101
- 1. Directory Tree -> Goal: Explain Structure -> Method: Minimalist clickable list with dynamic detail view -> Justification: Replaces static diagrams with exploratory text UI.
102
- 2. Code Blocks -> Goal: Hands-on Implementation -> Method: Pill-shaped navigation tabs changing code views -> Justification: Keeps the UI uncluttered.
103
- 3. Model Recommendations -> Goal: Filter Hugging Face Data -> Method: Interactive CSS Grid with Pill-shaped filters -> Justification: Condenses the massive scraped table into actionable, categorized insights without using SVG or complex chart libraries.
104
- -->
105
- <!-- CONFIRMATION: NO SVG graphics used. NO Mermaid JS used. Topographic lines generated via CSS repeating-radial-gradient. -->
106
-
107
- <div class="topo-bg"></div>
108
-
109
- <div class="relative z-10 max-w-7xl mx-auto px-6 sm:px-12 md:px-24 py-12">
110
-
111
- <!-- Top Nav / Logo -->
112
- <header class="mb-24 flex justify-between items-center">
113
- <div class="font-bold text-2xl tracking-tight text-[#100C2A] lowercase">valantic</div>
114
- </header>
115
-
116
- <!-- Main Title -->
117
- <section class="mb-32">
118
- <p class="text-[0.65rem] uppercase tracking-[0.2em] text-[#cdcdcd] mb-4 font-semibold">T 010 : SETUP : MAC & HUGGING FACE</p>
119
- <h1 class="text-5xl md:text-7xl font-light text-[#100C2A] leading-tight mb-6">
120
- pi agents setup <br>
121
- <span class="font-semibold text-gradient">auf dem mac</span>
122
- </h1>
123
- <p class="text-xl text-[#100C2A] max-w-2xl font-light leading-relaxed mt-8">
124
- Dein maßgeschneiderter Workflow mit Hugging Face Pro & lokaler Projektstruktur. Ein cleanes, performantes Setup für die Entwicklung autonomer Agenten, konzipiert für Effizienz und Skalierbarkeit.
125
- </p>
126
- </section>
127
-
128
- <!-- Section 1: Intro -->
129
- <section class="mb-32">
130
- <p class="text-[0.65rem] uppercase tracking-[0.2em] text-[#cdcdcd] mb-4 font-semibold">C 020 : CONCEPT : ARCHITECTURE</p>
131
- <h2 class="text-3xl md:text-4xl font-light text-[#100C2A] mb-8">
132
- isolierte <span class="font-semibold text-gradient">projektumgebung</span>
133
- </h2>
134
- <div class="grid grid-cols-1 md:grid-cols-2 gap-16">
135
- <div>
136
- <p class="text-[#100C2A] leading-relaxed mb-6">
137
- Dieser Ansatz richtet eine vollständig isolierte Umgebung für Pi Agents (oder vergleichbare Frameworks) auf macOS ein. Durch die Auslagerung der Inferenz auf die Hugging Face Serverless API eliminieren wir lokale Hardware-Engpässe.
138
- </p>
139
- <ul class="v-list text-[#100C2A]">
140
- <li>Native Nutzung des macOS Terminals</li>
141
- <li>Strikte Trennung durch Python Virtual Environments</li>
142
- <li>Unlimitierter API-Zugriff via Hugging Face Pro</li>
143
- </ul>
144
- </div>
145
- <div class="glass-card border border-[#cdcdcd] rounded-3xl p-8 flex flex-col justify-center">
146
- <div class="text-sm text-[#cdcdcd] uppercase tracking-widest mb-2 font-semibold">Core Principle</div>
147
- <div class="text-2xl font-light text-[#100C2A]">
148
- Logik lokal ausführen,<br>
149
- <span class="font-semibold text-gradient">Intelligenz in der Cloud rendern.</span>
150
- </div>
151
- </div>
152
  </div>
153
- </section>
154
-
155
- <!-- Section 2: Structure -->
156
- <section class="mb-32">
157
- <p class="text-[0.65rem] uppercase tracking-[0.2em] text-[#cdcdcd] mb-4 font-semibold">S 030 : STRUCTURE : DIRECTORY TREE</p>
158
- <h2 class="text-3xl md:text-4xl font-light text-[#100C2A] mb-12">
159
- die ideale <span class="font-semibold text-gradient">verzeichnisstruktur</span>
160
- </h2>
161
-
162
- <div class="grid grid-cols-1 md:grid-cols-12 gap-8">
163
- <div class="md:col-span-4">
164
- <div class="flex flex-col space-y-3">
165
- <button class="dir-btn pill-active px-6 py-2 text-left font-semibold text-sm w-full" onclick="showDirDetail('root', this)">pi_project/</button>
166
- <button class="dir-btn pill-inactive px-6 py-2 text-left font-semibold text-sm w-full ml-4" onclick="showDirDetail('venv', this)">.venv/</button>
167
- <button class="dir-btn pill-inactive px-6 py-2 text-left font-semibold text-sm w-full ml-4" onclick="showDirDetail('env', this)">.env</button>
168
- <button class="dir-btn pill-inactive px-6 py-2 text-left font-semibold text-sm w-full ml-4" onclick="showDirDetail('agents', this)">agents/</button>
169
- <button class="dir-btn pill-inactive px-6 py-2 text-left font-semibold text-sm w-full ml-4" onclick="showDirDetail('workspace', this)">workspace/</button>
170
- <button class="dir-btn pill-inactive px-6 py-2 text-left font-semibold text-sm w-full ml-4" onclick="showDirDetail('main', this)">main.py</button>
171
- </div>
172
- </div>
173
- <div class="md:col-span-8 flex items-center">
174
- <div class="pl-0 md:pl-12">
175
- <h3 id="dir-title" class="text-2xl font-semibold text-[#100C2A] mb-4 lowercase">pi_project/</h3>
176
- <p id="dir-desc" class="text-[#100C2A] text-lg font-light leading-relaxed">
177
- Das Hauptverzeichnis. Öffne dein Mac Terminal und erstelle es mit einem einfachen Befehl. Hier wird die gesamte Architektur deiner KI-Agenten zentral orchestriert und gesteuert.
178
- </p>
179
- </div>
180
  </div>
181
  </div>
182
- </section>
183
-
184
- <!-- Section 3: Implementation -->
185
- <section class="mb-32">
186
- <p class="text-[0.65rem] uppercase tracking-[0.2em] text-[#cdcdcd] mb-4 font-semibold">I 040 : IMPLEMENTATION : CODE & CONFIG</p>
187
- <h2 class="text-3xl md:text-4xl font-light text-[#100C2A] mb-8">
188
- hands-on <span class="font-semibold text-gradient">konfiguration</span>
189
- </h2>
190
-
191
- <div class="flex flex-wrap gap-4 mb-8">
192
- <button class="tab-btn pill-active px-6 py-2 text-sm font-semibold tracking-wide" onclick="switchTab('terminal', this)">mac terminal</button>
193
- <button class="tab-btn pill-inactive px-6 py-2 text-sm font-semibold tracking-wide" onclick="switchTab('envfile', this)">.env datei</button>
194
- <button class="tab-btn pill-inactive px-6 py-2 text-sm font-semibold tracking-wide" onclick="switchTab('python', this)">main.py</button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
 
197
- <div class="bg-[#100C2A] text-white rounded-3xl p-8 shadow-xl overflow-x-auto">
198
- <div id="tab-terminal" class="tab-content block font-mono text-sm leading-loose">
199
- <span class="text-[#cdcdcd]"># 1. Projektordner erstellen und betreten</span><br>
200
- mkdir pi_agents_workspace<br>
201
- cd pi_agents_workspace<br><br>
202
- <span class="text-[#cdcdcd]"># 2. Virtual Environment erstellen & aktivieren</span><br>
203
- python3 -m venv .venv<br>
204
- source .venv/bin/activate<br><br>
205
- <span class="text-[#cdcdcd]"># 3. Pakete installieren</span><br>
206
- <span class="text-[#FF744F]">pip install</span> huggingface_hub python-dotenv
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  </div>
208
-
209
- <div id="tab-envfile" class="tab-content hidden font-mono text-sm leading-loose">
210
- <span class="text-[#cdcdcd]"># Konfiguration der Umgebungsvariablen</span><br><br>
211
- HF_TOKEN=<span class="text-[#FF4B4B]">"hf_DeinPersoenlicherTokenHierEinfuegen"</span><br>
212
- WORKSPACE_DIR=<span class="text-[#FF4B4B]">"./workspace"</span>
 
213
  </div>
214
-
215
- <div id="tab-python" class="tab-content hidden font-mono text-sm leading-loose">
216
- <span class="text-[#FF744F]">import</span> os<br>
217
- <span class="text-[#FF744F]">from</span> dotenv <span class="text-[#FF744F]">import</span> load_dotenv<br>
218
- <span class="text-[#FF744F]">from</span> huggingface_hub <span class="text-[#FF744F]">import</span> InferenceClient<br><br>
219
-
220
- <span class="text-[#cdcdcd]"># Init</span><br>
221
- load_dotenv()<br>
222
- client = InferenceClient(model=<span class="text-[#FF4B4B]">"meta-llama/Llama-3.3-70B-Instruct"</span>, token=os.getenv(<span class="text-[#FF4B4B]">"HF_TOKEN"</span>))<br><br>
223
-
224
- <span class="text-[#FF744F]">def</span> <span class="text-white">run_agent</span>(task):<br>
225
- &nbsp;&nbsp;&nbsp;&nbsp;res = client.text_generation(task, max_new_tokens=500)<br>
226
- &nbsp;&nbsp;&nbsp;&nbsp;<span class="text-[#FF744F]">with open</span>(<span class="text-[#FF4B4B]">"workspace/out.txt"</span>, <span class="text-[#FF4B4B]">"w"</span>) <span class="text-[#FF744F]">as</span> f:<br>
227
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.write(res)<br><br>
228
-
229
- run_agent(<span class="text-[#FF4B4B]">"Initiiere Systemanalyse."</span>)
230
  </div>
231
  </div>
232
- </section>
233
-
234
- <!-- Section 4: Model Recommendations -->
235
- <section class="mb-32">
236
- <p class="text-[0.65rem] uppercase tracking-[0.2em] text-[#cdcdcd] mb-4 font-semibold">M 050 : MODELS : HUGGING FACE INFERENCE</p>
237
- <h2 class="text-3xl md:text-4xl font-light text-[#100C2A] mb-8">
238
- modellempfehlung nach <span class="font-semibold text-gradient">stärken</span>
239
- </h2>
240
- <p class="text-[#100C2A] mb-8 max-w-3xl font-light">
241
- Basierend auf aktuellen Metriken der Hugging Face Inference Providers haben wir die leistungsstärksten Modelle für deinen Agenten-Workflow kategorisiert. Wähle den Fokusbereich deines Agenten.
242
- </p>
243
-
244
- <!-- Filters -->
245
- <div class="flex flex-wrap gap-3 mb-12">
246
- <button class="filter-btn pill-active px-5 py-1.5 text-sm font-semibold tracking-wide" onclick="filterModels('all', this)">alle anzeigen</button>
247
- <button class="filter-btn pill-inactive px-5 py-1.5 text-sm font-semibold tracking-wide" onclick="filterModels('reasoning', this)">reasoning & logik</button>
248
- <button class="filter-btn pill-inactive px-5 py-1.5 text-sm font-semibold tracking-wide" onclick="filterModels('speed', this)">geschwindigkeit</button>
249
- <button class="filter-btn pill-inactive px-5 py-1.5 text-sm font-semibold tracking-wide" onclick="filterModels('vision', this)">vision & multimodal</button>
250
- <button class="filter-btn pill-inactive px-5 py-1.5 text-sm font-semibold tracking-wide" onclick="filterModels('coding', this)">code generierung</button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
  </div>
252
-
253
- <!-- Model Grid -->
254
- <div id="model-grid" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
255
- <!-- Populated by JS -->
256
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
 
258
- </section>
259
-
260
- <!-- Footer -->
261
- <footer class="mt-32 pt-8 border-t border-[#cdcdcd] flex flex-col md:flex-row justify-between items-center text-xs text-[#cdcdcd] font-semibold uppercase tracking-widest">
262
- <div class="text-[#100C2A] font-bold lowercase text-lg tracking-tight mb-4 md:mb-0">valantic</div>
263
- <div class="mb-4 md:mb-0">20. APRIL 2026</div>
264
- <div>PI AGENTS SETUP : PAGE 01</div>
265
- </footer>
266
 
267
  </div>
268
 
269
  <script>
270
- // --- Section 2: Directory Logic ---
271
- const dirData = {
272
- 'root': { title: 'pi_project/', desc: 'Das Hauptverzeichnis. Öffne dein Mac Terminal und erstelle es mit "mkdir pi_project && cd pi_project". Hier wird alles zentral gesteuert.' },
273
- 'venv': { title: '.venv/', desc: 'Das Virtual Environment. Essentiell auf dem Mac, um globale Python-Pakete von System-Bibliotheken sauber zu trennen.' },
274
- 'env': { title: '.env', desc: 'Umgebungsvariablen. Speichert deinen HF_TOKEN sicher, fernab von Versionierungssystemen wie Git.' },
275
- 'agents': { title: 'agents/', desc: 'Der modulare Ordner für die Logik. Hier liegen die system-prompts und Skripte (z.B. research_agent.py).' },
276
- 'workspace': { title: 'workspace/', desc: 'Der autonome Arbeitsbereich. Agenten legen hier generierte Dokumente, JSON-Outputs oder Logs selbstständig ab.' },
277
- 'main': { title: 'main.py', desc: 'Der Orchestrator. Lädt Tokens, initiiert den Hugging Face InferenceClient und triggert den Workflow.' }
278
- };
279
-
280
- function showDirDetail(key, btnElement) {
281
- document.getElementById('dir-title').innerText = dirData[key].title;
282
- document.getElementById('dir-desc').innerText = dirData[key].desc;
283
-
284
- document.querySelectorAll('.dir-btn').forEach(el => {
285
- el.classList.remove('pill-active');
286
- el.classList.add('pill-inactive');
287
- // reset width logic for visual hierarchy
288
- el.classList.remove('w-full');
289
- if(el.innerText !== 'pi_project/') el.classList.add('w-[calc(100%-1rem)]');
290
- });
291
-
292
- btnElement.classList.remove('pill-inactive');
293
- btnElement.classList.add('pill-active');
294
- }
295
-
296
- // --- Section 3: Tab Logic ---
297
- function switchTab(tabId, btnElement) {
298
- document.querySelectorAll('.tab-content').forEach(el => {
299
- el.classList.remove('block');
300
- el.classList.add('hidden');
301
- });
302
-
303
- document.querySelectorAll('.tab-btn').forEach(el => {
304
- el.classList.remove('pill-active');
305
- el.classList.add('pill-inactive');
306
- });
307
-
308
- const targetTab = document.getElementById('tab-' + tabId);
309
- targetTab.classList.remove('hidden');
310
- targetTab.classList.add('block');
311
-
312
- btnElement.classList.remove('pill-inactive');
313
- btnElement.classList.add('pill-active');
314
- }
315
-
316
- // --- Section 4: Model Recommendation Logic (Data extracted from prompt) ---
317
- const modelsData = [
318
- { name: "DeepSeek-R1", category: "reasoning", context: "163k", bestProvider: "Hyperbolic (Fastest)", desc: "Hervorragend für komplexe Logik, Mathematik und tiefgreifende analytische Tasks." },
319
- { name: "Llama-3.3-70B-Instruct", category: "reasoning", context: "131k", bestProvider: "Groq (Fast) / Novita (Cheap)", desc: "Ein extrem starkes Allround-Modell für Agenten mit hohem Anspruch an Textverständnis." },
320
- { name: "Llama-3.1-8B-Instruct", category: "speed", context: "16k-131k", bestProvider: "Cerebras (Fast) / Novita (Cheap)", desc: "Blitzschnell und ressourcenschonend. Perfekt für Routing oder schnelle Vorverarbeitung." },
321
- { name: "Qwen3.5-9B", category: "speed", context: "262k", bestProvider: "Together", desc: "Kompakt, aber mit gewaltigem Kontextfenster für ausgedehnte Dokumentenanalysen." },
322
- { name: "Qwen2.5-Coder-32B", category: "coding", context: "131k", bestProvider: "nscale (Cheapest/Fastest)", desc: "Führend in der Generierung, Analyse und dem autonomen Debugging von Code." },
323
- { name: "Qwen3-Coder-Next", category: "coding", context: "262k", bestProvider: "Novita", desc: "Die neueste Iteration für komplexe Programmier-Workflows." },
324
- { name: "GLM-4.5V", category: "vision", context: "65k", bestProvider: "Novita (Cheapest/Fastest)", desc: "Leistungsstarkes multimodales Modell zur Bild- und UI-Analyse." },
325
- { name: "Qwen3-VL-8B-Instruct", category: "vision", context: "131k", bestProvider: "Novita", desc: "Effizientes Vision-Modell, ideal für schnelle visuelle Verifizierungs-Agenten." }
326
- ];
327
-
328
- function renderModels(filter) {
329
- const grid = document.getElementById('model-grid');
330
- grid.innerHTML = ''; // clear current
331
-
332
- const filtered = filter === 'all'
333
- ? modelsData
334
- : modelsData.filter(m => m.category === filter);
335
-
336
- filtered.forEach(model => {
337
- const card = document.createElement('div');
338
- card.className = "border border-[#cdcdcd] rounded-2xl p-6 bg-white hover:shadow-lg transition-shadow duration-300 flex flex-col";
339
-
340
- // Category Badge styling
341
- let catColor = "text-[#cdcdcd]";
342
- if(model.category === 'reasoning') catColor = "text-[#193773]";
343
- if(model.category === 'speed') catColor = "text-[#FF744F]";
344
- if(model.category === 'coding') catColor = "text-[#100C2A]";
345
- if(model.category === 'vision') catColor = "text-[#FF4B4B]";
346
-
347
- card.innerHTML = `
348
- <div class="text-[0.65rem] uppercase tracking-widest font-bold ${catColor} mb-2">${model.category}</div>
349
- <h3 class="text-xl font-semibold text-[#100C2A] mb-3">${model.name}</h3>
350
- <p class="text-sm text-[#100C2A] font-light mb-6 flex-grow">${model.desc}</p>
351
- <div class="bg-stone-50 p-3 rounded-xl border border-stone-100 text-xs text-[#100C2A]">
352
- <div class="flex justify-between mb-1">
353
- <span class="font-semibold">Context:</span>
354
- <span>${model.context}</span>
355
- </div>
356
- <div class="flex justify-between">
357
- <span class="font-semibold">Top Provider:</span>
358
- <span class="text-right">${model.bestProvider}</span>
359
- </div>
360
- </div>
361
- `;
362
- grid.appendChild(card);
363
- });
364
- }
365
-
366
- function filterModels(category, btnElement) {
367
- // update buttons
368
- document.querySelectorAll('.filter-btn').forEach(el => {
369
- el.classList.remove('pill-active');
370
- el.classList.add('pill-inactive');
371
- });
372
- btnElement.classList.remove('pill-inactive');
373
- btnElement.classList.add('pill-active');
374
-
375
- // render grid
376
- renderModels(category);
377
- }
378
-
379
- // Initialize Grid on load
380
- document.addEventListener("DOMContentLoaded", () => {
381
- renderModels('all');
382
  });
383
-
 
 
 
 
 
 
384
  </script>
385
  </body>
386
  </html>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>pi setup guide | valantic</title>
 
7
  <style>
8
+ @import url('https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,300;9..40,400;9..40,600;9..40,700&display=swap');
9
+
10
+ :root {
11
+ --black: #100C2A;
12
+ --red: #FF4B4B;
13
+ --orange: #FF744F;
14
+ --indigo: #193773;
15
+ --silver: #cdcdcd;
16
+ --bg: #ffffff;
17
+ }
18
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
19
+ body {
20
+ font-family: 'DM Sans', 'Segoe UI', system-ui, sans-serif;
21
+ background: var(--bg); color: var(--black); overflow-x: hidden;
22
+ }
23
+
24
+ /* Topographic rings — Route A: top-right corner */
25
+ .topo {
26
+ position: fixed; top: -28vw; right: -18vw;
27
+ width: 72vw; height: 72vw; border-radius: 50%;
28
+ pointer-events: none; z-index: 0;
29
+ box-shadow:
30
+ 0 0 0 1px rgba(255,75,75,.05),
31
+ 0 0 0 38px rgba(255,75,75,.04),
32
+ 0 0 0 76px rgba(255,116,79,.033),
33
+ 0 0 0 114px rgba(255,75,75,.026),
34
+ 0 0 0 152px rgba(255,116,79,.019),
35
+ 0 0 0 190px rgba(255,75,75,.013),
36
+ 0 0 0 228px rgba(255,116,79,.008),
37
+ 0 0 0 266px rgba(255,75,75,.005),
38
+ 0 0 0 304px rgba(255,116,79,.003);
39
+ }
40
+
41
+ .wrap { position: relative; z-index: 1; max-width: 1080px; margin: 0 auto; padding: 0 2.25rem; }
42
+
43
+ /* Typography */
44
+ .grad {
45
+ background: linear-gradient(315deg, var(--red), var(--orange));
46
+ -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
47
+ }
48
+ .eyebrow {
49
+ display: block; font-size: .6rem; letter-spacing: .2em;
50
+ text-transform: uppercase; color: var(--silver); font-weight: 600; margin-bottom: .9rem;
51
+ }
52
+ .h1 { font-size: clamp(2.5rem, 6vw, 4.8rem); font-weight: 300; line-height: 1.09; letter-spacing: -.03em; }
53
+ .h1 strong { font-weight: 600; }
54
+ .h2 { font-size: clamp(1.6rem, 3.2vw, 2.6rem); font-weight: 300; line-height: 1.15; letter-spacing: -.025em; }
55
+ .h2 strong { font-weight: 600; }
56
+ .lead { font-weight: 300; font-size: 1rem; line-height: 1.8; }
57
+ .mono { font-family: 'SF Mono','Cascadia Code','Fira Code',monospace; }
58
+ .rule { height: 1px; background: linear-gradient(90deg, transparent, var(--silver) 40%, transparent); }
59
+
60
+ /* Pills */
61
+ .pill {
62
+ border-radius: 999px; cursor: pointer; transition: all .22s ease;
63
+ font-size: .78rem; font-weight: 600; letter-spacing: .01em;
64
+ padding: .38rem 1rem; border: 1.5px solid;
65
+ font-family: inherit;
66
+ }
67
+ .pill-off { border-color: #ccc; background: #fff; color: var(--black); }
68
+ .pill-off:hover { border-color: var(--indigo); color: var(--indigo); }
69
+ .pill-on { border-color: var(--indigo); background: var(--indigo); color: #fff; }
70
+
71
+ /* Cards */
72
+ .card { border: 1.5px solid #e8e8e8; border-radius: 18px; padding: 1.5rem; background: #fff; transition: border-color .2s, box-shadow .2s; }
73
+ .card:hover { border-color: #bbb; box-shadow: 0 6px 24px rgba(16,12,42,.06); }
74
+ .card-glass { background: rgba(255,255,255,.9); backdrop-filter: blur(14px); border: 1px solid rgba(205,205,205,.5); border-radius: 22px; padding: 1.8rem; }
75
+
76
+ /* Bullets */
77
+ ul.vl { list-style: none; }
78
+ ul.vl li { position: relative; padding-left: 1.2rem; margin-bottom: .45rem; line-height: 1.65; font-weight: 300; font-size: .9rem; }
79
+ ul.vl li::before { content: ''; position: absolute; left: 0; top: .55rem; width: 6px; height: 6px; border-radius: 50%; background: linear-gradient(315deg, var(--red), var(--orange)); }
80
+
81
+ /* Code */
82
+ .cb {
83
+ background: var(--black); border-radius: 20px; padding: 1.6rem 1.8rem;
84
+ overflow-x: auto; font-family: 'SF Mono','Cascadia Code','Fira Code',monospace;
85
+ font-size: .78rem; line-height: 1.9; color: #abb2bf;
86
+ }
87
+ .cb .c { color: #4a5568; }
88
+ .cb .k { color: var(--orange); }
89
+ .cb .s { color: #e06c75; }
90
+ .cb .b { color: #61afef; }
91
+ .cb .hi { color: #e5c07b; }
92
+
93
+ /* Chip */
94
+ .chip { display: inline-flex; align-items: center; gap: 5px; padding: 3px 11px; border-radius: 999px; border: 1px solid #e2e2e2; font-size: .7rem; font-weight: 500; background: #fafafa; }
95
+ .chip-dot { width: 6px; height: 6px; border-radius: 50%; background: linear-gradient(315deg, var(--red), var(--orange)); flex-shrink: 0; }
96
+
97
+ /* tmux */
98
+ .tmux-wrap { background: #0d1117; border-radius: 20px; padding: 1.5rem; border: 1px solid #21262d; }
99
+ .tmux-bar { display: flex; gap: 6px; align-items: center; margin-bottom: 1.2rem; }
100
+ .tdot { width: 10px; height: 10px; border-radius: 50%; }
101
+ .tpane { background: #010409; border-radius: 12px; padding: 1rem 1.2rem; font-family: 'SF Mono','Cascadia Code','Fira Code',monospace; font-size: .73rem; line-height: 1.75; border: 1px solid #21262d; }
102
+ .tpane-title { font-size: .55rem; letter-spacing: .12em; text-transform: uppercase; color: #484f58; font-weight: 600; margin-bottom: .5rem; font-family: 'DM Sans',sans-serif; }
103
+
104
+ /* Grid */
105
+ .g2 { display: grid; grid-template-columns: 1fr 1fr; gap: 1.2rem; }
106
+ .g3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 1.2rem; }
107
+ .g4 { display: grid; grid-template-columns: repeat(4,1fr); gap: 1rem; }
108
+ @media(max-width:860px){ .g3,.g4 { grid-template-columns: 1fr 1fr; } }
109
+ @media(max-width:560px){ .g2,.g3,.g4 { grid-template-columns: 1fr; } }
110
+
111
+ section { padding: 4.5rem 0; }
112
+ section + section { border-top: 1px solid #f0f0f0; }
113
+ .hidden { display: none !important; }
114
+
115
+ /* Model card cat colors */
116
+ .cat-r { color: var(--indigo); }
117
+ .cat-s { color: var(--orange); }
118
+ .cat-c { color: var(--black); }
119
+ .cat-v { color: var(--red); }
120
+
121
+ ::-webkit-scrollbar { width: 3px; height: 3px; }
122
+ ::-webkit-scrollbar-thumb { background: var(--silver); border-radius: 99px; }
123
  </style>
124
  </head>
125
+ <body>
126
+
127
+ <div class="topo"></div>
128
+ <div class="wrap">
129
+
130
+ <!-- HEADER -->
131
+ <header style="padding:2.2rem 0 0;display:flex;justify-content:space-between;align-items:center;">
132
+ <div style="font-weight:700;font-size:1.1rem;letter-spacing:-.02em;">valantic</div>
133
+ <div style="font-size:.58rem;letter-spacing:.18em;text-transform:uppercase;color:var(--silver);font-weight:600;">Intelligence &amp; Engineering</div>
134
+ </header>
135
+
136
+ <!-- HERO -->
137
+ <section style="padding-top:4rem;">
138
+ <span class="eyebrow">setup guide · pi coding agent · hugging face</span>
139
+ <h1 class="h1" style="margin-bottom:1.4rem;">
140
+ pi agents<br>
141
+ <strong class="grad">aufsetzen &amp; nutzen</strong>
142
+ </h1>
143
+ <div class="rule" style="max-width:180px;margin-bottom:1.8rem;"></div>
144
+ <p class="lead" style="max-width:620px;margin-bottom:1.8rem;">
145
+ <strong style="font-weight:600;">pi</strong> ist ein minimaler, radikal erweiterbarer Terminal-Agent. Dieser Guide führt vom ersten Install bis zum laufenden Multi-Agent-Setup mit tmux — inklusive AGENTS.md, Skills und Hugging Face Inference.
146
+ </p>
147
+ <div style="display:flex;flex-wrap:wrap;gap:.55rem;">
148
+ <span class="chip"><span class="chip-dot"></span>npm install -g @mariozechner/pi-coding-agent</span>
149
+ <span class="chip"><span class="chip-dot"></span>15+ Provider</span>
150
+ <span class="chip"><span class="chip-dot"></span>TypeScript Extensions</span>
151
+ <span class="chip"><span class="chip-dot"></span>tmux Multi-Agent</span>
152
+ </div>
153
+ </section>
154
+
155
+ <!-- ══ 1 INSTALLATION ══ -->
156
+ <section>
157
+ <span class="eyebrow">schritt 1 · installation</span>
158
+ <h2 class="h2" style="margin-bottom:2.2rem;">pi <strong class="grad">installieren</strong></h2>
159
+ <div class="g2" style="margin-bottom:1.4rem;align-items:start;">
160
+ <div>
161
+ <p class="lead" style="margin-bottom:1.1rem;">Node.js ≥ 18 ist die einzige Voraussetzung. Pi läuft danach global als CLI.</p>
162
+ <ul class="vl">
163
+ <li>Einmalige globale Installation via npm</li>
164
+ <li>Kein Python, keine virtuellen Environments nötig</li>
165
+ <li>Authentifizierung per API-Key <em>oder</em> OAuth (<span class="mono" style="font-size:.85em;">/login</span>)</li>
166
+ <li>Anthropic Pro, OpenAI Plus, GitHub Copilot, Google Gemini via Abo</li>
167
+ <li>Provider mid-session wechseln via Ctrl+L oder <span class="mono" style="font-size:.85em;">/model</span></li>
168
+ </ul>
 
 
 
 
 
 
 
 
 
 
 
 
169
  </div>
170
+ <div class="card-glass">
171
+ <span class="eyebrow" style="color:var(--indigo);">zwei auth-wege</span>
172
+ <div class="cb" style="border-radius:14px;padding:.9rem 1.1rem;font-size:.73rem;margin-top:.6rem;">
173
+ <span class="c"># Option A — API Key</span>
174
+ export ANTHROPIC_API_KEY=sk-ant-...
175
+ pi
176
+
177
+ <span class="c"># Option B — OAuth Login</span>
178
+ pi
179
+ /login <span class="c"># Provider auswählen</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  </div>
181
  </div>
182
+ </div>
183
+ <div class="cb">
184
+ <span class="c"># Pi global installieren</span>
185
+ <span class="b">npm install -g @mariozechner/pi-coding-agent</span>
186
+
187
+ <span class="c"># Starten interaktiver Modus</span>
188
+ pi
189
+
190
+ <span class="c"># Mit initialem Prompt</span>
191
+ pi "Zeige alle .ts Dateien in src/"
192
+
193
+ <span class="c"># Non-interaktiv / für Skripte</span>
194
+ cat README.md | pi -p "Fasse zusammen"
195
+
196
+ <span class="c"># Alle 4 Modi</span>
197
+ pi <span class="c"># interactive (TUI)</span>
198
+ pi -p "query" <span class="c"># print / non-interactive</span>
199
+ pi --mode json <span class="c"># JSON event stream</span>
200
+ pi --mode rpc <span class="c"># RPC über stdin/stdout</span>
201
+ </div>
202
+ </section>
203
+
204
+ <!-- ══ 2 PROJEKTSTRUKTUR ══ -->
205
+ <section>
206
+ <span class="eyebrow">schritt 2 · projektstruktur</span>
207
+ <h2 class="h2" style="margin-bottom:2.2rem;">projekt <strong class="grad">aufbauen</strong></h2>
208
+ <div style="display:grid;grid-template-columns:1fr 1.5fr;gap:1.8rem;align-items:start;margin-bottom:1.4rem;">
209
+ <div style="display:flex;flex-direction:column;gap:.55rem;">
210
+ <button class="pill pill-on dir-btn" style="text-align:left;" onclick="showDir('root',this)">mein-projekt/</button>
211
+ <button class="pill pill-off dir-btn" style="text-align:left;margin-left:1.1rem;" onclick="showDir('pi',this)">.pi/</button>
212
+ <button class="pill pill-off dir-btn" style="text-align:left;margin-left:2.2rem;" onclick="showDir('system',this)">SYSTEM.md</button>
213
+ <button class="pill pill-off dir-btn" style="text-align:left;margin-left:2.2rem;" onclick="showDir('piset',this)">settings.json</button>
214
+ <button class="pill pill-off dir-btn" style="text-align:left;margin-left:2.2rem;" onclick="showDir('skills_dir',this)">skills/</button>
215
+ <button class="pill pill-off dir-btn" style="text-align:left;margin-left:2.2rem;" onclick="showDir('prompts_dir',this)">prompts/</button>
216
+ <button class="pill pill-off dir-btn" style="text-align:left;margin-left:2.2rem;" onclick="showDir('ext_dir',this)">extensions/</button>
217
+ <button class="pill pill-off dir-btn" style="text-align:left;" onclick="showDir('agents_md',this)">AGENTS.md</button>
218
+ <button class="pill pill-off dir-btn" style="text-align:left;" onclick="showDir('workspace',this)">workspace/</button>
219
+ </div>
220
+ <div style="padding-top:.2rem;">
221
+ <h3 id="dir-title" class="mono" style="font-size:1rem;font-weight:600;margin-bottom:.6rem;"></h3>
222
+ <p id="dir-desc" class="lead" style="font-size:.88rem;color:var(--black);"></p>
223
+ <div id="dir-code" style="margin-top:.9rem;"></div>
224
+ </div>
225
+ </div>
226
+ <div class="cb">
227
+ <span class="c"># Projektordner anlegen</span>
228
+ <span class="b">mkdir mein-projekt &amp;&amp; cd mein-projekt</span>
229
+
230
+ <span class="c"># Pi-Konfig für dieses Projekt</span>
231
+ <span class="b">mkdir -p .pi/skills/research .pi/prompts .pi/extensions</span>
232
+
233
+ <span class="c"># Kontext-Datei (wird beim Start auto-geladen)</span>
234
+ <span class="b">touch AGENTS.md</span>
235
+
236
+ <span class="c"># Projekt-System-Prompt</span>
237
+ <span class="b">touch .pi/SYSTEM.md</span>
238
+
239
+ <span class="c"># Workspace für Agent-Outputs</span>
240
+ <span class="b">mkdir -p workspace/outputs workspace/logs workspace/research</span>
241
+
242
+ <span class="c"># Pi starten — lädt alles automatisch</span>
243
+ pi
244
+ </div>
245
+ </section>
246
+
247
+ <!-- ══ 3 CONTEXT ENGINEERING ══ -->
248
+ <section>
249
+ <span class="eyebrow">schritt 3 · context engineering</span>
250
+ <h2 class="h2" style="margin-bottom:2.2rem;">AGENTS.md &amp; <strong class="grad">system prompts</strong></h2>
251
+ <div class="g2" style="margin-bottom:1.4rem;align-items:start;">
252
+ <div>
253
+ <p class="lead" style="font-size:.9rem;margin-bottom:1rem;">Pi lädt <strong>AGENTS.md</strong> automatisch — aus dem aktuellen Verzeichnis, allen Elternordnern und <span class="mono" style="font-size:.85em;">~/.pi/agent/</span>. Alle Dateien werden zusammengeführt.</p>
254
+ <ul class="vl">
255
+ <li><strong>AGENTS.md</strong> — Rolle, Regeln, Konventionen</li>
256
+ <li><strong>.pi/SYSTEM.md</strong> — ersetzt den Standard-System-Prompt</li>
257
+ <li><strong>.pi/APPEND_SYSTEM.md</strong> — ergänzt nur, ohne zu ersetzen</li>
258
+ <li>Global: <span class="mono" style="font-size:.85em;">~/.pi/agent/AGENTS.md</span></li>
259
+ <li>Deaktivieren: <span class="mono" style="font-size:.85em;">pi -nc</span></li>
260
+ </ul>
261
+ </div>
262
+ <div class="card-glass">
263
+ <span class="eyebrow" style="color:var(--indigo);">ladereihenfolge</span>
264
+ <p style="font-size:.83rem;font-weight:300;line-height:1.7;">Global (~/.pi/agent/) → Elternverzeichnisse → aktuelles Verzeichnis. Projekt überschreibt global. Pi sucht auch nach CLAUDE.md als Alias.</p>
265
  </div>
266
+ </div>
267
+ <div style="display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.9rem;">
268
+ <button class="pill pill-on tab-btn" onclick="switchTab('t_agents',this)">AGENTS.md</button>
269
+ <button class="pill pill-off tab-btn" onclick="switchTab('t_system',this)">.pi/SYSTEM.md</button>
270
+ <button class="pill pill-off tab-btn" onclick="switchTab('t_global',this)">~/.pi/agent/AGENTS.md</button>
271
+ </div>
272
+ <div class="cb">
273
+ <div id="t_agents">
274
+ <span class="c"># AGENTS.md — Projekt-Root</span>
275
+ <span class="hi">## Rolle</span>
276
+ Du bist ein autonomer Entwicklungsassistent für dieses Projekt.
277
+ Alle erzeugten Dateien kommen in ./workspace/.
278
+
279
+ <span class="hi">## Regeln</span>
280
+ - Python mit type hints und Docstrings
281
+ - Nach jeder Session eine Zeile in CHANGELOG.md
282
+ - Für Code-Tasks: Qwen2.5-Coder-32B bevorzugen
283
+ - Vor git push immer diff zeigen
284
+
285
+ <span class="hi">## Konventionen</span>
286
+ - Kommentare auf Deutsch
287
+ - Commit-Messages: Conventional Commits Format
288
+ - Tests für alle public functions
289
+ </div>
290
+ <div id="t_system" class="hidden">
291
+ <span class="c"># .pi/SYSTEM.md — ersetzt den Default-System-Prompt für dieses Projekt</span>
292
+ <span class="hi"># Research &amp; Analysis Agent</span>
293
+
294
+ Du bist ein spezialisierter Research-Agent für Marktanalysen.
295
+
296
+ Bei jeder Anfrage:
297
+ 1. Aufgabe in Teilschritte zerlegen
298
+ 2. Systematisch recherchieren (bash, web tools)
299
+ 3. Zwischenergebnisse in workspace/research/ speichern
300
+ 4. Finale Zusammenfassung mit Quellenangaben
301
+
302
+ Format: Markdown, Deutsch, sachlich.
303
+ </div>
304
+ <div id="t_global" class="hidden">
305
+ <span class="c"># ~/.pi/agent/AGENTS.md — gilt für ALLE Projekte</span>
306
+ <span class="hi">## Globale Präferenzen</span>
307
+ - Antworte auf Deutsch, außer Code-Kommentare
308
+ - Erkläre nicht was du tust, tu es einfach
309
+ - Bei Unsicherheit: kurz nachfragen statt raten
310
+
311
+ <span class="hi">## Bevorzugte Modelle</span>
312
+ - Reasoning: DeepSeek-R1 (Hyperbolic)
313
+ - Code: Qwen2.5-Coder-32B (nscale)
314
+ - Schnell: Llama-3.1-8B (Cerebras)
315
+
316
+ <span class="hi">## Safety</span>
317
+ - Niemals .env oder *secret* Dateien ausgeben
318
+ - Vor rm -rf immer nachfragen
319
+ </div>
320
+ </div>
321
+ </section>
322
+
323
+ <!-- ══ 4 SKILLS ══ -->
324
+ <section>
325
+ <span class="eyebrow">schritt 4 · skills</span>
326
+ <h2 class="h2" style="margin-bottom:2.2rem;"><strong class="grad">skills</strong> erstellen</h2>
327
+ <div class="g2" style="margin-bottom:1.4rem;align-items:start;">
328
+ <div>
329
+ <p class="lead" style="font-size:.9rem;margin-bottom:1rem;">Skills sind on-demand geladene Capability-Pakete — eine Markdown-Datei mit Anweisungen. Kein Prompt-Cache-Busting, da sie nur bei Bedarf aktiviert werden.</p>
330
+ <ul class="vl">
331
+ <li>Ablageort: <span class="mono" style="font-size:.85em;">.pi/skills/&lt;name&gt;/SKILL.md</span></li>
332
+ <li>Global: <span class="mono" style="font-size:.85em;">~/.pi/agent/skills/</span></li>
333
+ <li>Manuell aktivieren: <span class="mono" style="font-size:.85em;">/skill:name</span></li>
334
+ <li>Pi erkennt Kontext und lädt passende Skills selbst</li>
335
+ <li>Als Pi Package via npm oder git teilbar</li>
336
+ </ul>
337
+ </div>
338
+ <div class="cb" style="border-radius:16px;font-size:.73rem;">
339
+ <span class="c"># Skill anlegen</span>
340
+ <span class="b">mkdir -p .pi/skills/research</span>
341
+ <span class="b">touch .pi/skills/research/SKILL.md</span>
342
+
343
+ <span class="c"># Im Terminal aktivieren</span>
344
+ /skill:research
345
 
346
+ <span class="c"># Oder per Flag laden</span>
347
+ pi --skill .pi/skills/research/SKILL.md
348
+ </div>
349
+ </div>
350
+ <div class="cb">
351
+ <span class="c"># .pi/skills/research/SKILL.md</span>
352
+ <span class="hi"># Research Agent Skill</span>
353
+ Nutze diesen Skill bei Marktanalysen, Recherchen oder
354
+ strukturierten Informationssammlungen.
355
+
356
+ <span class="hi">## Workflow</span>
357
+ 1. Aufgabe in Teilfragen zerlegen
358
+ 2. Pro Teilfrage: bash-Recherche oder Websuche
359
+ 3. Zwischenergebnisse in workspace/research/&lt;thema&gt;/ speichern
360
+ 4. Quellen als Markdown-Liste anhängen
361
+ 5. Finales Dokument: workspace/research/summary.md
362
+
363
+ <span class="hi">## Tools</span>
364
+ - bash: curl, grep, find
365
+ - write: strukturierte Markdown-Outputs
366
+ - read: existierende Dokumente einlesen
367
+
368
+ <span class="hi">## Output-Format</span>
369
+ Markdown, H2-Abschnitte pro Teilfrage, Deutsche Sprache.
370
+ </div>
371
+ </section>
372
+
373
+ <!-- ══ 5 HUGGING FACE ══ -->
374
+ <section>
375
+ <span class="eyebrow">schritt 5 · provider</span>
376
+ <h2 class="h2" style="margin-bottom:2rem;">hugging face <strong class="grad">inference</strong></h2>
377
+ <p class="lead" style="max-width:640px;margin-bottom:1.6rem;font-size:.9rem;">HF Pro Token setzen, dann Provider in Pi auswählen oder direkt per Flag übergeben. Wechsel mid-session jederzeit via Ctrl+L.</p>
378
+ <div class="cb" style="margin-bottom:1.4rem;">
379
+ <span class="c"># Token setzen (in ~/.zshrc oder ~/.bashrc)</span>
380
+ <span class="b">export HF_TOKEN="hf_DeinTokenHier"</span>
381
+
382
+ <span class="c"># Pi starten und HF auswählen</span>
383
+ pi
384
+ /model <span class="c"># → huggingface → Modell wählen</span>
385
+
386
+ <span class="c"># Oder direkt per Flag</span>
387
+ pi --provider huggingface --model "meta-llama/Llama-3.3-70B-Instruct"
388
+
389
+ <span class="c"># Mit Thinking Level</span>
390
+ pi --model "anthropic/claude-sonnet:high" "Löse dieses komplexe Problem"
391
+
392
+ <span class="c"># Lieblings-Modelle für Ctrl+P cycling definieren</span>
393
+ pi --models "deepseek*,qwen*,llama*"
394
+ </div>
395
+ <div style="display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.2rem;">
396
+ <button class="pill pill-on filter-btn" onclick="filterModels('all',this)">alle</button>
397
+ <button class="pill pill-off filter-btn" onclick="filterModels('reasoning',this)">reasoning</button>
398
+ <button class="pill pill-off filter-btn" onclick="filterModels('speed',this)">speed</button>
399
+ <button class="pill pill-off filter-btn" onclick="filterModels('coding',this)">code</button>
400
+ <button class="pill pill-off filter-btn" onclick="filterModels('vision',this)">vision</button>
401
+ </div>
402
+ <div id="model-grid" class="g3"></div>
403
+ </section>
404
+
405
+ <!-- ══ 6 MULTI-AGENT TMUX ══ -->
406
+ <section>
407
+ <span class="eyebrow">schritt 6 · multi-agent</span>
408
+ <h2 class="h2" style="margin-bottom:2rem;">multi-agent <strong class="grad">mit tmux</strong></h2>
409
+ <p class="lead" style="max-width:680px;margin-bottom:1.8rem;font-size:.9rem;">
410
+ Pi hat bewusst keine eingebauten Sub-Agenten. Die empfohlene Lösung: mehrere Pi-Instanzen in separaten tmux-Sessions. Volle Sichtbarkeit, direktes Eingreifen, kein Magic.
411
+ </p>
412
+
413
+ <!-- tmux visual -->
414
+ <div class="tmux-wrap" style="margin-bottom:1.4rem;">
415
+ <div class="tmux-bar">
416
+ <div class="tdot" style="background:#ff5f57;"></div>
417
+ <div class="tdot" style="background:#febc2e;"></div>
418
+ <div class="tdot" style="background:#28c840;"></div>
419
+ <div style="margin-left:.6rem;font-size:.58rem;color:#484f58;font-weight:600;letter-spacing:.1em;text-transform:uppercase;font-family:'DM Sans',sans-serif;">tmux · mein-projekt</div>
420
+ </div>
421
+ <div class="g3">
422
+ <div class="tpane">
423
+ <div class="tpane-title">session: research</div>
424
+ <div style="color:#7ee787;">$ pi --provider huggingface</div>
425
+ <div style="color:#e3b341;"> ▸ DeepSeek-R1 · high</div>
426
+ <div style="color:#79c0ff;"> &gt; Analysiere Markt...</div>
427
+ <div style="color:#8b949e;"> ⠿ Searching the web</div>
428
  </div>
429
+ <div class="tpane">
430
+ <div class="tpane-title">session: coder</div>
431
+ <div style="color:#7ee787;">$ pi --provider huggingface</div>
432
+ <div style="color:#e3b341;"> ▸ Qwen2.5-Coder-32B</div>
433
+ <div style="color:#79c0ff;"> &gt; Schreibe Tests für...</div>
434
+ <div style="color:#8b949e;"> ⠿ Writing tests.py</div>
435
  </div>
436
+ <div class="tpane">
437
+ <div class="tpane-title">session: orchestrator</div>
438
+ <div style="color:#7ee787;">$ pi -c</div>
439
+ <div style="color:#e3b341;"> Llama-3.3-70B</div>
440
+ <div style="color:#79c0ff;"> &gt; Koordiniere Tasks</div>
441
+ <div style="color:#8b949e;"> ⠿ Updating TODO.md</div>
 
 
 
 
 
 
 
 
 
 
442
  </div>
443
  </div>
444
+ </div>
445
+
446
+ <div class="cb" style="margin-bottom:1.4rem;">
447
+ <span class="c"># ── tmux Multi-Agent Setup ─────────────────────────────────────</span>
448
+
449
+ <span class="c"># Neue tmux Sessions (detached, im Projektordner)</span>
450
+ <span class="b">tmux new-session -d -s research -c ~/mein-projekt</span>
451
+ <span class="b">tmux new-session -d -s coder -c ~/mein-projekt</span>
452
+ <span class="b">tmux new-session -d -s orchestrator -c ~/mein-projekt</span>
453
+
454
+ <span class="c"># Pi in jeder Session starten</span>
455
+ <span class="b">tmux send-keys -t research "pi --provider huggingface --model 'deepseek-ai/DeepSeek-R1'" Enter</span>
456
+ <span class="b">tmux send-keys -t coder "pi --provider huggingface --model 'Qwen/Qwen2.5-Coder-32B-Instruct'" Enter</span>
457
+ <span class="b">tmux send-keys -t orchestrator "pi --model 'meta-llama/Llama-3.3-70B-Instruct'" Enter</span>
458
+
459
+ <span class="c"># Sessions im Blick Split View in einem Fenster</span>
460
+ <span class="b">tmux new-window -n overview</span>
461
+ <span class="b">tmux split-window -h -t overview</span>
462
+ <span class="b">tmux split-window -v -t overview:0.0</span>
463
+ <span class="b">tmux send-keys -t overview:0.0 "tmux attach -t research" Enter</span>
464
+ <span class="b">tmux send-keys -t overview:0.1 "tmux attach -t coder" Enter</span>
465
+ <span class="b">tmux send-keys -t overview:0.2 "tmux attach -t orchestrator" Enter</span>
466
+
467
+ <span class="c"># Navigation</span>
468
+ Ctrl+B, s <span class="c"># Session-Übersicht</span>
469
+ Ctrl+B, $ <span class="c"># Session umbenennen</span>
470
+ Ctrl+B, d <span class="c"># Detach (Session läuft weiter)</span>
471
+ tmux attach -t coder <span class="c"># Session wieder attachen</span>
472
+ </div>
473
+
474
+ <div class="g3">
475
+ <div class="card">
476
+ <span class="eyebrow" style="color:var(--indigo);margin-bottom:.4rem;">research agent</span>
477
+ <p style="font-size:.85rem;font-weight:600;margin-bottom:.35rem;">DeepSeek-R1</p>
478
+ <p style="font-size:.8rem;font-weight:300;line-height:1.6;">Tiefe Analysen, Recherchen, Reports. Outputs in <span class="mono" style="font-size:.8em;">workspace/research/</span>. Koordiniert via Shared Files mit dem Orchestrator.</p>
479
  </div>
480
+ <div class="card">
481
+ <span class="eyebrow" style="color:var(--orange);margin-bottom:.4rem;">code agent</span>
482
+ <p style="font-size:.85rem;font-weight:600;margin-bottom:.35rem;">Qwen2.5-Coder-32B</p>
483
+ <p style="font-size:.8rem;font-weight:300;line-height:1.6;">Implementierung, Tests, Refactoring. Liest Spezifikationen aus <span class="mono" style="font-size:.8em;">workspace/specs/</span>, schreibt in <span class="mono" style="font-size:.8em;">src/</span>.</p>
484
  </div>
485
+ <div class="card">
486
+ <span class="eyebrow" style="color:var(--red);margin-bottom:.4rem;">orchestrator</span>
487
+ <p style="font-size:.85rem;font-weight:600;margin-bottom:.35rem;">Llama-3.3-70B</p>
488
+ <p style="font-size:.8rem;font-weight:300;line-height:1.6;">Aufgaben delegieren, Outputs zusammenführen. Tracked Fortschritt in <span class="mono" style="font-size:.8em;">TODO.md</span> und <span class="mono" style="font-size:.8em;">CHANGELOG.md</span>.</p>
489
+ </div>
490
+ </div>
491
+ </section>
492
+
493
+ <!-- ══ 7 REFERENZ ══ -->
494
+ <section>
495
+ <span class="eyebrow">referenz · shortcuts &amp; sessions</span>
496
+ <h2 class="h2" style="margin-bottom:2.2rem;">sessions &amp; <strong class="grad">nützliche befehle</strong></h2>
497
+ <div class="g2" style="margin-bottom:1.4rem;align-items:start;">
498
+ <div>
499
+ <p class="lead" style="font-size:.9rem;margin-bottom:1rem;">Sessions als Baumstruktur — <span class="mono" style="font-size:.9em;">/tree</span> für Navigation, <span class="mono" style="font-size:.9em;">/fork</span> für neue Branches, <span class="mono" style="font-size:.9em;">/share</span> als GitHub Gist.</p>
500
+ <div class="cb" style="border-radius:16px;font-size:.73rem;">
501
+ <span class="c"># CLI Session-Befehle</span>
502
+ pi -c <span class="c"># letzte Session fortführen</span>
503
+ pi -r <span class="c"># Session auswählen</span>
504
+ pi --no-session <span class="c"># ephemeral (kein Speichern)</span>
505
+ pi --fork &lt;id&gt; <span class="c"># Session forken</span>
506
+
507
+ <span class="c"># In Pi: Commands</span>
508
+ /tree <span class="c"># Baum-Navigation</span>
509
+ /fork <span class="c"># ab Punkt neu</span>
510
+ /compact <span class="c"># Kontext komprimieren</span>
511
+ /share <span class="c"># als Gist teilen</span>
512
+ /export <span class="c"># als HTML exportieren</span>
513
+ </div>
514
+ </div>
515
+ <div>
516
+ <p class="lead" style="font-size:.9rem;margin-bottom:1rem;">Wichtige Shortcuts:</p>
517
+ <div style="display:flex;flex-direction:column;gap:.6rem;">
518
+ <div class="card" style="padding:.9rem;display:flex;gap:.9rem;align-items:flex-start;">
519
+ <code style="background:var(--black);color:#fff;border-radius:7px;padding:1px 7px;font-size:.68rem;white-space:nowrap;flex-shrink:0;">Ctrl+L</code>
520
+ <span style="font-size:.82rem;font-weight:300;">Modell wechseln — mid-session, ohne Kontextverlust</span>
521
+ </div>
522
+ <div class="card" style="padding:.9rem;display:flex;gap:.9rem;align-items:flex-start;">
523
+ <code style="background:var(--black);color:#fff;border-radius:7px;padding:1px 7px;font-size:.68rem;white-space:nowrap;flex-shrink:0;">Ctrl+P</code>
524
+ <span style="font-size:.82rem;font-weight:300;">Durch Lieblings-Modelle cyceln (via /scoped-models)</span>
525
+ </div>
526
+ <div class="card" style="padding:.9rem;display:flex;gap:.9rem;align-items:flex-start;">
527
+ <code style="background:var(--black);color:#fff;border-radius:7px;padding:1px 7px;font-size:.68rem;white-space:nowrap;flex-shrink:0;">Shift+Tab</code>
528
+ <span style="font-size:.82rem;font-weight:300;">Thinking Level: off → minimal → low → medium → high</span>
529
+ </div>
530
+ <div class="card" style="padding:.9rem;display:flex;gap:.9rem;align-items:flex-start;">
531
+ <code style="background:var(--black);color:#fff;border-radius:7px;padding:1px 7px;font-size:.68rem;white-space:nowrap;flex-shrink:0;">@datei</code>
532
+ <span style="font-size:.82rem;font-weight:300;">Datei per fuzzy-search in den Kontext einbinden</span>
533
+ </div>
534
+ <div class="card" style="padding:.9rem;display:flex;gap:.9rem;align-items:flex-start;">
535
+ <code style="background:var(--black);color:#fff;border-radius:7px;padding:1px 7px;font-size:.68rem;white-space:nowrap;flex-shrink:0;">!cmd</code>
536
+ <span style="font-size:.82rem;font-weight:300;">Bash ausführen und Output direkt ans Modell schicken</span>
537
+ </div>
538
+ <div class="card" style="padding:.9rem;display:flex;gap:.9rem;align-items:flex-start;">
539
+ <code style="background:var(--black);color:#fff;border-radius:7px;padding:1px 7px;font-size:.68rem;white-space:nowrap;flex-shrink:0;">Esc×2</code>
540
+ <span style="font-size:.82rem;font-weight:300;">Session-Baum öffnen (/tree)</span>
541
+ </div>
542
+ </div>
543
+ </div>
544
+ </div>
545
+ </section>
546
 
547
+ <!-- FOOTER -->
548
+ <div class="rule" style="margin-top:3.5rem;"></div>
549
+ <footer style="display:flex;justify-content:space-between;align-items:center;padding:1.6rem 0;font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:var(--silver);font-weight:600;">
550
+ <div style="font-weight:700;font-size:1.05rem;letter-spacing:-.015em;color:var(--black);text-transform:none;">valantic</div>
551
+ <div>20. April 2026</div>
552
+ <div>Pi Agents Setup</div>
553
+ </footer>
 
554
 
555
  </div>
556
 
557
  <script>
558
+ // ── Directory ─────────────────────────────────────────────────
559
+ const dirs = {
560
+ root: { t:'mein-projekt/', d:'Der Projektordner. Pi lädt AGENTS.md aus diesem Verzeichnis und allen Elternordnern. Struktur ist konventionsbasiert kein Config-File nötig.' },
561
+ pi: { t:'.pi/', d:'Projekt-lokale Konfiguration überschreibt ~/.pi/agent/ Einstellungen. Kann unter Versionskontrolle gestellt werden.' },
562
+ system: { t:'.pi/SYSTEM.md', d:'Ersetzt den Standard-System-Prompt vollständig für dieses Projekt. APPEND_SYSTEM.md ergänzt nur. Skills und AGENTS.md werden weiterhin geladen.', code:'touch .pi/SYSTEM.md' },
563
+ piset: { t:'.pi/settings.json', d:'Projekt-Einstellungen: Thinking Level, Auto-Compaction, Modell-Präferenzen. Überschreibt globale settings.json.', code:"echo '{\"thinkingLevel\":\"medium\"}' > .pi/settings.json" },
564
+ skills_dir: { t:'.pi/skills/', d:'Projekt-Skills: je ein Unterordner pro Skill mit SKILL.md. On-demand geladen via /skill:name oder automatisch nach Kontext. Kein Prompt-Cache-Busting.', code:'mkdir -p .pi/skills/mein-skill && touch .pi/skills/mein-skill/SKILL.md' },
565
+ prompts_dir:{ t:'.pi/prompts/', d:'Reusable Prompt-Templates als Markdown. Im Editor via /template-name expandieren. Unterstützen {{variablen}}.', code:'touch .pi/prompts/review.md' },
566
+ ext_dir: { t:'.pi/extensions/', d:'TypeScript-Erweiterungen: eigene Tools, Commands, Shortcuts, UI-Komponenten. Full TUI-Zugriff. Werden beim Start geladen.', code:'touch .pi/extensions/my-ext.ts' },
567
+ agents_md: { t:'AGENTS.md', d:'Die zentrale Kontext-Datei. Automatisch beim Start geladen. Definiere hier Rolle, Regeln, Konventionen und Modell-Präferenzen. CLAUDE.md funktioniert als Alias.' },
568
+ workspace: { t:'workspace/', d:'Autonomer Arbeitsbereich für Outputs: Dokumente, JSON, Logs, Reports. Trennung vom Code hält die Projektstruktur sauber.' }
569
+ };
570
+
571
+ function showDir(k, btn) {
572
+ const d = dirs[k];
573
+ document.getElementById('dir-title').textContent = d.t;
574
+ document.getElementById('dir-desc').textContent = d.d;
575
+ const ce = document.getElementById('dir-code');
576
+ ce.innerHTML = d.code ? `<div class="cb" style="border-radius:12px;padding:.7rem 1rem;font-size:.73rem;"><span class="b">${d.code}</span></div>` : '';
577
+ document.querySelectorAll('.dir-btn').forEach(b => { b.classList.remove('pill-on'); b.classList.add('pill-off'); });
578
+ btn.classList.remove('pill-off'); btn.classList.add('pill-on');
579
+ }
580
+ showDir('root', document.querySelector('.dir-btn'));
581
+
582
+ // ── Tabs ──────────────────────────────────────────────────────
583
+ function switchTab(id, btn) {
584
+ ['t_agents','t_system','t_global'].forEach(t => document.getElementById(t)?.classList.add('hidden'));
585
+ document.getElementById(id)?.classList.remove('hidden');
586
+ document.querySelectorAll('.tab-btn').forEach(b => { b.classList.remove('pill-on'); b.classList.add('pill-off'); });
587
+ btn.classList.remove('pill-off'); btn.classList.add('pill-on');
588
+ }
589
+
590
+ // ── Models ────────────────────────────────────────────────────
591
+ const models = [
592
+ { n:'DeepSeek-R1', cat:'reasoning', cls:'cat-r', ctx:'163k', p:'Hyperbolic', d:'Führend bei komplexer Logik, Mathe und tiefen Analysen.' },
593
+ { n:'Llama-3.3-70B-Instruct', cat:'reasoning', cls:'cat-r', ctx:'131k', p:'Groq · Novita', d:'Starkes Allround-Modell, hohes Textverständnis.' },
594
+ { n:'Llama-3.1-8B-Instruct', cat:'speed', cls:'cat-s', ctx:'16k–131k', p:'Cerebras', d:'Blitzschnell — ideal für Routing und Vorverarbeitung.' },
595
+ { n:'Qwen3.5-9B', cat:'speed', cls:'cat-s', ctx:'262k', p:'Together', d:'Kompakt mit riesigem Kontext für lange Dokumente.' },
596
+ { n:'Qwen2.5-Coder-32B', cat:'coding', cls:'cat-c', ctx:'131k', p:'nscale', d:'Beste Wahl für Code-Generierung und Debugging.' },
597
+ { n:'Qwen3-Coder-Next', cat:'coding', cls:'cat-c', ctx:'262k', p:'Novita', d:'Neueste Iteration für komplexe Coding-Workflows.' },
598
+ { n:'GLM-4.5V', cat:'vision', cls:'cat-v', ctx:'65k', p:'Novita', d:'Starkes multimodales Modell für Bild- und UI-Analyse.' },
599
+ { n:'Qwen3-VL-8B-Instruct', cat:'vision', cls:'cat-v', ctx:'131k', p:'Novita', d:'Effizient für Screenshots und visuelle Verifizierung.' },
600
+ ];
601
+
602
+ function renderModels(f) {
603
+ const g = document.getElementById('model-grid'); g.innerHTML = '';
604
+ (f==='all' ? models : models.filter(m=>m.cat===f)).forEach(m => {
605
+ const c = document.createElement('div'); c.className = 'card';
606
+ c.style = 'display:flex;flex-direction:column;';
607
+ c.innerHTML = `<div class="eyebrow ${m.cls}" style="margin-bottom:.35rem;">${m.cat}</div>
608
+ <p style="font-size:.88rem;font-weight:600;margin-bottom:.35rem;">${m.n}</p>
609
+ <p style="font-size:.78rem;font-weight:300;line-height:1.6;flex-grow:1;margin-bottom:.8rem;">${m.d}</p>
610
+ <div style="background:#f8f8f8;border-radius:9px;padding:.5rem .75rem;font-size:.7rem;">
611
+ <div style="display:flex;justify-content:space-between;margin-bottom:.2rem;"><span style="font-weight:600;">Context</span><span>${m.ctx}</span></div>
612
+ <div style="display:flex;justify-content:space-between;gap:.4rem;"><span style="font-weight:600;flex-shrink:0;">Provider</span><span style="text-align:right;">${m.p}</span></div>
613
+ </div>`;
614
+ g.appendChild(c);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
615
  });
616
+ }
617
+ function filterModels(f, btn) {
618
+ document.querySelectorAll('.filter-btn').forEach(b => { b.classList.remove('pill-on'); b.classList.add('pill-off'); });
619
+ btn.classList.remove('pill-off'); btn.classList.add('pill-on');
620
+ renderModels(f);
621
+ }
622
+ renderModels('all');
623
  </script>
624
  </body>
625
  </html>