From 7efc92feac2672f496a9337caa51a240d07b74a5 Mon Sep 17 00:00:00 2001 From: djuka Date: Fri, 20 Feb 2026 15:00:28 +0000 Subject: [PATCH] T22: Zamena --dangerously-skip-permissions sa --permission-mode bypassPermissions Stari flag ne radi kad je proces pokrenut kao root. Zamenjeno u console.go, submit.go i CLAUDE.md. Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 229 +++++++++++++++----------------- code/internal/server/console.go | 2 +- code/internal/server/submit.go | 2 +- 3 files changed, 109 insertions(+), 124 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 40eaa5f..b23f39f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,71 +1,81 @@ # KAOS — Mastermind -**Verzija:** 0.3.0 -**Poslednje ažuriranje:** 2026-02-20 +**Verzija:** 0.6.0 +**Ažurirano:** 2026-02-20 + +--- + +## Učesnici + +| Uloga | Ko | Šta radi | +|-------|----|----------| +| Klijent | Korisnik | Prijavi problem/zahtev kroz dashboard formu | +| Planer | Claude u chatu | Piše taskove, odgovara na pitanja agenata | +| Operater | Nenad | Odobrava, pregleda, kontroliše. Šef. | +| Agent | Claude Code na serveru | Izvršava taskove (čist kontekst po tasku) | + +Komunikacija: kroz fajlove u TASKS/ (sync Windows ↔ Server). +Planer i Agent nikad direktno. → detalji: `TASKS/Workflow-Spec.md` + +--- + +## Dashboard (http://10.0.0.1:8080) + +| Tab | Funkcija | +|-----|----------| +| Kanban | Board sa kolonama, drag & drop, workflow dugmad | +| Dokumenti | Pregled svih .md fajlova (goldmark renderovanje) | +| Konzola | Terminal — 2 paralelne claude sesije | +| Prijava | Klijent mod (forma) + Operater mod (chat sa claude CLI) | + +### Workflow dugmad na karticama + +| Stanje | Dugme | +|--------|-------| +| backlog, zavisnosti ❌ | 🔒 Blokiran | +| backlog, zavisnosti ✅ | 👁 Pregledaj → ✅ Odobri | +| ready | ▶ Pusti (pokreni agenta) | +| active | ⚙️ Radi | +| review, pitanje | 💬 Odgovori → ▶ Nastavi | +| review, završen | 👁 Pregledaj → ✅ Odobri / ↩ Vrati | +| done | 📊 Izveštaj | + +### Pokretanje agenta + +"Pusti ▶" pokrene NOV `claude` proces sa čistim kontekstom: +```bash +claude --permission-mode bypassPermissions -p "Pročitaj CLAUDE.md i radi task TASKS/ready/T{XX}.md" +``` +Svaki task = zasebna sesija. Nema istorije iz prethodnih taskova. --- ## Kad te pokrenu -Ti razgovaraš sa operaterom. Operater je tvoj šef — on odlučuje šta se radi. +1. Pogledaj `TASKS/ready/` i `TASKS/review/` +2. Pokaži operateru šta ćeš da radiš — **čekaj odobrenje** +3. Izvršavaj po pravilima agenta (`agents/*/CLAUDE.md`) -### Tok rada +### Kad završiš task -1. Operater kaže "radi" ili "T01" ili "nastavi" -2. Pogledaj `TASKS/ready/` — ima li task spreman za rad -3. Pogledaj `TASKS/review/` — ima li task sa dopunjenim odgovorima -4. Pokaži operateru šta ćeš da radiš — **čekaj odobrenje** -5. Kad dobiješ ok — izvršavaj - -### Kad izvršavaš task - -1. Premesti fajl iz `ready/` u `active/` -2. Pročitaj `agents/coder/CLAUDE.md` — pravila kodiranja -3. Kod piši u `code/` folderu -4. Ako imaš pitanje: - - Zapiši pitanje u task fajl pod `## Pitanja` - - Premesti fajl iz `active/` u `review/` - - Reci operateru "imam pitanje, čekam odgovor u fajlu" - - **STANI — ne radi dalje dok operater ne kaže "nastavi"** -5. Kad nastaviš: - - Pročitaj odgovor u task fajlu - - Premesti fajl iz `review/` u `active/` - - Nastavi rad -6. Kad završiš: - - Svi testovi moraju proći - - Build mora proći - - Commituj: `T{XX}: Opis na srpskom` - - Push: `git push origin main` - - Tag: `git tag v0.1.{PATCH}` (patch = redni broj završenog taska) - - Push tag: `git push origin --tags` - - Napiši izveštaj u `TASKS/reports/T{XX}-report.md` - - Premesti task fajl iz `active/` u `review/` - - Reci operateru "gotovo, čeka pregled" +- Build/test/vet moraju proći +- Commit: `T{XX}: Opis na srpskom` +- Push + tag (semver) + push tags +- Izveštaj u `TASKS/reports/T{XX}-report.md` +- Premesti task u `review/` ### NIKAD + - Ne radi bez odobrenja operatera -- Ne pretpostavljaj šta operater želi - Ne preskoči "čekaj odobrenje" - Ne radi na tasku koji nije u `ready/` ili `review/` --- -## Task folderi +## Ko šta sme da premesti -``` -TASKS/ -├── backlog/ ← novi taskovi (piše planer, čeka odobrenje operatera) -├── ready/ ← odobreni za rad (operater premesti iz backlog/) -├── active/ ← u izradi (agent premesti iz ready/) -├── review/ ← čeka pregled (agent ima pitanje ili završio) -├── done/ ← završeno i odobreno (operater premesti iz review/) -└── reports/ ← izveštaji izvršenih taskova -``` - -### Ko šta sme da premesti - -| Iz → U | Operater (dashboard) | Agent (CLI) | -|---------|---------------------|-------------| +| Iz → U | Operater | Agent | +|---------|----------|-------| | backlog → ready | ✅ | ❌ | | ready → backlog | ✅ | ❌ | | ready → active | ❌ | ✅ | @@ -74,93 +84,68 @@ TASKS/ | review → ready | ✅ | ❌ | | done → bilo gde | ❌ | ❌ | +Server validira. Nedozvoljen potez → 403. +Deployer jedini KREIRA taskove u backlog/ (greške iz logova). + --- -## Struktura projekta +## Struktura ``` -/root/projects/KAOS/ -│ -├── CLAUDE.md ← OVO — mastermind (v0.3.0) -├── README.md -│ -├── agents/ ← specijalizovani agenti -│ ├── triage/CLAUDE.md -│ ├── task-manager/CLAUDE.md -│ ├── coder/CLAUDE.md -│ ├── frontend/CLAUDE.md -│ ├── checker/CLAUDE.md -│ ├── reporter/CLAUDE.md -│ ├── docs/CLAUDE.md -│ └── deployer/CLAUDE.md -│ -├── documentation/ ← eksterna dokumentacija (tuđe) -│ -├── TASKS/ ← taskovi po stanju -│ ├── backlog/ -│ ├── ready/ -│ ├── active/ -│ ├── review/ -│ ├── done/ -│ ├── reports/ -│ ├── MASTER-STATUS.md -│ └── Implementation-Tasks.md -│ -└── code/ ← Go kod +/opt/kaos/ +├── CLAUDE.md ← OVO +├── agents/*/CLAUDE.md ← pravila po agentu +├── TASKS/ ← backlog/ready/active/review/done/reports/ +├── code/ ← Go + HTMX (jedan binary, nema npm) +├── logs/ ← persistent logovi (planirano) +├── documentation/ ← eksterna dokumentacija +└── templates/new-project/ ← template za nove projekte ``` --- +## Stack + +Go 1.22+ · Gin · HTMX + Sortable.js (nema npm) · goldmark (markdown) · Gitea (localhost:3000) · Hetzner (10.0.0.1) · Claude Code CLI (Pro licenca) + +Projekat: `/opt/kaos/` (vlasnik: kaos korisnik) +Server radi kao root, agenti se pokreću kao `kaos` korisnik. +Operater mod u Prijavi koristi `claude` CLI (Pro licenca), ne API. +API ključ (ANTHROPIC_API_KEY) se čuva za budući direktni API mod. + +--- + ## Agent registar -| Agent | Folder | Model | Verzija | -|-------|--------|-------|---------| -| Triage | agents/triage/ | Haiku | 0.1.0 | -| Task Manager | agents/task-manager/ | Sonnet/Haiku | 0.1.0 | -| Coder | agents/coder/ | Sonnet/Opus | 0.2.0 | -| Frontend | agents/frontend/ | Sonnet | 0.2.0 | -| Checker | agents/checker/ | Haiku/Opus | 0.1.0 | -| Reporter | agents/reporter/ | Haiku | 0.1.0 | -| Docs | agents/docs/ | Haiku | 0.1.0 | -| Deployer | agents/deployer/ | Haiku | 0.1.0 | +| Agent | Model | Verzija | Detalji | +|-------|-------|---------|---------| +| Triage | Haiku | 0.1.0 | `agents/triage/CLAUDE.md` | +| Task Manager | Sonnet/Haiku | 0.1.0 | `agents/task-manager/CLAUDE.md` | +| Coder | Sonnet/Opus | 0.2.0 | `agents/coder/CLAUDE.md` | +| Frontend | Sonnet | 0.2.0 | `agents/frontend/CLAUDE.md` | +| Checker | Haiku/Opus | 0.1.0 | `agents/checker/CLAUDE.md` | +| Reporter | Haiku | 0.1.0 | `agents/reporter/CLAUDE.md` | +| Docs | Haiku | 0.1.0 | `agents/docs/CLAUDE.md` | +| Deployer | Haiku/Sonnet | 0.2.0 | `agents/deployer/CLAUDE.md` | + +Pravilo: najjeftiniji model koji može da uradi posao. --- -## Model selekcija +## Verzionisanje -Pravilo: uvek najjeftiniji model koji može da uradi posao. - -| Zadatak | Agent | Model | Cena/M tokena | -|---------|-------|-------|---------------| -| Klasifikacija prijave | triage | Haiku | $0.25/$1.25 | -| Generisanje taska | task-manager | Sonnet | $3/$15 | -| Kodiranje | coder | Sonnet | $3/$15 | -| Kompleksno kodiranje | coder | Opus | $15/$75 | -| Frontend | frontend | Sonnet | $3/$15 | -| Build + Test | checker | Haiku | $0.25/$1.25 | -| Code review | checker | Opus | $15/$75 | -| Izveštaj | reporter | Haiku | $0.25/$1.25 | -| Dokumentacija | docs | Haiku | $0.25/$1.25 | -| Deploy | deployer | Haiku | $0.25/$1.25 | +Semver. Patch = task, Minor = milestone, Major = breaking change. +Git: commit → push → tag → push tags. Format: `T{XX}: Opis` +Timeout: 30 min default (KAOS_TIMEOUT u .env). --- -## Pristup +## Reference -| Folder | Čita | Piše | -|--------|------|------| -| agents/ | ✅ | ❌ | -| TASKS/ | ✅ | ✅ (status, premesti fajlove) | -| documentation/ | ✅ | ❌ | -| code/ | ✅ | ✅ (kad izvršava task) | - ---- - -## Verzionisanje CLAUDE.md fajlova - -Format: `Major.Minor.Patch` -- Patch (0.1.1) — sitne ispravke -- Minor (0.2.0) — nova pravila, novi korak -- Major (1.0.0) — fundamentalna promena - -Kad se promeni CLAUDE.md → podigne verzija → ažurira Agent registar. +| Šta | Gde | +|-----|-----| +| Status svih taskova + bugovi | `TASKS/MASTER-STATUS.md` | +| Kompletan workflow | `TASKS/Workflow-Spec.md` | +| Multi-agent arhitektura | `TASKS/Multi-Agent-Spec.md` | +| Format izveštaja | `TASKS/reports/T01-report.md` (primer) | +| Template za novi projekat | `templates/new-project/` | diff --git a/code/internal/server/console.go b/code/internal/server/console.go index 8cf9076..30955e4 100644 --- a/code/internal/server/console.go +++ b/code/internal/server/console.go @@ -157,7 +157,7 @@ func cleanEnv() []string { // runCommand executes a command and streams output to listeners. func (s *Server) runCommand(session *sessionState, command, execID string) { // Build the claude command - cmd := exec.Command("claude", "--dangerously-skip-permissions", "-p", command) + cmd := exec.Command("claude", "--permission-mode", "bypassPermissions", "-p", command) cmd.Dir = s.projectRoot() cmd.Env = cleanEnv() diff --git a/code/internal/server/submit.go b/code/internal/server/submit.go index 23041df..f049b9d 100644 --- a/code/internal/server/submit.go +++ b/code/internal/server/submit.go @@ -156,7 +156,7 @@ func (s *Server) handleChatSubmit(c *gin.Context) { // runChatCommand executes claude CLI and streams output to chat listeners. func (s *Server) runChatCommand(chat *chatState, prompt string) { - cmd := exec.Command("claude", "--dangerously-skip-permissions", "-p", prompt) + cmd := exec.Command("claude", "--permission-mode", "bypassPermissions", "-p", prompt) cmd.Dir = s.projectRoot() cmd.Env = cleanEnv()