diff --git a/frontend/src/panels/GuidesPanel.svelte b/frontend/src/panels/GuidesPanel.svelte index bc37d30..872437d 100644 --- a/frontend/src/panels/GuidesPanel.svelte +++ b/frontend/src/panels/GuidesPanel.svelte @@ -1,25 +1,27 @@
coder) wählen und loslegen. Das passende
- Modell wird automatisch geladen — du musst nichts starten.Kurz: meistens ja, automatisch. Der Kontext (das „Gedächtnis") gilt pro Unterhaltung. - Startest du im Tool einen neuen Chat / eine neue Session, ist der Kontext wieder leer — - das Tool verwaltet das Fenster für dich.
-Du musst nur selten eingreifen: wird ein Gespräch sehr lang, fang einen neuen an. Wichtig: - „Grafikspeicher leeren" (Tab Server) ist etwas anderes — das wirft das Modell aus dem Speicher, - nicht den Gesprächsverlauf.
`], - ["Was passiert, wenn der Kontext volläuft?", ` -Ist das Kontextfenster voll, passiert je nach Tool eins von dreien: das Modell vergisst den - Anfang (älteste Nachrichten fallen raus), das Tool kürzt automatisch, oder du bekommst - einen Fehler wie „context length exceeded".
-So gehst du vor:
-Ein nacktes Modell schreibt nur Text zurück. Ein Agent ist ein Programm drumherum, - das das Modell handeln lässt: Dateien lesen und ändern, Befehle ausführen, im Web suchen — - Schritt für Schritt in einer Schleife, bis die Aufgabe erledigt ist.
-Wann lohnt sich was?
-Gut zu wissen: Diese Agenten laufen lokal auf deinem PC — du brauchst - keinen Cloud-Dienst.
`], - ["Was sind Skills — und wie installiere ich sie?", ` -Ein Skill ist verpacktes Können: eine kurze Anleitung, die dem Agenten beibringt, - eine wiederkehrende Aufgabe jedes Mal so zu erledigen, wie du es willst.
-Skill vs. MCP: MCP gibt dem Agenten neue Werkzeuge. Skills geben - ihm Know-how. Kurz: Werkzeuge = MCP, Anleitungen = Skills.
-Installieren: meist nur eine Datei ablegen — kein Build, kein Neustart:
-AGENTS.md, .clinerules/).MCP (Model Context Protocol) ist ein einheitlicher „Stecker", über den ein Agent zusätzliche - Werkzeuge bekommt: das Web durchsuchen, Dateien lesen, eine Datenbank abfragen.
-Du fügst in deinem Agenten einen „MCP-Server" hinzu (eine Zeile in der Konfiguration je Werkzeug). - Danach entscheidet der Agent selbst, wann er das Werkzeug einsetzt.
-llama-swap lädt automatisch das Modell, das gerade angefragt wird, und entlädt es nach einer - Leerlaufzeit wieder. Es läuft immer nur eines gleichzeitig.
-Du richtest beliebig viele Modelle ein und wählst im Tool das passende — - das Laden/Entladen passiert im Hintergrund, ohne dass du etwas tun musst.
`], - ["Die empfohlenen Tools optimal nutzen", ` -Tipp: starkes Modell (coder) für schwere Aufgaben, schnelles
- (scout) für einfache — du wählst es einfach im Tool aus.
Nicht sicher welches Tool du nehmen sollst? + Lies den Abschnitt „Welches Tool ist das richtige für mich?" weiter unten.
`], + + ["Kontext — das Kurzzeitgedächtnis des Modells", ` +Der Kontext ist wie ein Blatt Papier: alles was du mit dem Modell besprochen hast, + steht darauf. Wird es voll, fallen die ältesten Nachrichten raus.
+Was du meist nicht tun musst: Tools wie OpenCode, Cline und OpenWebUI + verwalten das Kontextfenster automatisch. Ein neuer Chat = leeres Blatt.
+Wenn der Kontext volläuft (Fehler „context length exceeded" oder das Modell vergisst den Anfang):
+Wichtig: „Grafikspeicher leeren" (Tab Server) ist etwas anderes — + das wirft das Modell aus dem Speicher, nicht den Gesprächsverlauf.
`], + + ["Auto-Swap — Modelle laden sich von selbst", ` +llama-swap lädt automatisch das Modell, das gerade angefragt wird — + und entlädt es nach einer Leerlaufzeit wieder. Es läuft immer nur eines gleichzeitig.
+Du richtest beliebig viele Modelle ein und wählst im Tool das passende. + Das Laden und Entladen passiert unsichtbar im Hintergrund.
+Warum dauert die erste Antwort manchmal 5–15 Sekunden?
+ Das Modell wird gerade geladen — danach geht es normal weiter.
+ Die Topbar zeigt „[Modellname] lädt…" während das passiert.
Scout immer sofort verfügbar halten: Tab Modelle → Konfigurieren → + Immer aktiv halten aktivieren (TTL = ∞). Das Modell bleibt dann dauerhaft im RAM + und antwortet ohne Wartezeit — ideal für den kleinen, schnellen Allrounder.
`], + ], + }, + + { + label: 'Tools einrichten', + tutorials: [ + ["Welches Tool ist das richtige für mich?", ` +Die Antwort hängt davon ab, was du hauptsächlich tun willst:
+Faustregel: Fang mit OpenWebUI an. Wenn du merkst dass + du dieselben Aufgaben immer wieder beschreibst und dann manuell umsetzt — wechsle zu + OpenCode oder Cline.
`], + + ["OpenCode verbinden und die ersten Schritte", ` +OpenCode ist installiert? Dann in vier Schritten verbinden:
+~/.config/opencode/opencode.json einfügen.opencode eintippen —
+ immer im Projektordner starten, damit der Agent deine Dateien sieht./models eintippen → llama-swap/coder auswählen.Nützliche Befehle während der Arbeit:
+/model — Modell mitten im Gespräch wechseln (z.B. auf scout für kurze Fragen)/compact — Kontext komprimieren wenn er voll wird/clear — frischer Start, leerer KontextBevor OpenCode eine Datei ändert, fragt es nach — mit y bestätigen oder n ablehnen.
`], + + ["Cline in VS Code verbinden und nutzen", ` +Cline ist installiert (VS Code Extension)? So richtest du es ein:
+local) — wird nicht geprüft.Plan-Modus vs. Act-Modus:
+Unterschied zu OpenCode: Cline arbeitet direkt in VS Code — du siehst Änderungen sofort im Editor. + OpenCode ist besser für große, autonome Aufgaben; Cline für Aufgaben die du Schritt für Schritt begleiten willst.
`], + + ["OpenWebUI — chatten ohne Vorkenntnisse", ` +OpenWebUI ist installiert? Verbinden in 3 Schritten:
+dummy-key (egal was hier steht). Speichern.Danach oben das Modell wählen (coder, scout oder vision) und loslegen + — genau wie bei ChatGPT, nur lokal und privat.
+Bilder analysieren: Mit einem Vision-Modell (z.B. qwen3-vl) einfach ein Bild + per Drag & Drop ins Chat-Fenster ziehen — das Modell beschreibt und analysiert es.
+Gut für: Texte schreiben, übersetzen, zusammenfassen, erklären lassen, Brainstorming — + alles ohne Programmierkenntnisse.
`], + ], + }, + + { + label: 'Agenten meistern', + tutorials: [ + ["Was ein Agent tut — und was er nicht kann", ` +Ein nacktes Modell antwortet auf Text — das war's. + Ein Agent ist das Programm drumherum, das das Modell in eine Handlungsschleife bringt:
++ Planen → Werkzeug nutzen → Ergebnis prüfen → nächsten Schritt planen → … +
+Konkret: Datei lesen → Code verstehen → Änderung schreiben → Test ausführen → Fehler beheben — + ohne dass du jeden Schritt anstoßen musst.
+Was Agenten gut können:
+Was Agenten schlecht können:
+Faustregel: Je klarer die Aufgabe, desto besser das Ergebnis. Unklarer Auftrag → unklares Ergebnis.
`], + + ["Einen Agenten richtig briefen", ` +Der Unterschied zwischen „es passiert nichts Sinnvolles" und „es funktioniert auf Anhieb" + ist meistens die Qualität des Auftrags.
+Schlecht → Gut:
+src/pages/Login.tsx zeigt
+ bei falschem Passwort gar keinen Fehler an. Füge unter dem Passwortfeld eine rote Fehlermeldung
+ ein wenn die API 401 zurückgibt."loadUsers() in src/api/users.ts
+ braucht 3 Sekunden. Die Daten kommen vom Backend. Prüfe ob Caching helfen würde und schlage eine
+ konkrete Lösung vor."Die 3 Zutaten für einen guten Auftrag:
+Trick: Wenn du nicht sicher bist ob der Auftrag klar genug ist, frag den Agenten: + „Hast du alles was du brauchst, oder fehlt dir etwas?"
`], + + ["MCP — deinem Agenten echte Werkzeuge geben", ` +MCP (Model Context Protocol) ist ein einheitlicher „Stecker", über den ein Agent + zusätzliche Werkzeuge bekommt. Ohne MCP kann er nur Text lesen und schreiben. + Mit MCP kann er z.B.:
+Wie MCPs eingebunden werden (Beispiel für OpenCode):
+In der Konfigurationsdatei (~/.config/opencode/opencode.json) einen
+ "mcp"-Block hinzufügen:
{
+ "mcp": {
+ "brave-search": {
+ "command": "npx",
+ "args": ["-y", "@modelcontextprotocol/server-brave-search"],
+ "env": { "BRAVE_API_KEY": "dein-key" }
+ }
+ }
+}
+ Danach OpenCode neu starten — der Agent nutzt das Werkzeug automatisch wenn er es braucht.
+Empfohlene MCPs für den Einstieg:
+Wo MCPs finden? → mcp.run, + smithery.ai, + oder direkt: „Welche MCPs gibt es für [dein Werkzeug]?" im Chat fragen.
+Merksatz: Fehlt dem Agenten eine Fähigkeit → MCP. + Soll er etwas nur besser machen → Skill (nächster Abschnitt).
`], + + ["Skills & Rules — Agenten Gewohnheiten beibringen", ` +Skills (auch Rules, AGENTS.md oder Instructions genannt) + sind kurze Texte, die dem Agenten beibringen wie er in deinem Projekt arbeiten soll — + immer, ohne dass du es jedes Mal neu sagen musst.
+Beispiel — eine einfache AGENTS.md:
+Schreib alle Variablen in camelCase. +Kommentare immer auf Deutsch. +Tests immer mit describe/it-Blöcken (Jest). +Importiere nichts was nicht schon in package.json steht. +Bevor du Dateien änderst: erkläre kurz was du vorhast.+
Der Agent liest das vor jeder Aufgabe und hält sich daran.
+Wo die Datei ablegen:
+AGENTS.md im Projektordner (pro Projekt)~/.config/opencode/AGENTS.md (global, gilt überall).clinerules im Projektordner~/.clinerules (global)Fertige Skills finden:
+AGENTS.md / .clinerules mit dieser Anweisung anlegen
+ (siehe Abschnitt Skills & Rules).http:// (nicht https) sein,
+ Port 8080. Über Proxy? → LAN-IP direkt nutzen: http://192.168.178.151:8080/v1${t}
${t}
`:""} - + '),md=w('| Modell | Kann | Details | Status | Port | Aktionen |
|---|
apt update & upgrade aus. Das kann ein paar Minuten dauern; der Fortschritt erscheint in der Aktivität."}))return;const S=await Wi({title:"sudo-Passwort",body:"Für die System-Updates wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Installieren"});if(S)try{const V=await Me("/api/os-update",{method:"POST",body:JSON.stringify({password:S})});ee("OS-Update gestartet."),p(V.job_id,"OS-Update")}catch(V){ee(V.message,!0)}}async function ne(){if(!await wa({title:"Server wirklich neu starten?",body:"Der ganze Bosgame startet physisch neu. Alles ist für ~1 Minute offline — auch dieses Dashboard.",confirmLabel:"Reboot",danger:!0}))return;const S=await Wi({title:"sudo-Passwort",body:"Für den Reboot wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Jetzt neustarten",danger:!0});if(S)try{await Me("/api/reboot",{method:"POST",body:JSON.stringify({password:S})}),ee("Reboot ausgelöst — bis gleich.")}catch(V){ee(V.message,!0)}}async function pe(){g(Ee,"prüfe…");try{const S=await Me("/api/integration/test");g(Ee,S.ok?`✓ Engine antwortet — ${S.models.length} Modell(e): ${S.models.join(", ")}`:`✗ keine Verbindung: ${S.error}`,!0),g(K,S.ok,!0)}catch(S){g(Ee,"✗ "+S.message),g(K,!1)}}let Ee=O(""),K=O(!1);const U=q(()=>{var S;return((S=a(n))==null?void 0:S.models)||[]}),ue=["running","ready","loading","starting"],he=q(()=>a(U).find(S=>ue.includes(S.state)));function Le(S){if(!S||S.state!=="running")return null;if(typeof S.progress=="number")return Math.min(100,S.progress);const le=((S.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return le?Math.min(100,parseFloat(le[1])):null}var Ue=Hd(),_t=s(ot(Ue),2),T=l(_t),W=s(l(T),2),re=l(W),He=s(T,4),J=l(He),ze=s(l(J)),Z=l(ze),rt=s(J,2),P=s(l(rt),2),H=l(P),ie=s(rt,2),ge=s(l(ie),2),Te=l(ge),mt=s(He,2),pt=l(mt),kt=s(pt,2);{var At=S=>{var V=Rd(),le=l(V);z(()=>{fa(V,`color:${a(K)?"#7ee29a":"#ff9b95"}`),m(le,a(Ee))}),_(S,V)};I(kt,S=>{a(Ee)&&S(At)})}var Mt=s(_t,2),Lt=s(l(Mt),4),qt=s(Lt,2),Rt=s(qt,2),C=s(Rt,2),F=s(C,2),$e=s(Mt,2),dt=s(l($e),4),N=s(dt,2),De=s($e,2);{var Q=S=>{const V=q(()=>a(E)),le=q(()=>a(V).state==="done"),Qe=q(()=>a(V).state==="failed"),Je=q(()=>a(V).state==="canceled"),Jt=q(()=>a(le)||a(Qe)||a(Je)),Yt=q(()=>Le(a(V)));var Vt=Ud(),M=l(Vt),G=s(l(M),2);{var qe=Ke=>{var ht=Bd();A("click",ht,async()=>{await wa({title:a(u)+" abbrechen?",body:"Der laufende Vorgang wird gestoppt.",confirmLabel:"Abbrechen",danger:!0})&&Me(`/api/jobs/${a(V).id}/cancel`,{method:"POST"})}),_(Ke,ht)};I(G,Ke=>{a(Jt)||Ke(qe)})}var te=s(G,2),Be=l(te);{var Ye=Ke=>{var ht=Id();_(Ke,ht)},et=Ke=>{var ht=Nd();_(Ke,ht)},ke=Ke=>{var ht=Fd();_(Ke,ht)},Ae=Ke=>{var ht=Kd();_(Ke,ht)};I(Be,Ke=>{a(le)?Ke(Ye):a(Qe)?Ke(et,1):a(Je)?Ke(ke,2):Ke(Ae,-1)})}var Oe=s(M,2),Ot=l(Oe),Bt=s(Oe,2);{var Wt=Ke=>{var ht=Gd(),qa=l(ht);z(()=>fa(qa,`width:${a(Yt)??""}%`)),_(Ke,ht)};I(Bt,Ke=>{a(Yt)!=null&&!a(Jt)&&Ke(Wt)})}var na=s(Bt,2),_a=l(na);z(Ke=>{m(Ot,`${a(u)??""}${a(Jt)?a(le)?" — erfolgreich.":a(Je)?" — abgebrochen.":" — fehlgeschlagen.":" läuft…"}`),m(_a,Ke)},[()=>(a(V).log||[]).join(`
-`)]),_(S,Vt)};I(De,S=>{a(E)&&S(Q)})}var de=s(De,2),se=l(de),Y=s(l(se),2),me=l(Y);me.value=me.__value="llama-swap";var ve=s(me);ve.value=ve.__value="mission-control";var we=s(ve);we.value=we.__value="system";var xe=s(se,4),be=l(xe);Bo(xe,S=>c=S,()=>c),z(S=>{var V,le,Qe;fa(W,`margin-left:auto;${(V=a(n))!=null&&V.swap_ok?"background:rgba(63,185,80,.12);border-color:rgba(63,185,80,.25);color:#7ee29a":"background:rgba(248,81,73,.12);border-color:rgba(248,81,73,.3);color:#ff9b95"}`),m(re,(le=a(n))!=null&&le.swap_ok?"● erreichbar":"● offline"),m(Z,(((Qe=a(n))==null?void 0:Qe.swap_url)||"—")+"/v1"),m(H,a(he)?a(he).name+` (${a(he).state})`:"nichts geladen — lädt bei der nächsten Anfrage"),m(Te,S),m(be,a(o))},[()=>a(U).filter(S=>!S.incomplete).length||"keine"]),A("click",pt,pe),A("click",Lt,()=>$("llama-swap","LLM-Engine neustarten?","Die Engine startet neu. Geladene Modelle werden kurz entladen (~5 Sekunden), laden danach automatisch wieder.")),A("click",qt,()=>$("mission-control","Dashboard neustarten?","Diese Oberfläche trennt sich kurz und verbindet automatisch wieder.")),A("click",Rt,L),A("click",C,k),A("click",F,D),A("click",dt,Pe),A("click",N,ne),A("change",Y,x),nr(Y,()=>a(d),S=>g(d,S)),_(e,Ue),an()}xn(["click","change"]);var Wd=w('http://192.168.178.151:8080/v1 — nicht den Proxy-Namen.Öffne die Zed-Settings mit Cmd/Strg + , und füge diesen Block in deine bestehende settings.json ein. Falls bereits ein "bosgame"-Eintrag existiert: vorher löschen.
API-Key: Öffne den Agent-Panel → Anbieter bosgame → trag irgendeinen Wert ein (z.B. local).
Datei anlegen oder öffnen:
Windows: %USERPROFILE%\\.config\\opencode\\opencode.json
"provider"-Block einfügen. Falls bereits ein "llama-swap"-Eintrag vorhanden: vorher löschen, sonst erscheinen Modelle doppelt. Danach in OpenCode /models → wählen.
In Cline/Cursor den Provider „OpenAI Compatible" wählen:
local).Settings → Admin Panel → Connections → neue OpenAI-Verbindung:
'),bd=y('| Modell | Kann | Details | Status | Port | Aktionen |
|---|
apt update & upgrade aus. Das kann ein paar Minuten dauern; der Fortschritt erscheint in der Aktivität."}))return;const S=await Wi({title:"sudo-Passwort",body:"Für die System-Updates wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Installieren"});if(S)try{const H=await Se("/api/os-update",{method:"POST",body:JSON.stringify({password:S})});ee("OS-Update gestartet."),p(H.job_id,"OS-Update")}catch(H){ee(H.message,!0)}}async function te(){if(!await xn({title:"Server wirklich neu starten?",body:"Der ganze Bosgame startet physisch neu. Alles ist für ~1 Minute offline — auch dieses Dashboard.",confirmLabel:"Reboot",danger:!0}))return;const S=await Wi({title:"sudo-Passwort",body:"Für den Reboot wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Jetzt neustarten",danger:!0});if(S)try{await Se("/api/reboot",{method:"POST",body:JSON.stringify({password:S})}),ee("Reboot ausgelöst — bis gleich.")}catch(H){ee(H.message,!0)}}async function ue(){h(Te,"prüfe…");try{const S=await Se("/api/integration/test");h(Te,S.ok?`✓ Engine antwortet — ${S.models.length} Modell(e): ${S.models.join(", ")}`:`✗ keine Verbindung: ${S.error}`,!0),h(K,S.ok,!0)}catch(S){h(Te,"✗ "+S.message),h(K,!1)}}let Te=R(""),K=R(!1);const V=O(()=>{var S;return((S=n(a))==null?void 0:S.models)||[]}),fe=["running","ready","loading","starting"],he=O(()=>n(V).find(S=>fe.includes(S.state)));function Pe(S){if(!S||S.state!=="running")return null;if(typeof S.progress=="number")return Math.min(100,S.progress);const le=((S.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return le?Math.min(100,parseFloat(le[1])):null}var Ve=Ud(),mt=s(ct(Ve),2),T=l(mt),W=s(l(T),2),re=l(W),Ue=s(T,4),Q=l(Ue),ze=s(l(Q)),Y=l(ze),rt=s(Q,2),D=s(l(rt),2),U=l(D),ie=s(rt,2),ge=s(l(ie),2),Ae=l(ge),bt=s(Ue,2),pt=l(bt),kt=s(pt,2);{var Ct=S=>{var H=qd(),le=l(H);z(()=>{pn(H,`color:${n(K)?"#7ee29a":"#ff9b95"}`),b(le,n(Te))}),m(S,H)};I(kt,S=>{n(Te)&&S(Ct)})}var Mt=s(mt,2),Lt=s(l(Mt),4),Ot=s(Lt,2),qt=s(Ot,2),$=s(qt,2),N=s($,2),Ce=s(Mt,2),ut=s(l(Ce),4),F=s(ut,2),De=s(Ce,2);{var J=S=>{const H=O(()=>n(E)),le=O(()=>n(H).state==="done"),Je=O(()=>n(H).state==="failed"),Qe=O(()=>n(H).state==="canceled"),Qt=O(()=>n(le)||n(Je)||n(Qe)),Zt=O(()=>Pe(n(H)));var Ht=Vd(),M=l(Ht),G=s(l(M),2);{var Oe=Ke=>{var ht=Bd();C("click",ht,async()=>{await xn({title:n(v)+" abbrechen?",body:"Der laufende Vorgang wird gestoppt.",confirmLabel:"Abbrechen",danger:!0})&&Se(`/api/jobs/${n(H).id}/cancel`,{method:"POST"})}),m(Ke,ht)};I(G,Ke=>{n(Qt)||Ke(Oe)})}var ne=s(G,2),Be=l(ne);{var Ze=Ke=>{var ht=Id();m(Ke,ht)},et=Ke=>{var ht=Fd();m(Ke,ht)},Me=Ke=>{var ht=Nd();m(Ke,ht)},$e=Ke=>{var ht=Kd();m(Ke,ht)};I(Be,Ke=>{n(le)?Ke(Ze):n(Je)?Ke(et,1):n(Qe)?Ke(Me,2):Ke($e,-1)})}var Re=s(M,2),Rt=l(Re),Bt=s(Re,2);{var Wt=Ke=>{var ht=Gd(),Rn=l(ht);z(()=>pn(Rn,`width:${n(Zt)??""}%`)),m(Ke,ht)};I(Bt,Ke=>{n(Zt)!=null&&!n(Qt)&&Ke(Wt)})}var an=s(Bt,2),bn=l(an);z(Ke=>{b(Rt,`${n(v)??""}${n(Qt)?n(le)?" — erfolgreich.":n(Qe)?" — abgebrochen.":" — fehlgeschlagen.":" läuft…"}`),b(bn,Ke)},[()=>(n(H).log||[]).join(`
+`)]),m(S,Ht)};I(De,S=>{n(E)&&S(J)})}var de=s(De,2),se=l(de),Z=s(l(se),2),be=l(Z);be.value=be.__value="llama-swap";var ve=s(be);ve.value=ve.__value="mission-control";var xe=s(ve);xe.value=xe.__value="system";var ke=s(se,4),_e=l(ke);Bo(ke,S=>c=S,()=>c),z(S=>{var H,le,Je;pn(W,`margin-left:auto;${(H=n(a))!=null&&H.swap_ok?"background:rgba(63,185,80,.12);border-color:rgba(63,185,80,.25);color:#7ee29a":"background:rgba(248,81,73,.12);border-color:rgba(248,81,73,.3);color:#ff9b95"}`),b(re,(le=n(a))!=null&&le.swap_ok?"● erreichbar":"● offline"),b(Y,(((Je=n(a))==null?void 0:Je.swap_url)||"—")+"/v1"),b(U,n(he)?n(he).name+` (${n(he).state})`:"nichts geladen — lädt bei der nächsten Anfrage"),b(Ae,S),b(_e,n(o))},[()=>n(V).filter(S=>!S.incomplete).length||"keine"]),C("click",pt,ue),C("click",Lt,()=>A("llama-swap","LLM-Engine neustarten?","Die Engine startet neu. Geladene Modelle werden kurz entladen (~5 Sekunden), laden danach automatisch wieder.")),C("click",Ot,()=>A("mission-control","Dashboard neustarten?","Diese Oberfläche trennt sich kurz und verbindet automatisch wieder.")),C("click",qt,L),C("click",$,k),C("click",N,P),C("click",ut,ye),C("click",F,te),C("change",Z,x),ar(Z,()=>n(d),S=>h(d,S)),m(e,Ve),aa()}xa(["click","change"]);var Wd=y('http://192.168.178.151:8080/v1 — nicht den Proxy-Namen.Öffne die Zed-Settings mit Cmd/Strg + , und füge diesen Block in deine bestehende settings.json ein. Falls bereits ein "bosgame"-Eintrag existiert: vorher löschen.
API-Key: Öffne den Agent-Panel → Anbieter bosgame → trag irgendeinen Wert ein (z.B. local).
Datei anlegen oder öffnen:
Windows: %USERPROFILE%\\.config\\opencode\\opencode.json
"provider"-Block einfügen. Falls bereits ein "llama-swap"-Eintrag vorhanden: vorher löschen, sonst erscheinen Modelle doppelt. Danach in OpenCode /models → wählen.
In Cline/Cursor den Provider „OpenAI Compatible" wählen:
local).Settings → Admin Panel → Connections → neue OpenAI-Verbindung:
coder) wählen und loslegen. Das passende
- Modell wird automatisch geladen — du musst nichts starten.Kurz: meistens ja, automatisch. Der Kontext (das „Gedächtnis") gilt pro Unterhaltung. - Startest du im Tool einen neuen Chat / eine neue Session, ist der Kontext wieder leer — - das Tool verwaltet das Fenster für dich.
-Du musst nur selten eingreifen: wird ein Gespräch sehr lang, fang einen neuen an. Wichtig: - „Grafikspeicher leeren" (Tab Server) ist etwas anderes — das wirft das Modell aus dem Speicher, - nicht den Gesprächsverlauf.
`],["Was passiert, wenn der Kontext volläuft?",` -Ist das Kontextfenster voll, passiert je nach Tool eins von dreien: das Modell vergisst den - Anfang (älteste Nachrichten fallen raus), das Tool kürzt automatisch, oder du bekommst - einen Fehler wie „context length exceeded".
-So gehst du vor:
-Ein nacktes Modell schreibt nur Text zurück. Ein Agent ist ein Programm drumherum, - das das Modell handeln lässt: Dateien lesen und ändern, Befehle ausführen, im Web suchen — - Schritt für Schritt in einer Schleife, bis die Aufgabe erledigt ist.
-Wann lohnt sich was?
-Gut zu wissen: Diese Agenten laufen lokal auf deinem PC — du brauchst - keinen Cloud-Dienst.
`],["Was sind Skills — und wie installiere ich sie?",` -Ein Skill ist verpacktes Können: eine kurze Anleitung, die dem Agenten beibringt, - eine wiederkehrende Aufgabe jedes Mal so zu erledigen, wie du es willst.
-Skill vs. MCP: MCP gibt dem Agenten neue Werkzeuge. Skills geben - ihm Know-how. Kurz: Werkzeuge = MCP, Anleitungen = Skills.
-Installieren: meist nur eine Datei ablegen — kein Build, kein Neustart:
-AGENTS.md, .clinerules/).MCP (Model Context Protocol) ist ein einheitlicher „Stecker", über den ein Agent zusätzliche - Werkzeuge bekommt: das Web durchsuchen, Dateien lesen, eine Datenbank abfragen.
-Du fügst in deinem Agenten einen „MCP-Server" hinzu (eine Zeile in der Konfiguration je Werkzeug). - Danach entscheidet der Agent selbst, wann er das Werkzeug einsetzt.
-llama-swap lädt automatisch das Modell, das gerade angefragt wird, und entlädt es nach einer - Leerlaufzeit wieder. Es läuft immer nur eines gleichzeitig.
-Du richtest beliebig viele Modelle ein und wählst im Tool das passende — - das Laden/Entladen passiert im Hintergrund, ohne dass du etwas tun musst.
`],["Die empfohlenen Tools optimal nutzen",` -Tipp: starkes Modell (coder) für schwere Aufgaben, schnelles
- (scout) für einfache — du wählst es einfach im Tool aus.
Nicht sicher welches Tool du nehmen sollst? + Lies den Abschnitt „Welches Tool ist das richtige für mich?" weiter unten.
`],["Kontext — das Kurzzeitgedächtnis des Modells",` +Der Kontext ist wie ein Blatt Papier: alles was du mit dem Modell besprochen hast, + steht darauf. Wird es voll, fallen die ältesten Nachrichten raus.
+Was du meist nicht tun musst: Tools wie OpenCode, Cline und OpenWebUI + verwalten das Kontextfenster automatisch. Ein neuer Chat = leeres Blatt.
+Wenn der Kontext volläuft (Fehler „context length exceeded" oder das Modell vergisst den Anfang):
+Wichtig: „Grafikspeicher leeren" (Tab Server) ist etwas anderes — + das wirft das Modell aus dem Speicher, nicht den Gesprächsverlauf.
`],["Auto-Swap — Modelle laden sich von selbst",` +llama-swap lädt automatisch das Modell, das gerade angefragt wird — + und entlädt es nach einer Leerlaufzeit wieder. Es läuft immer nur eines gleichzeitig.
+Du richtest beliebig viele Modelle ein und wählst im Tool das passende. + Das Laden und Entladen passiert unsichtbar im Hintergrund.
+Warum dauert die erste Antwort manchmal 5–15 Sekunden?
+ Das Modell wird gerade geladen — danach geht es normal weiter.
+ Die Topbar zeigt „[Modellname] lädt…" während das passiert.
Scout immer sofort verfügbar halten: Tab Modelle → Konfigurieren → + Immer aktiv halten aktivieren (TTL = ∞). Das Modell bleibt dann dauerhaft im RAM + und antwortet ohne Wartezeit — ideal für den kleinen, schnellen Allrounder.
`]]},{label:"Tools einrichten",tutorials:[["Welches Tool ist das richtige für mich?",` +Die Antwort hängt davon ab, was du hauptsächlich tun willst:
+Faustregel: Fang mit OpenWebUI an. Wenn du merkst dass + du dieselben Aufgaben immer wieder beschreibst und dann manuell umsetzt — wechsle zu + OpenCode oder Cline.
`],["OpenCode verbinden und die ersten Schritte",` +OpenCode ist installiert? Dann in vier Schritten verbinden:
+~/.config/opencode/opencode.json einfügen.opencode eintippen —
+ immer im Projektordner starten, damit der Agent deine Dateien sieht./models eintippen → llama-swap/coder auswählen.Nützliche Befehle während der Arbeit:
+/model — Modell mitten im Gespräch wechseln (z.B. auf scout für kurze Fragen)/compact — Kontext komprimieren wenn er voll wird/clear — frischer Start, leerer KontextBevor OpenCode eine Datei ändert, fragt es nach — mit y bestätigen oder n ablehnen.
`],["Cline in VS Code verbinden und nutzen",` +Cline ist installiert (VS Code Extension)? So richtest du es ein:
+local) — wird nicht geprüft.Plan-Modus vs. Act-Modus:
+Unterschied zu OpenCode: Cline arbeitet direkt in VS Code — du siehst Änderungen sofort im Editor. + OpenCode ist besser für große, autonome Aufgaben; Cline für Aufgaben die du Schritt für Schritt begleiten willst.
`],["OpenWebUI — chatten ohne Vorkenntnisse",` +OpenWebUI ist installiert? Verbinden in 3 Schritten:
+dummy-key (egal was hier steht). Speichern.Danach oben das Modell wählen (coder, scout oder vision) und loslegen + — genau wie bei ChatGPT, nur lokal und privat.
+Bilder analysieren: Mit einem Vision-Modell (z.B. qwen3-vl) einfach ein Bild + per Drag & Drop ins Chat-Fenster ziehen — das Modell beschreibt und analysiert es.
+Gut für: Texte schreiben, übersetzen, zusammenfassen, erklären lassen, Brainstorming — + alles ohne Programmierkenntnisse.
`]]},{label:"Agenten meistern",tutorials:[["Was ein Agent tut — und was er nicht kann",` +Ein nacktes Modell antwortet auf Text — das war's. + Ein Agent ist das Programm drumherum, das das Modell in eine Handlungsschleife bringt:
++ Planen → Werkzeug nutzen → Ergebnis prüfen → nächsten Schritt planen → … +
+Konkret: Datei lesen → Code verstehen → Änderung schreiben → Test ausführen → Fehler beheben — + ohne dass du jeden Schritt anstoßen musst.
+Was Agenten gut können:
+Was Agenten schlecht können:
+Faustregel: Je klarer die Aufgabe, desto besser das Ergebnis. Unklarer Auftrag → unklares Ergebnis.
`],["Einen Agenten richtig briefen",` +Der Unterschied zwischen „es passiert nichts Sinnvolles" und „es funktioniert auf Anhieb" + ist meistens die Qualität des Auftrags.
+Schlecht → Gut:
+src/pages/Login.tsx zeigt
+ bei falschem Passwort gar keinen Fehler an. Füge unter dem Passwortfeld eine rote Fehlermeldung
+ ein wenn die API 401 zurückgibt."loadUsers() in src/api/users.ts
+ braucht 3 Sekunden. Die Daten kommen vom Backend. Prüfe ob Caching helfen würde und schlage eine
+ konkrete Lösung vor."Die 3 Zutaten für einen guten Auftrag:
+Trick: Wenn du nicht sicher bist ob der Auftrag klar genug ist, frag den Agenten: + „Hast du alles was du brauchst, oder fehlt dir etwas?"
`],["MCP — deinem Agenten echte Werkzeuge geben",` +MCP (Model Context Protocol) ist ein einheitlicher „Stecker", über den ein Agent + zusätzliche Werkzeuge bekommt. Ohne MCP kann er nur Text lesen und schreiben. + Mit MCP kann er z.B.:
+Wie MCPs eingebunden werden (Beispiel für OpenCode):
+In der Konfigurationsdatei (~/.config/opencode/opencode.json) einen
+ "mcp"-Block hinzufügen:
{
+ "mcp": {
+ "brave-search": {
+ "command": "npx",
+ "args": ["-y", "@modelcontextprotocol/server-brave-search"],
+ "env": { "BRAVE_API_KEY": "dein-key" }
+ }
+ }
+}
+ Danach OpenCode neu starten — der Agent nutzt das Werkzeug automatisch wenn er es braucht.
+Empfohlene MCPs für den Einstieg:
+Wo MCPs finden? → mcp.run, + smithery.ai, + oder direkt: „Welche MCPs gibt es für [dein Werkzeug]?" im Chat fragen.
+Merksatz: Fehlt dem Agenten eine Fähigkeit → MCP. + Soll er etwas nur besser machen → Skill (nächster Abschnitt).
`],["Skills & Rules — Agenten Gewohnheiten beibringen",` +Skills (auch Rules, AGENTS.md oder Instructions genannt) + sind kurze Texte, die dem Agenten beibringen wie er in deinem Projekt arbeiten soll — + immer, ohne dass du es jedes Mal neu sagen musst.
+Beispiel — eine einfache AGENTS.md:
+Schreib alle Variablen in camelCase. +Kommentare immer auf Deutsch. +Tests immer mit describe/it-Blöcken (Jest). +Importiere nichts was nicht schon in package.json steht. +Bevor du Dateien änderst: erkläre kurz was du vorhast.+
Der Agent liest das vor jeder Aufgabe und hält sich daran.
+Wo die Datei ablegen:
+AGENTS.md im Projektordner (pro Projekt)~/.config/opencode/AGENTS.md (global, gilt überall).clinerules im Projektordner~/.clinerules (global)Fertige Skills finden:
+AGENTS.md / .clinerules mit dieser Anweisung anlegen
+ (siehe Abschnitt Skills & Rules).http:// (nicht https) sein,
+ Port 8080. Über Proxy? → LAN-IP direkt nutzen: http://192.168.178.151:8080/v1