외부 작업관리 인프라(beads, backlog.md 등) 위에서 동작하는 Rust 터미널 UI(TUI) 할 일 관리 클라이언트
taskr는 자체 저장소를 두지 않습니다. 데이터는 beads · backlog.md 같은 외부 인프라에 저장되고, taskr는 그 위에서 빠른 키보드 중심의 CRUD UI를 제공합니다.
- 백엔드 무관 (헥사고날 아키텍처) — 도메인/유스케이스는 순수하게 유지하고, 각 인프라는 어댑터로 붙입니다. 새 백엔드 대응 = 어댑터 1개 추가.
- beads —
bd --json출력을 셸아웃으로 활용 (의존성·우선순위·라벨·상태). - backlog.md —
backlog --plain출력 파싱으로 지원. - memory — 백엔드 없이 동작하는 인메모리(데모/체험용).
- ratatui 기반 TUI — 리스트/상세 뷰, 칸반 보드, 생성·수정 모달, 검색·필터, 도움말.
- XDG 설정 —
~/.config/taskr/config.json.
flowchart LR
subgraph inbound["인바운드 어댑터 (Driving)"]
tui["TUI (ratatui)"]
end
subgraph core["도메인 코어 (순수)"]
usecase["TaskService"]
ports["포트: TaskApi · TaskRepository · ConfigStore"]
end
subgraph outbound["아웃바운드 어댑터 (Driven)"]
beads["BeadsRepository"]
backlogmd["BacklogMdRepository (추후)"]
cfg["FileConfigStore"]
end
tui --> ports
ports -. impl .- usecase
ports -. impl .- beads
ports -. impl .- backlogmd
ports -. impl .- cfg
beads --> bd[("bd CLI")]
의존성은 항상 바깥(어댑터) → 안(코어) 방향입니다. 코어는 ratatui도 bd도 모릅니다.
taskr는 XDG 규칙에 따라 설정을 찾습니다 (우선순위 순):
--config <path>명령행 인자$TASKR_CONFIG환경변수~/.config/taskr/config.json($XDG_CONFIG_HOME/taskr/config.json)- 빌트인 기본값 (없으면 첫 실행 시 자동 생성)
{
"backend": "beads",
"beads": { "dir": null },
"backlog": { "project_path": null },
"ui": { "default_view": "list" }
}- Rust 1.89+ (edition 2024)
- 선택한 백엔드의 CLI:
- beads:
bd— 대상 프로젝트에서bd init필요 (config.beads.dir또는 cwd/BEADS_DIR) - backlog.md:
backlog—backlog init필요 (config.backlog.project_path또는 cwd) - memory: 외부 CLI 불필요
- beads:
cargo build --release
# 설정의 backend 사용
cargo run
# 백엔드/설정을 인자로 오버라이드
cargo run -- --backend memory
cargo run -- --backend backlog --config /path/to/config.json| 키 | 동작 |
|---|---|
j / k, g / G |
이동 / 처음·끝 |
Enter |
상세 보기 |
n / e / d |
생성 / 수정 / 삭제 |
space |
상태 토글(완료) |
/ |
검색 |
Tab |
리스트 ↔ 칸반 전환 |
r |
새로고침 |
? |
도움말 |
q |
종료 |
beads · backlog.md · memory 세 백엔드에서 목록/생성/수정/완료/삭제·검색·필터·칸반 보드가 동작합니다.
MIT