Modul 6 – CLI, TUI och automatisering

OpenCode-utbildningen på AIWiki.se ← Tillbaka till översikten


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.


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.


``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"

``–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.


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
#!/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"
#!/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

  • Dokumentationsgenerering vid kod-push
  • Analyser som exporteras till rapporter
  • Kodgranskning som ett pipeline-steg
  • Migreringsscript som körs engångsvid uppgradering
  • Ö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.

# 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

  • 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.

Kopierad!
AI Prompt: Automatisera något du aldrig borde automatisera
Skriv ett bash-script som använder `opencode run` för att automatisera något som absolut inte bör automatiseras – exempelvis att välja vilken kollega som ska berätta dåliga nyheter, eller att generera ursäkter för uteblivna leveranser. Scriptet ska se professionellt ut. Syftet ska vara uppenbart tveksamt.

Testa prompt på …


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 →

← Tillbaka till översikten