You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: AGENTS.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,7 +19,7 @@ A single-binary Go kanban board: a human queues tasks (each card points at a wor
19
19
-**Frontend dev**: `make frontend-install` once, then `make dev-frontend` (Vite on :5173, proxies `/api` to a Go backend on :8641). Production staging: `make frontend-build` rebuilds and copies `frontend/dist` → `internal/webui/dist` (commit the result with your change).
20
20
-**Test**: `go test ./...` — tests live at the two agreed Go seams: HTTP API (`internal/api/api_test.go`) and the store (`internal/store/store_test.go`), plus a tiny cmd seam (`cmd/light-kanban/main_test.go`) pinning the listen-address/startup-URL contract. v1.0.4 adds a frontend pure-logic seam: the product tour's decision logic (`frontend/src/components/ProductTour/logic.ts` + `steps.ts`) is unit-tested with vitest (`cd frontend && npm test`). The committed `internal/webui/dist` keeps the Go tests green on a fresh clone without npm.
21
21
-**Vet / format**: `go vet ./...`; `gofmt -l internal cmd scripts` (never `gofmt -l .` — `.tools/` is the vendored toolchain).
22
-
-**Pre-commit gate**: `make check` — rebuilds the frontend, runs the frontend unit tests, verifies the committed `internal/webui/dist` matches the source, runs gofmt / vet / tests, and verifies the vendored Worker Skill snapshot (`node scripts/verify-vendored-skill.cjs` + `--self-test`). CI (`.github/workflows/ci.yml`) runs the same checks on every push to main and every PR.
22
+
-**Pre-commit gate**: `make check` — rebuilds the frontend, runs the frontend unit tests, verifies the committed `internal/webui/dist` matches the source, runs gofmt / vet / tests, and verifies the vendored Worker Skill snapshot (`node scripts/verify-vendored-skill.cjs` + `--self-test`): the actual recursive file set of `skills/light-kanban-worker/` must equal `skills/manifest.json` exactly — missing files, hash drift, and unexpected extra files all fail the gate. CI (`.github/workflows/ci.yml`) runs the same checks on every push to main and every PR.
23
23
-**Cross-compile**: `make cross` (or `scripts\cross-build.ps1`) → `dist/` binaries: linux (amd64), darwin (amd64 + arm64), windows (amd64). Both build the frontend first.
24
24
-**Demo data**: `node scripts/seed-demo.cjs` seeds a running board (35 tasks / 3 agents) for density checks and screenshots.
25
25
-**Data**: SQLite at `-db kanban.db` (default, working directory); `:memory:` accepted. Uploaded agent avatars live in `-avatars avatars` (default) and are served from `/api/avatars/*`.
@@ -31,7 +31,7 @@ A single-binary Go kanban board: a human queues tasks (each card points at a wor
31
31
-**i18n is dual-source**: `frontend/src/i18n/zh.ts` is the key schema; `en.ts` must stay structurally identical (tsc enforces it).
32
32
-**Red-green discipline**: new behavior starts with a failing test at one of the agreed seams (Go: HTTP API / store / cmd; frontend: the ProductTour pure-logic module).
33
33
-**Embedded dist ships with its source**: every change to `frontend/src/` must commit the regenerated `internal/webui/dist/` in the same commit (`make frontend-build`, then verify with `make check`) — otherwise the shipped binary silently keeps the old UI.
34
-
-**Vendored Skill snapshot is read-only**: never edit files under `skills/light-kanban-worker/` in place. The behavioral authority is the upstream `LightDevCoder/skills` repository; to upgrade, re-vendor from the new upstream tag, regenerate `skills/manifest.json` (SHA-256) and update `skills/README.md` — `make check` (and CI) fail on any drift via `scripts/verify-vendored-skill.cjs`.
34
+
-**Vendored Skill snapshot is read-only**: never edit files under `skills/light-kanban-worker/` in place. The behavioral authority is the upstream `LightDevCoder/skills` repository; to upgrade, re-vendor from the new upstream tag (byte-identical copy), regenerate `skills/manifest.json` (repository, tag, commit SHA, package path, per-file SHA-256) and update `skills/README.md` — `make check` (and CI) fail on any drift via `scripts/verify-vendored-skill.cjs`, which enforces the exact file set: manifest-listed files must match byte-for-byte, and no unlisted file may exist.
Copy file name to clipboardExpand all lines: README.md
+52-3Lines changed: 52 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -86,7 +86,7 @@ Download the binary for your machine from [Releases](https://github.com/LightDev
86
86
Install the official worker Skill for your agent host (recommended):
87
87
88
88
```bash
89
-
npx skills add LightDevCoder/skills#v0.1.4 \
89
+
npx skills add LightDevCoder/skills#v0.1.5 \
90
90
--skill light-kanban-worker \
91
91
--yes \
92
92
--copy \
@@ -126,13 +126,41 @@ codex-main
126
126
Agent Name:
127
127
Codex
128
128
129
+
Agent Avatar:
130
+
/path/to/codex-icon.png
131
+
129
132
Prefer existing or returned work before claiming a new task.
130
133
When finished, return the task for human confirmation.
131
134
```
132
135
136
+
Avatar is required only the first time this Agent ID is registered. Later
137
+
runs reuse the identity stored by Light-Kanban.
138
+
139
+
Configure this schedule with max concurrency = 1 for codex-main. Do not
140
+
start a new codex-main run while the previous one is still active —
141
+
different Agent IDs may run concurrently, but two runs of the same Agent ID
142
+
must not overlap.
143
+
133
144
Schedule it every 15 minutes — or whatever cadence fits your workload.
134
145
135
-
Prefer a one-shot test before creating the schedule? Run the agent once manually with:
146
+
Prefer a one-shot test before creating the schedule? Run the agent once
147
+
manually with the full first-run form:
148
+
149
+
```text
150
+
Use light-kanban-worker to process one Light-Kanban task.
151
+
152
+
Light-Kanban URL:
153
+
http://127.0.0.1:8641
154
+
155
+
Agent ID:
156
+
codex-main
157
+
Agent Name:
158
+
Codex
159
+
Agent Avatar:
160
+
/path/to/codex-icon.png
161
+
```
162
+
163
+
After the first successful registration you can simplify to:
136
164
137
165
```text
138
166
Use light-kanban-worker to process one task from
@@ -159,7 +187,24 @@ To Do queue ─────┼─ Claude Code
159
187
└─ DeepSeek
160
188
```
161
189
162
-
Claiming is atomic: the same card can never be claimed by two agents, so all of them can safely share one board.
190
+
Claiming is atomic: the same card can never be claimed by two agents, so all of them can safely share one board. Different agent IDs may run concurrently. Multiple simultaneous runs using the same agent ID must not overlap — set each scheduler to max concurrency 1 for its agent ID.
191
+
192
+
### Long-running tasks
193
+
194
+
If a task takes longer than the scheduler interval, the next wake for that
195
+
same agent must be skipped until the current run finishes. Example:
196
+
schedule every 15 min, task runtime 40 min.
197
+
198
+
```text
199
+
08:00 run
200
+
08:15 skip
201
+
08:30 skip
202
+
08:40 finish
203
+
08:45 next run allowed
204
+
```
205
+
206
+
The Worker contract requires the scheduler to enforce this (max concurrency
207
+
1 per Agent ID); the board itself does not lease runs to agents.
Claim constraints: `name` is your tool name; `avatar` must be the agent's **own icon image** (e.g. Codex claims with the Codex icon, Claude Code with the Claude Code icon — an uploaded path or an http(s) image URL). Placeholders and fabricated paths get a 422. The card then shows the agent's avatar at its top right.
209
254
255
+
Atomic claim prevents different agents from claiming the same To Do task.
256
+
It does not coordinate overlapping executions sharing the same agentId —
257
+
that is the scheduler's job (max concurrency 1 per agentId).
258
+
210
259
Status transitions (agent, via API): `POST /api/tasks/<id>/block` (optionally with `{"reason":"…"}` — the card shows why it is stuck), `/unblock`, `/complete`. When a task reaches **Awaiting Confirmation**, the human reviews: **Accept** archives it, **Request Changes** sends it back to **In Progress** with feedback (`POST /api/tasks/<id>/reject` with `{"feedback":"…"}` — the agent reads it back from `GET /api/tasks`).
0 commit comments