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 <noreply@anthropic.com>
This commit is contained in:
parent
695bd24d1d
commit
7efc92feac
229
CLAUDE.md
229
CLAUDE.md
@ -1,71 +1,81 @@
|
|||||||
# KAOS — Mastermind
|
# KAOS — Mastermind
|
||||||
|
|
||||||
**Verzija:** 0.3.0
|
**Verzija:** 0.6.0
|
||||||
**Poslednje ažuriranje:** 2026-02-20
|
**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
|
## 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"
|
- Build/test/vet moraju proći
|
||||||
2. Pogledaj `TASKS/ready/` — ima li task spreman za rad
|
- Commit: `T{XX}: Opis na srpskom`
|
||||||
3. Pogledaj `TASKS/review/` — ima li task sa dopunjenim odgovorima
|
- Push + tag (semver) + push tags
|
||||||
4. Pokaži operateru šta ćeš da radiš — **čekaj odobrenje**
|
- Izveštaj u `TASKS/reports/T{XX}-report.md`
|
||||||
5. Kad dobiješ ok — izvršavaj
|
- Premesti task u `review/`
|
||||||
|
|
||||||
### 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"
|
|
||||||
|
|
||||||
### NIKAD
|
### NIKAD
|
||||||
|
|
||||||
- Ne radi bez odobrenja operatera
|
- Ne radi bez odobrenja operatera
|
||||||
- Ne pretpostavljaj šta operater želi
|
|
||||||
- Ne preskoči "čekaj odobrenje"
|
- Ne preskoči "čekaj odobrenje"
|
||||||
- Ne radi na tasku koji nije u `ready/` ili `review/`
|
- Ne radi na tasku koji nije u `ready/` ili `review/`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Task folderi
|
## Ko šta sme da premesti
|
||||||
|
|
||||||
```
|
| Iz → U | Operater | Agent |
|
||||||
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) |
|
|
||||||
|---------|---------------------|-------------|
|
|
||||||
| backlog → ready | ✅ | ❌ |
|
| backlog → ready | ✅ | ❌ |
|
||||||
| ready → backlog | ✅ | ❌ |
|
| ready → backlog | ✅ | ❌ |
|
||||||
| ready → active | ❌ | ✅ |
|
| ready → active | ❌ | ✅ |
|
||||||
@ -74,93 +84,68 @@ TASKS/
|
|||||||
| review → ready | ✅ | ❌ |
|
| review → ready | ✅ | ❌ |
|
||||||
| done → bilo gde | ❌ | ❌ |
|
| done → bilo gde | ❌ | ❌ |
|
||||||
|
|
||||||
|
Server validira. Nedozvoljen potez → 403.
|
||||||
|
Deployer jedini KREIRA taskove u backlog/ (greške iz logova).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Struktura projekta
|
## Struktura
|
||||||
|
|
||||||
```
|
```
|
||||||
/root/projects/KAOS/
|
/opt/kaos/
|
||||||
│
|
├── CLAUDE.md ← OVO
|
||||||
├── CLAUDE.md ← OVO — mastermind (v0.3.0)
|
├── agents/*/CLAUDE.md ← pravila po agentu
|
||||||
├── README.md
|
├── TASKS/ ← backlog/ready/active/review/done/reports/
|
||||||
│
|
├── code/ ← Go + HTMX (jedan binary, nema npm)
|
||||||
├── agents/ ← specijalizovani agenti
|
├── logs/ ← persistent logovi (planirano)
|
||||||
│ ├── triage/CLAUDE.md
|
├── documentation/ ← eksterna dokumentacija
|
||||||
│ ├── task-manager/CLAUDE.md
|
└── templates/new-project/ ← template za nove projekte
|
||||||
│ ├── 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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 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 registar
|
||||||
|
|
||||||
| Agent | Folder | Model | Verzija |
|
| Agent | Model | Verzija | Detalji |
|
||||||
|-------|--------|-------|---------|
|
|-------|-------|---------|---------|
|
||||||
| Triage | agents/triage/ | Haiku | 0.1.0 |
|
| Triage | Haiku | 0.1.0 | `agents/triage/CLAUDE.md` |
|
||||||
| Task Manager | agents/task-manager/ | Sonnet/Haiku | 0.1.0 |
|
| Task Manager | Sonnet/Haiku | 0.1.0 | `agents/task-manager/CLAUDE.md` |
|
||||||
| Coder | agents/coder/ | Sonnet/Opus | 0.2.0 |
|
| Coder | Sonnet/Opus | 0.2.0 | `agents/coder/CLAUDE.md` |
|
||||||
| Frontend | agents/frontend/ | Sonnet | 0.2.0 |
|
| Frontend | Sonnet | 0.2.0 | `agents/frontend/CLAUDE.md` |
|
||||||
| Checker | agents/checker/ | Haiku/Opus | 0.1.0 |
|
| Checker | Haiku/Opus | 0.1.0 | `agents/checker/CLAUDE.md` |
|
||||||
| Reporter | agents/reporter/ | Haiku | 0.1.0 |
|
| Reporter | Haiku | 0.1.0 | `agents/reporter/CLAUDE.md` |
|
||||||
| Docs | agents/docs/ | Haiku | 0.1.0 |
|
| Docs | Haiku | 0.1.0 | `agents/docs/CLAUDE.md` |
|
||||||
| Deployer | agents/deployer/ | Haiku | 0.1.0 |
|
| 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.
|
Semver. Patch = task, Minor = milestone, Major = breaking change.
|
||||||
|
Git: commit → push → tag → push tags. Format: `T{XX}: Opis`
|
||||||
| Zadatak | Agent | Model | Cena/M tokena |
|
Timeout: 30 min default (KAOS_TIMEOUT u .env).
|
||||||
|---------|-------|-------|---------------|
|
|
||||||
| 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 |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Pristup
|
## Reference
|
||||||
|
|
||||||
| Folder | Čita | Piše |
|
| Šta | Gde |
|
||||||
|--------|------|------|
|
|-----|-----|
|
||||||
| agents/ | ✅ | ❌ |
|
| Status svih taskova + bugovi | `TASKS/MASTER-STATUS.md` |
|
||||||
| TASKS/ | ✅ | ✅ (status, premesti fajlove) |
|
| Kompletan workflow | `TASKS/Workflow-Spec.md` |
|
||||||
| documentation/ | ✅ | ❌ |
|
| Multi-agent arhitektura | `TASKS/Multi-Agent-Spec.md` |
|
||||||
| code/ | ✅ | ✅ (kad izvršava task) |
|
| Format izveštaja | `TASKS/reports/T01-report.md` (primer) |
|
||||||
|
| Template za novi projekat | `templates/new-project/` |
|
||||||
---
|
|
||||||
|
|
||||||
## 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.
|
|
||||||
|
|||||||
@ -157,7 +157,7 @@ func cleanEnv() []string {
|
|||||||
// runCommand executes a command and streams output to listeners.
|
// runCommand executes a command and streams output to listeners.
|
||||||
func (s *Server) runCommand(session *sessionState, command, execID string) {
|
func (s *Server) runCommand(session *sessionState, command, execID string) {
|
||||||
// Build the claude command
|
// 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.Dir = s.projectRoot()
|
||||||
cmd.Env = cleanEnv()
|
cmd.Env = cleanEnv()
|
||||||
|
|
||||||
|
|||||||
@ -156,7 +156,7 @@ func (s *Server) handleChatSubmit(c *gin.Context) {
|
|||||||
|
|
||||||
// runChatCommand executes claude CLI and streams output to chat listeners.
|
// runChatCommand executes claude CLI and streams output to chat listeners.
|
||||||
func (s *Server) runChatCommand(chat *chatState, prompt string) {
|
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.Dir = s.projectRoot()
|
||||||
cmd.Env = cleanEnv()
|
cmd.Env = cleanEnv()
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user