Move the to-do list from NOTES.md to a kandown board
Each note is a task in tasks/ with the owner's words under ## Context; the board rules are in .kandown/kandown_work.md and docs/kandown.md explains how kandown works here. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
daemon.json
|
||||
daemon.lock
|
||||
.undo/
|
||||
|
||||
# Local extension state. Which extensions you enabled and which you trusted is a
|
||||
# per-machine decision, and a committed copy is ignored at load time anyway
|
||||
# (see docs/EXTENSIONS.md).
|
||||
extensions/enabled.json
|
||||
extensions/trust.json
|
||||
@@ -0,0 +1,56 @@
|
||||
# Kandown
|
||||
|
||||
File-based kanban for this project. Zero install, zero backend, plain markdown on disk.
|
||||
|
||||
## Layout
|
||||
|
||||
```
|
||||
.kandown/ # config, web UI, workflows, skills
|
||||
├── kandown.html # single-file web app — open this in your browser
|
||||
├── kandown.json # project preferences, columns, appearance
|
||||
├── kandown_work.md # optional project agent instructions
|
||||
├── workflows/ # optional local workflow packages
|
||||
├── skills/ # optional local Markdown skill packages
|
||||
└── README.md # this file
|
||||
|
||||
tasks/ # source of truth — one .md file per task
|
||||
├── t1.md
|
||||
├── t2.md
|
||||
└── archive/ # archived tasks live here
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
1. Open `.kandown/kandown.html` in Chrome, Edge, Brave or Opera (File System Access API required)
|
||||
2. Click **Select folder** and pick the **project root** (the parent of `.kandown/`), then grant read/write permission
|
||||
3. That's it
|
||||
|
||||
The app remembers the last 10 projects you've opened — no need to re-select the folder each time.
|
||||
|
||||
## Settings
|
||||
|
||||
Open Settings from the app header to tune this project. Board columns are stored in `.kandown/kandown.json` at `board.columns`. Each task chooses a column with its frontmatter `status`.
|
||||
|
||||
## Editing without the app
|
||||
|
||||
Everything is plain markdown. Edit files directly in your IDE, Obsidian, or vim. Click **Reload** in the app (or press `R`) to see changes.
|
||||
|
||||
The task editor includes a markdown-backed subtask checklist. Add steps with **Add subtask**, press **Enter** to insert another step, and expand a step to edit its description or report. Changes are saved back to the task file automatically.
|
||||
|
||||
## For AI agents
|
||||
|
||||
Run `kandown work` for the current agent protocol and live board context. Each task file in `tasks/` is its own source of truth. Moving a task means editing its frontmatter `status`.
|
||||
|
||||
## Keyboard shortcuts
|
||||
|
||||
| Key | Action |
|
||||
|---|---|
|
||||
| `⌘K` / `Ctrl+K` | Command palette |
|
||||
| `⌘1` / `Ctrl+1` | Board view |
|
||||
| `⌘2` / `Ctrl+2` | List view |
|
||||
| `N` | New task |
|
||||
| `R` | Reload |
|
||||
| `/` | Focus search |
|
||||
| `Esc` | Close drawer / palette |
|
||||
| `⌘S` | Save current task |
|
||||
| `⌘⌫` | Delete task (with confirmation) |
|
||||
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"version": 1,
|
||||
"preferred": "claude",
|
||||
"cascade": {
|
||||
"unassignedBehavior": "skip",
|
||||
"sameSessionChain": false
|
||||
},
|
||||
"agents": [
|
||||
{
|
||||
"id": "claude",
|
||||
"name": "Claude Code",
|
||||
"bin": "claude",
|
||||
"interactive": true,
|
||||
"description": "Anthropic Claude (interactive session)",
|
||||
"aliases": ["claude", "claudecode", "anthropic", "claudeai"]
|
||||
},
|
||||
{
|
||||
"id": "codex",
|
||||
"name": "OpenAI Codex",
|
||||
"bin": "codex",
|
||||
"interactive": true,
|
||||
"description": "OpenAI Codex CLI",
|
||||
"aliases": ["codex", "openaicodex"]
|
||||
},
|
||||
{
|
||||
"id": "gemini",
|
||||
"name": "Gemini CLI",
|
||||
"bin": "gemini",
|
||||
"interactive": true,
|
||||
"description": "Google Gemini CLI",
|
||||
"aliases": ["gemini", "geminicli", "googlegemini"]
|
||||
},
|
||||
{
|
||||
"id": "goose",
|
||||
"name": "Goose",
|
||||
"bin": "goose",
|
||||
"interactive": false,
|
||||
"description": "Block open-source AI agent",
|
||||
"aliases": ["goose", "blockgoose"]
|
||||
},
|
||||
{
|
||||
"id": "aider",
|
||||
"name": "Aider",
|
||||
"bin": "aider",
|
||||
"interactive": true,
|
||||
"description": "Git-aware AI pair programmer",
|
||||
"aliases": ["aider"]
|
||||
},
|
||||
{
|
||||
"id": "opencode",
|
||||
"name": "OpenCode",
|
||||
"bin": "opencode",
|
||||
"interactive": true,
|
||||
"description": "SST AI coding TUI",
|
||||
"aliases": ["opencode", "sstopencode"]
|
||||
},
|
||||
{
|
||||
"id": "cursor",
|
||||
"name": "Cursor",
|
||||
"bin": "cursor",
|
||||
"interactive": true,
|
||||
"description": "Cursor IDE (opens project; paste prompt)",
|
||||
"aliases": ["cursor"]
|
||||
},
|
||||
{
|
||||
"id": "pi",
|
||||
"name": "Pi",
|
||||
"bin": "pi",
|
||||
"interactive": true,
|
||||
"description": "Earendil Works pi coding agent",
|
||||
"aliases": ["pi", "piearendil", "picodingagent"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"ui": {
|
||||
"language": "en",
|
||||
"theme": "auto",
|
||||
"skin": "kandown",
|
||||
"font": "inter"
|
||||
},
|
||||
"agent": {
|
||||
"suggestFollowUp": false,
|
||||
"maxSuggestions": 3,
|
||||
"workOutput": {
|
||||
"detailMode": "complete",
|
||||
"boardDigest": {
|
||||
"showColumnCounts": true,
|
||||
"showTasks": true,
|
||||
"showPriority": true,
|
||||
"showAssignee": true,
|
||||
"showBlockedBy": true,
|
||||
"showNextActionable": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"workflow": {
|
||||
"active": "kandown-standard",
|
||||
"skills": [],
|
||||
"trackingCadence": "balanced"
|
||||
},
|
||||
"board": {
|
||||
"columns": [
|
||||
"Backlog",
|
||||
"Todo",
|
||||
"In Progress",
|
||||
"Review",
|
||||
"Done"
|
||||
],
|
||||
"defaultPriority": "P3",
|
||||
"defaultOwnerType": "human",
|
||||
"stackDefaultState": "collapsed",
|
||||
"columnMeta": {
|
||||
"Backlog": {
|
||||
"role": "backlog",
|
||||
"instructions": "Capture unscheduled work here. Keep enough context to decide whether it belongs in this workflow."
|
||||
},
|
||||
"Todo": {
|
||||
"role": "ready",
|
||||
"instructions": "Only move work here when its required inputs, acceptance criteria, dependencies, and approvals are ready."
|
||||
},
|
||||
"In Progress": {
|
||||
"role": "active",
|
||||
"instructions": "Execute the current workflow phase, update the checklist as work happens, and record blockers immediately."
|
||||
},
|
||||
"Review": {
|
||||
"role": "review",
|
||||
"instructions": "Finished work waits here for the owner to check in the game. Only the owner moves it to Done; if it isn't fixed, the owner moves it back with feedback."
|
||||
},
|
||||
"Done": {
|
||||
"role": "terminal",
|
||||
"instructions": "Only accept work whose criteria and required review are satisfied. Preserve the completion report and evidence."
|
||||
}
|
||||
},
|
||||
"columnColors": {
|
||||
"done": "yellow"
|
||||
}
|
||||
},
|
||||
"tui": {
|
||||
"defaultView": "list",
|
||||
"showDetailPane": true,
|
||||
"listSort": "status"
|
||||
},
|
||||
"fields": {
|
||||
"priority": true,
|
||||
"assignee": false,
|
||||
"tags": true,
|
||||
"dueDate": false,
|
||||
"ownerType": false,
|
||||
"tools": false
|
||||
},
|
||||
"notifications": {
|
||||
"browser": false,
|
||||
"sound": false,
|
||||
"soundId": "soft",
|
||||
"statusChanges": true,
|
||||
"taskEdits": true,
|
||||
"subtaskCompletions": true,
|
||||
"editDebounceMs": 2000
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
## Deepgrain Foundry: working the board
|
||||
|
||||
The board is the owner's to-do list. `docs/kandown.md` explains how kandown works here.
|
||||
|
||||
- **Work on tasks only when the owner asks** ("do the next task", "do t8"). Don't pick up work
|
||||
on your own.
|
||||
- **Kinds of task.**
|
||||
- **Todo**: things to build or fix.
|
||||
- **Backlog, tagged `discussion`**: give options with trade-offs and a recommendation, in
|
||||
chat, and write nothing in code until the owner decides. Then record the decision.
|
||||
- **Backlog, tagged `idea`**: ideas for later. Leave them alone unless asked.
|
||||
- Questions get answers.
|
||||
- **Keep the owner's words.** Never rewrite or tidy the owner's text in `## Context`, and don't
|
||||
rename tasks the owner made. Add what you learn as `## Subtasks` with `report:` lines, or in
|
||||
the `report` field.
|
||||
- **When a task is finished**, move it to **Review** (that is "done, please check") and set the
|
||||
`report` field: what changed, and how to check it in the game. Never move a task to Done:
|
||||
the owner does that after checking it. If the owner moves it back with feedback, keep the
|
||||
feedback and work from it.
|
||||
- **Log your work.** Add an entry at the top of `docs/agent-log.md` with the date, the task id
|
||||
and title, what changed, the files touched, the tests run, and anything left open.
|
||||
- **Record decisions.** When the owner decides something about the design, add it to the
|
||||
decisions list in `docs/DESIGN.md` with the date and the reason they gave.
|
||||
- **Commit task files with the work** they describe. The owner may be editing tasks too: stage
|
||||
only the task files you changed.
|
||||
- **New tasks the owner asks for**: `kandown create "title" --to Todo` (add `-t discussion` or
|
||||
`-t idea` for Backlog), then put the owner's words under `## Context`.
|
||||
Reference in New Issue
Block a user