Releases: johnnydecimal/cli.johnnydecimal.com
Release list
3.5.0
AI generated. Reviewed by Johnny.
This release makes jd agent-setup the one home for setup. The
johnnydecimal.com MCP server's install_cli tool clones this repo and
then sends the agent to this prompt. The prompt no longer sends the
agent back to the server.
Changes
- The prompt carries the safety rules that lived in the server's text
before: name the package manager before jq is installed, add to an
existing config and never overwrite it,JD_CONFIGoverrides the
file's location, the rc file for each shell withconfig.fishfor
fish, show the line and the file before writing, never add the source
line twice, append and never reorder, resolve a symlinked rc file
and say where the real file lives, and touch no other file. - Step 3 sends a bought system that is not on disk to the server's
install_systemtool, which builds it and writes the config. - Step 8 offers the zsh prompt both ways,
_jd_pwdin the user's own
prompt or Johnny's theme, and warns that the theme setsPROMPT
whatever was there. Nothing is added without a yes. - The line "If you have the Johnny.Decimal MCP server, call its
install_cli tool" is gone. test/cases/setup.shchecks the new lines and thatinstall_cliis
no longer named.
3.4.0
AI generated. Reviewed by Johnny.
This release adds a shell hook for fish. Sean Lunsford contributed it
in #12.
Features
jd.fishis the shell hook for fish. Source it fromconfig.fish.
It definesjd,jdex, and one command per system, the same as
jd.shdoes. Each one runsbin/jdand moves your shell to the
folder the program prints. It also putsbinon$PATH. There is
no fish port of the zsh prompt.
Changes
test/cases/fish.shcovers the fish hook. It runs fish as a
subprocess, and skips with one line when fish is not installed. CI
installs fish, so the tests run there.- The README lists fish next to bash and zsh, with its own install
step.
3.3.0
AI generated. Reviewed by Johnny.
This release adds a rename and a subfolder target to jd move.
Features
jd move <path> <id> --as <name>moves and renames in one step.
--as=<name>works too. The journal keeps the old name infromand
the new name into, sojd undo movegives the old name back. The
clash check is on the new name.jd move <path> <id>/<subfolder>puts the file or folder in a
subfolder of the ID's folder, one level down. jd makes the subfolder
when it does not exist. An undo leaves the subfolder in place. A
second/is refused.- The
--jsonresult has two more fields:name, the name atto,
andfolder, the folder atto.
3.2.0
AI generated. Reviewed by Johnny.
This release adds jd move, which moves a file or a folder into an ID
and journals it, and jd undo move, which moves it back. Both are beta.
Features
jd move <path> <id>moves the file or folder at<path>into the
folder for an ID or a W number, and prints the new path. An ID that
is in the JDex but has no folder gets its folder made first. It
refuses a name the target already holds, an iCloud stub that is not
downloaded, and a target inside the thing you are moving. It never
renames.- Every move is one line in
~/.jd/journal.jsonl: when, which system,
the ID, from, to, and whether a person or a program asked. The file
is append only. The journal has to be writable before anything
moves. jd writes nothing into the JDex. jd undo movemoves the newest move in the system back, or, with a
path, the move that put that path where it is. It refuses if the
moved thing is no longer where jd put it, or if something else is
now where it came from. An undo is one more journal line.- Both take
--dry-runand--json, in the shapejd newuses.
Changes
- The README opens with an attribution line that points at the AI
attribution section.
Closes #8.
3.1.0
AI generated. Reviewed by Johnny.
This release adds jd agent-setup, which has your agent write the config
for you.
Features
jd agent-setupprints a prompt for your agent. Paste it in, and the
agent finds your systems on disk, confirms each root with you, and
writes~/.jd/config.jsonand thesourceline in your shell config.
It works before any config exists. Only the prompt goes to stdout, so
jd agent-setup | pbcopyputs it on the clipboard.
Changes
- The "no config" error is now three lines: the file it looked for, the
help page for a person to read, andjd agent-setupfor an agent.
Every command that needs the config says the same thing.
Closes #7.
v3.0.0
AI generated. Reviewed by Johnny.
This release makes jd a standalone program, and removes the 1.x shims.
Breaking changes
- The
jd-nav/andjd-prompt/directories are gone. A.zshrcthat
sources either one now fails at shell start with "no such file".
Replace that line withsource ~/.jd/cli/jd.sh. jd new --jsonno longer changes directory. It prints the object and
exits. Without--json,jd newmoves into the new folder as before.
Features
bin/jdis the program. It can be run without sourcing anything,
from a script, cron, an agent, or another program.- A move run from the program prints the folder on stdout and exits 0,
socd "$(~/.jd/cli/bin/jd 11.11)"works. - The shell hook sets
JD_HOOKwhen it runs the program. A move then
exits 3 instead of 0, and the hook does thecd. --systemis now read only as the first word, so it cannot be taken
for a title or for a flag ofjd new.jd helpnow works without a config.source ~/.jd/cli/jd.shnow adds~/.jd/cli/binto$PATH.
Changes
jd.shis now a hook. It definesjd,jdexand one command per
system, addsbinto$PATH, and loads nothing fromlibbut the
zsh prompt. Each function it defines is self-contained, so a shell
that copiesjdwithout its helpers still gets a working command.- The version number now lives only in
bin/jd.jd versionreads it
from there. jdandjdexno longer hard-code a system. The program resolves
the default on every run, so a config edit takes effect immediately.
v2.5.1
AI generated. Reviewed by Johnny.
Changed
jd beta onwarns you that beta features are unstable and modify
your data. You also see the warning injd beta --help, and when you
run a beta feature with beta off.
v2.5.0
AI generated. Reviewed by Johnny.
Added
- Beta features, and one flag that turns them all on.
jd betasays whether beta is on.jd beta onandjd beta off
turn it on and off.- The flag is
"beta": trueat the top level of~/.jd/config.json.
JD_BETA=1turns beta on for one shell, and writes nothing. - Beta features may change, or go, without notice.
jd new 21.41 A titlemakes a whole work package with one command.
It is a beta feature.- It takes the next free W number from the JDex and the filesystem.
- It writes the JDex note from your template note.
- It makes the folder, and copies your template folder into it.
- It makes the project in your task app, and writes the links both
ways. Things is the first task app. Obsidian is the first note app. - The
workPackagesblock in~/.jd/config.jsonnames the templates
and the apps.config.example.jsonshows the block.
jd new -nsays what it would make, and makes nothing.jd new --no-tasksmakes the work package without the task app.jd new --refreshreads the template project out of Things and writes
it to the template file.jd new --jsonprints one JSON object on stdout, for an agent. Every
failure has acodethat does not change.jd new --peekprints the next free W number, and makes nothing.- A template note can hold a blank, such as
{{?SCOPE}}or
{{?DELIVERABLE What we hand over}}.jd newleaves the blank in the
note and names it, so that you or your agent can fill it in.
Changed
newandbetaare command words in first position.jd newand
jd betano longer search for a folder with that word in its name. A
scoped search, such asjd 21 new, still does.
v2.4.1
AI generated. Reviewed by Johnny.
Changed
-
jdfinds the work package area by the start of its number. It looks
for a folder namedW0000...at the top of the system. It used to
read the area from the JDex entry's parent folder, and match the whole
number, so a renamed area stopped it.A work package always lives in
W0000-9999, so there is nothing to
work out. The linked ID in a name likeW0214~00.00is not read.
v2.4.0
AI generated.
Added
-
A work package that is in the JDex but has no folder gets its folder
made for it, the same as an ID does.jd W0189makes
W0189~21.41 Some titlefrom the JDex entry of that name, then goes
to it.The folder goes in the
W0000-9999area. If the filesystem has no
folder for that area,jdsays so and makes nothing. The linked ID in
a name likeW0189~21.41is not read.2.4.1 changes how
jdfinds that area.