Spaces:
Running
Running
Update index.html
Browse files- 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
|
| 7 |
-
<script src="https://cdn.tailwindcss.com"></script>
|
| 8 |
<style>
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
:
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 94 |
</style>
|
| 95 |
</head>
|
| 96 |
-
<body
|
| 97 |
-
|
| 98 |
-
<
|
| 99 |
-
<
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
2.
|
| 103 |
-
|
| 104 |
-
-->
|
| 105 |
-
<
|
| 106 |
-
|
| 107 |
-
<
|
| 108 |
-
|
| 109 |
-
<
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
</
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
<
|
| 118 |
-
|
| 119 |
-
<
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
</
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
<
|
| 129 |
-
<
|
| 130 |
-
|
| 131 |
-
<
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
<
|
| 137 |
-
|
| 138 |
-
</
|
| 139 |
-
|
| 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 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 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 |
-
</
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 196 |
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 207 |
</div>
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
<
|
| 211 |
-
|
| 212 |
-
|
|
|
|
| 213 |
</div>
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
<
|
| 217 |
-
<
|
| 218 |
-
<
|
| 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 |
-
res = client.text_generation(task, max_new_tokens=500)<br>
|
| 226 |
-
<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 |
-
f.write(res)<br><br>
|
| 228 |
-
|
| 229 |
-
run_agent(<span class="text-[#FF4B4B]">"Initiiere Systemanalyse."</span>)
|
| 230 |
</div>
|
| 231 |
</div>
|
| 232 |
-
</
|
| 233 |
-
|
| 234 |
-
<
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
</
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 251 |
</div>
|
| 252 |
-
|
| 253 |
-
|
| 254 |
-
|
| 255 |
-
<
|
| 256 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 257 |
|
| 258 |
-
|
| 259 |
-
|
| 260 |
-
|
| 261 |
-
<
|
| 262 |
-
|
| 263 |
-
|
| 264 |
-
|
| 265 |
-
</footer>
|
| 266 |
|
| 267 |
</div>
|
| 268 |
|
| 269 |
<script>
|
| 270 |
-
|
| 271 |
-
|
| 272 |
-
|
| 273 |
-
|
| 274 |
-
|
| 275 |
-
|
| 276 |
-
|
| 277 |
-
|
| 278 |
-
}
|
| 279 |
-
|
| 280 |
-
|
| 281 |
-
|
| 282 |
-
|
| 283 |
-
|
| 284 |
-
|
| 285 |
-
|
| 286 |
-
|
| 287 |
-
|
| 288 |
-
|
| 289 |
-
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
|
| 296 |
-
|
| 297 |
-
|
| 298 |
-
|
| 299 |
-
|
| 300 |
-
|
| 301 |
-
|
| 302 |
-
|
| 303 |
-
|
| 304 |
-
|
| 305 |
-
|
| 306 |
-
|
| 307 |
-
|
| 308 |
-
|
| 309 |
-
|
| 310 |
-
|
| 311 |
-
|
| 312 |
-
|
| 313 |
-
|
| 314 |
-
|
| 315 |
-
|
| 316 |
-
|
| 317 |
-
|
| 318 |
-
|
| 319 |
-
|
| 320 |
-
|
| 321 |
-
|
| 322 |
-
|
| 323 |
-
|
| 324 |
-
|
| 325 |
-
|
| 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 & 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 & 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 && 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 & <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 & 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/<name>/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/<thema>/ 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;"> > 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;"> > 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;"> > 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 & sessions</span>
|
| 496 |
+
<h2 class="h2" style="margin-bottom:2.2rem;">sessions & <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 <id> <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>
|