Help us shape the future of Go! Take the 2026 Go Developer Survey

dfc

module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 30, 2026 License: MIT

README

dfc, don't forget cli

Quick-capture task CLI and TUI.

demo

dfc is a small, fast task tracker that lives on your disk. Tasks are plain markdown files under ~/.dfc/projects/<slug>/. A TUI gives you a fuzzy picker, search, and a global view across every project; a CLI gives shells and agents the same surface area.

Why

When you're:

  • juggling 10 projects;
  • your're in a meeting;
  • or actively doing something else;

dfc lets you capture tasks quickly without interrupting your workflow.

dfc is not a replacement for a dedicated task management system; it's a quick-capture tool so you don't forget. You can also use it as external todo list for agents that can work across projects.

Key features:

  • Files on disk. No database lock-in, no cloud, no account. Open the markdown in any editor.
  • Project-aware. Tasks are grouped into projects by directory. Projects are auto-detected from your current working directory.
  • Power-user-first. One or two keystrokes to any action.
  • Agent-friendly. Every CLI command supports --json. An agent skill manifest lives in skill/SKILL.md.

Why not x?

Probably because either x does too much or is not fast enough to invoke. Also I want project grouping to just work without having to think about it.

Install

go install github.com/MaikuMori/dfc/cmd/dfc@latest

From source:

git clone https://github.com/MaikuMori/dfc
cd dfc
just install
Agent skill

The skill manifest lives at skill/SKILL.md. Three install paths, pick whichever fits:

1. Point your agent at the GitHub URL. Most agents (Claude Code, Cursor, …) can fetch + persist a remote file. Prompt with:

Install the dfc skill from https://raw.githubusercontent.com/MaikuMori/dfc/master/skill/SKILL.md into your skills directory.

2. Curl it directly (Claude Code path shown; swap the dir for other runtimes):

mkdir -p ~/.claude/skills/dfc
curl -fsSL https://raw.githubusercontent.com/MaikuMori/dfc/master/skill/SKILL.md \
  -o ~/.claude/skills/dfc/SKILL.md

3. From a clone (symlink so git pull keeps the skill fresh):

cd dfc
just install-skill        # links skill/ → ~/.claude/skills/dfc
just install-all          # binary + skill in one shot

Quickstart

# Capture a task in the current project (auto-detected from cwd)
dfc c "wire up retry on the upload endpoint"

# Open the TUI
dfc

# List open tasks
dfc ls

# Search across every project
dfc ss "retry"

# Mark done by ULID
dfc done 01J9X7K3M8VQNH4Z7Y3PG2T5BD

Full command reference: dfc --help.

Shell completion

# bash
eval "$(dfc completion bash)"
# zsh — add to .zshrc, or save to a file on $fpath:
source <(dfc completion zsh)
# fish
dfc completion fish > ~/.config/fish/completions/dfc.fish

Status line

dfc count --format prompt prints the cwd project's open-task count (12○, or nothing when there are none) — drop it into starship:

# ~/.config/starship.toml — appends the segment to the end of the first line
format = "$all${custom.dfc}$line_break$character"

[custom.dfc]
command = "dfc count --format prompt"
when = true
format = " [$output]($style)"
style = "bold yellow"

--format json ({open, done, done_today, by_tag}) feeds fancier prompts and tmux status lines; bare dfc count is human-readable. Add -a to count every project instead of the cwd one.

Storage

~/.dfc/
├── projects/<slug>/<ulid>-<desc>.md    # tasks: YAML frontmatter + markdown body
├── projects.json                       # registry: slug → name, tag, last_used
├── index.db                            # SQLite FTS5 mirror for search
└── trash/<ulid>/                       # soft-deleted tasks (undo with `dfc undo`)

Documentation

AI Policy

AI is a tool. If I buy a house, I don't care if you used a golden hammer or a stone as long as it is done well. If all the screws are hammered in and everything is polished with an axe obviously something is wrong. Use whatever tools you're comfortable with as long as the end result is of good quality.

License

MIT — see LICENSE.

Directories

Path Synopsis
cmd
dfc command
internal
cli
core
Package core is the transactional facade over storage, index, and project registry.
Package core is the transactional facade over storage, index, and project registry.
fsutil
Package fsutil holds small filesystem helpers shared by the storage-facing packages (project registry, task store, trash).
Package fsutil holds small filesystem helpers shared by the storage-facing packages (project registry, task store, trash).
index
Package index is a write-through SQLite FTS5 mirror of the tasks on disk.
Package index is a write-through SQLite FTS5 mirror of the tasks on disk.
query
Package query parses dfc's search query language: whitespace-separated terms, `"…"` phrases, leading-`-` negation, and `#tag` / `-#tag` predicates.
Package query parses dfc's search query language: whitespace-separated terms, `"…"` phrases, leading-`-` negation, and `#tag` / `-#tag` predicates.
savedsearch
Package savedsearch persists named query strings under ~/.dfc/searches.json.
Package savedsearch persists named query strings under ~/.dfc/searches.json.
tag
Package tag is the single source of truth for dfc's inline #tag grammar: bare #word, nested #a/b, and multi-word #two words# forms, starting only at a whitespace boundary (which makes a backslash-escaped \# a non-tag), with at least one letter required so issue/version numbers like #3 stay literal.
Package tag is the single source of truth for dfc's inline #tag grammar: bare #word, nested #a/b, and multi-word #two words# forms, starting only at a whitespace boundary (which makes a backslash-escaped \# a non-tag), with at least one letter required so issue/version numbers like #3 stay literal.
trash
Package trash provides a soft-delete tier for tasks and projects.
Package trash provides a soft-delete tier for tasks and projects.
ui
Single source of truth for colors and lipgloss styles used by the TUI.
Single source of truth for colors and lipgloss styles used by the TUI.
watch
Package watch wraps fsnotify with project-aware path management and debounced fan-out to multiple subscribers.
Package watch wraps fsnotify with project-aware path management and debounced fan-out to multiple subscribers.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL