Modul 6 – CLI, TUI och automatisering
OpenCode-utbildningen på AIWiki.se ← Tillbaka till översikten
Två lägen, två användningsfall
OpenCode fungerar i två distinkta lägen som tjänar fundamentalt olika syften:
| Läge | Syfte | Typisk användare |
|---|---|---|
| TUI (interaktivt) | Utforskande, refaktorering, dialog | Utvecklaren vid terminalen |
| CLI run (icke-interaktivt) | Automatisering, CI/CD, scriptning | Pipeline, CI-runner, cron |
Det är viktigt att välja rätt läge. Att köra TUI i en CI-pipeline fungerar inte. Att köra ``run``-läget när du behöver iterativ dialog är frustrerande.
TUI – terminalgränssnittet
Starta TUI:t med:
opencode
TUI:t är uppdelat i paneler:
┌──────────────┬────────────────────────────┬──────────────┐ │ Filträd │ Konversation │ Verktyg │ │ │ │ & diff │ │ projekt/ │ > Förklara vad routes.ts │ src/api/ │ │ ├── src/ │ gör i relation till │ routes.ts │ │ │ └── api/ │ middleware-lagret. │ ────────── │ │ └── docs/ │ │ +12 / -3 │ │ │ Agenten: routes.ts hante- │ rader │ │ │ rar inkommande HTTP-... │ │ └──────────────┴────────────────────────────┴──────────────┘
Tangentbordsgenvägar (vanliga):
| Genväg | Funktion |
|---|---|
| ``Enter`` | Skicka meddelande |
| ``Ctrl+C`` | Avbryt aktuell körning |
| ``Ctrl+L`` | Rensa konversation |
| ``Tab`` | Navigera mellan paneler |
| ``Esc`` | Avbryt / tillbaka |
TUI:t kopplar automatiskt filer agenten läser eller skriver till filträdspanelen, och visar git-diff i realtid.
CLI run – icke-interaktivt läge
``opencode run`` är designat för automatisering. Det tar en prompt, kör uppgiften och avslutar:
# Grundläggande användning opencode run "Generera en README.md för det här projektet" # Med specifik fil i kontext opencode run --file src/api/users.ts "Dokumentera alla endpoints" # Med JSON-output opencode run --format json "Lista alla TODO-kommentarer" # Med specifik modell opencode run --model claude-haiku-4-5 "Formatera alla TypeScript-filer" # Med timeout opencode run --timeout 120 "Kör en fullständig kodanalys"
JSON-output
``–format json`` returnerar strukturerad output som lämpar sig för vidare bearbetning:
{
"status": "completed",
"steps": 7,
"files_modified": ["docs/README.md"],
"summary": "Genererade README.md med projektöversikt, installation och API-referens.",
"output": "..."
}
Det gör det enkelt att integrera OpenCode i pipelines där downstream-steg behöver veta vad som hände.
Automatisering i CI/CD-pipelines
GitHub Actions – dokumentationsgenerering
name: Generera API-dokumentation on: push: paths: - 'src/api/**' jobs: dokumentation: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Installera Bun uses: oven-sh/setup-bun@v1 - name: Installera OpenCode run: bun install -g opencode-ai - name: Generera OpenAPI-spec env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | opencode run --format json \ "Uppdatera docs/api/openapi.yaml baserat på ändringar i src/api/" - name: Commit dokumentation run: | git config --local user.email "ci@example.com" git config --local user.name "CI Bot" git add docs/api/openapi.yaml git commit -m "docs: uppdatera OpenAPI-spec [ci skip]" || exit 0 git push
Bash-script för batchanalys
#!/bin/bash # Analysera alla TypeScript-filer för TODO-kommentarer och exportera rapport OUTPUT_FILE="reports/todo-rapport-$(date +%Y%m%d).json" opencode run \ --format json \ --model claude-haiku-4-5 \ "Hitta alla TODO, FIXME och HACK-kommentarer i src/. Returnera JSON med: fil, rad, typ, kommentar, uppskattad prioritet." \ > "$OUTPUT_FILE" echo "Rapport genererad: $OUTPUT_FILE" jq '.output | length' "$OUTPUT_FILE"
Pre-commit hook
#!/bin/bash # .git/hooks/pre-commit STAGED_TS=$(git diff --cached --name-only --diff-filter=ACM | grep '\.ts$') if [ -n "$STAGED_TS" ]; then echo "Kör AI-kodgranskning på stagede TypeScript-filer..." for file in $STAGED_TS; do RESULT=$(opencode run --format json --file "$file" \ "Granska den här filen för uppenbara problem: säkerhetshål, kodlukt, saknad felhantering. Svara med JSON: {issues: [], passed: bool}") PASSED=$(echo "$RESULT" | jq -r '.output | fromjson | .passed') if [ "$PASSED" = "false" ]; then echo "⚠ Problem hittades i $file" echo "$RESULT" | jq -r '.output | fromjson | .issues[]' exit 1 fi done fi
Mönster och anti-mönster
Bra användning av run-läget
- Dokumentationsgenerering vid kod-push
- Analyser som exporteras till rapporter
- Kodgranskning som ett pipeline-steg
- Migreringsscript som körs engångsvid uppgradering
Anti-mönster
- Öppen prompt i CI – undvik breda prompts som ”förbättra koden”. Det ger oförutsägbara resultat. Var specifik.
- Skriva till production-filer i CI – kör med restriktivt AGENTS.md i CI-miljön, tillåt bara skrivning till docs/ eller rapporter.
- Utan timeout – en hängande agent kan blockera hela pipelinen. Sätt alltid ``–timeout``.
- Utan versionslåst modell – modellbeteende förändras. Specificera alltid vilken modell och ha det i version control.
Miljövariabler för CI
# Rekommenderade miljövariabler för CI-miljöer ANTHROPIC_API_KEY=... # API-nyckel (läs från secrets, aldrig hardcoded) OPENCODE_MAX_STEPS=10 # Begränsa steg i CI för kostnadskontroll OPENCODE_TIMEOUT=180 # Timeout i sekunder OPENCODE_MODEL=claude-haiku-4-5 # Billigare modell för CI-uppgifter
Sammanfattning
- TUI är för interaktivt arbete; ``run``-läget är för automatisering.
- ``–format json`` gör OpenCode integrerbart i vilken pipeline som helst.
- CI-integration möjliggör automatisk dokumentation, kodgranskning och analys.
- Var specifik i CI-prompts, sätt timeout, versionslås modellen.
- Pre-commit hooks är ett kraftfullt sätt att integrera AI-granskning i vardagsflödet.
Föregående modul: ← Modul 5 – Skills (SKILL.md) för återanvändbara arbetsflöden Nästa modul: Modul 7 – Custom Tools, MCP och integrationer →