diff --git a/Justfile b/Justfile
index 2762608..f99ed8f 100644
--- a/Justfile
+++ b/Justfile
@@ -14,6 +14,9 @@ ci:
cargo clippy --workspace -- -D warnings
cargo nextest run --workspace
+install:
+ cargo install --path crates/notfiles --root "${HOME}/.local" --force
+
install-hooks:
#!/usr/bin/env sh
printf '#!/bin/sh\njust pre-commit\n' > .git/hooks/pre-commit
diff --git a/crates/notfiles/src/cli.rs b/crates/notfiles/src/cli.rs
index 670f503..fdaa300 100644
--- a/crates/notfiles/src/cli.rs
+++ b/crates/notfiles/src/cli.rs
@@ -24,6 +24,31 @@ pub struct Cli {
pub command: Command,
}
+// TODO(install): `notfiles` is not yet installed on PATH. Add `just install` recipe and
+// `mise task` so `nf` / `notfiles` is available without `cargo run`. See Justfile.
+
+// TODO(bootstrap): Wire `notstrap` into the CLI as `notfiles bootstrap`. Should clone the
+// repo, resolve age key (Bitwarden/YubiKey/prompt), decrypt SOPS secrets, link packages,
+// and run post-hooks. The notstrap crate already models this — needs a CLI entry point.
+
+// TODO(migrate): Add `notfiles migrate
` that takes a stow/chezmoi repo (from `detect`)
+// and generates a notfiles.toml for it, then bulk-adopts all packages. Should call
+// `detect::detect()`, let the user pick a source, and run `adopt` for each package.
+
+// TODO(which): Add `notfiles which ` — reverse lookup from a target path (e.g.
+// ~/.gitconfig) to its source package and file. Walk state entries and check read_link.
+
+// TODO(doctor): Add `notfiles doctor` — holistic drift detection replacing drift-check.sh.
+// Checks: broken symlinks, unmanaged dotfiles in $HOME, dirty git state, conflicts,
+// packages in dir not listed in notfiles.toml. Should print a summary like `just doctor`.
+
+// TODO(discover): Add `[defaults] discover = true` mode to notfiles.toml so all top-level
+// dirs are treated as packages automatically, without maintaining an explicit `include`
+// list. Opt-in via config, not the default (explicit is safer).
+
+// TODO(edit): Add `notfiles edit ` — resolve the source file for a managed
+// symlink and open it in $EDITOR. Quality-of-life shortcut for day-to-day editing.
+
#[derive(Subcommand, Debug)]
pub enum Command {
/// Create a starter notfiles.toml
diff --git a/nushell/.config/nushell/autoload/aliases.nu b/nushell/.config/nushell/autoload/aliases.nu
index e404996..3808d53 100644
--- a/nushell/.config/nushell/autoload/aliases.nu
+++ b/nushell/.config/nushell/autoload/aliases.nu
@@ -60,6 +60,9 @@ alias zbi = zb install
alias zbl = zb list
alias zbu = zb update
+# ── notfiles ─────────────────────────────────────────────────────────────────
+def --wrapped nf [...args] { notfiles --dir /Users/joe/dev/notfiles ...$args }
+
# ── Dotfiles ─────────────────────────────────────────────────────────────────
alias dotfiles = cd ~/dotfiles
def --env dotgs [] { cd ~/dotfiles; git status -sb }