issues-fs.sgit.ai / cli

The 14 commands

issues-fs-cli 0.3.0: 17 source files, 1,080 LOC, 94 tests, built on Typer. Fourteen commands, three output formats, and --for-agent on every single one. Everything below was read out of the command source rather than out of a README.

Every command, every flag

CommandPositionalOptions
issues-fs init--path/-p (default .) · --for-agent
issues-fs createnode_type, title--description/-d · --status/-s · --priority/-p · --tags/-t · --output/-o · --for-agent
issues-fs showlabel--depth/-D (default 0) · --output/-o · --for-agent
issues-fs list--type/-t · --status/-s · --output/-o · --for-agent
issues-fs updatelabel--title/-T · --description/-d · --status/-s · --priority/-p · --tags/-t · --output/-o · --for-agent
issues-fs deletelabel--force/-f · --output/-o · --for-agent
issues-fs linksource, verb, target--output/-o · --for-agent
issues-fs unlinksource, target--output/-o · --for-agent
issues-fs linkslabel--output/-o · --for-agent
issues-fs commentlabel, text--author/-a (default cli-user) · --output/-o · --for-agent
issues-fs commentslabel--output/-o · --for-agent
issues-fs types list--output/-o · --for-agent
issues-fs types init--for-agent
issues-fs link-types list--output/-o · --for-agent

The flag that is the story

Every one of the fourteen commands takes --for-agent, and it forces JSON regardless of what --output says.

It is worth being clear about why this is more than a convenience. --for-agent is not a mode. There is no agent subcommand, no separate binary, no JSON-only build. It is one flag added to the command you were already going to run, which means:

Combined with lite mode and the .issues DSL, this is the third of three agent-operable surfaces. No other project in the estate has three, and no document in the corpus says so.

Output formats

ValueWhat you get
tableThe default. Aligned columns for a terminal
jsonMachine-readable. What --for-agent forces
markdownPaste-ready for a pull request description, a commit message or a document

Selected with --output/-o on the eleven commands that produce readable output. types init is the exception: it initialises rather than reports, so it takes only --for-agent.

Two warts, documented rather than hidden

-p means two different things

It is --path on init and --priority on create and update. The failure is silent rather than loud: issues-fs create task "…" -p . does not set a path, it sets the priority to . — and priority is a free string, so nothing rejects it. Prefer the long forms.

--depth is -D, not -d

-d was already taken by --description, so show uses a capital. Worth knowing before you type issues-fs show Task-1 -d 2 and get an error about a description on a command that does not take one.

How the CLI finds your graph

CLI__Context.discover_issues_root()   # walks UP from cwd looking for .issues/

Exactly like git. You can run issues-fs list from six directories deep in the project and it finds the same graph. There is no configuration file naming a repository, no environment variable, and no daemon holding a path — the location of the data is the location of the folder, which is the same reason the tracker travels with a clone.

Recipes

# everything open, as a table
issues-fs list --status open

# every bug, as JSON, for a script
issues-fs list --type bug --output json

# a node and everything two hops out
issues-fs show Task-1 --depth 2

# what is this blocking, and what is blocking it
issues-fs links Task-1

# close something and record why
issues-fs update Task-1 --status done
issues-fs comment Task-1 "Published at /shipped/; verified against live PyPI" --author site-agent

# the whole graph, as JSON, for an agent to reason over
issues-fs list --for-agent

What the CLI does not do

Worth stating, because the absences are informative rather than accidental:

For an agent

Fourteen commands: init, create, show, list, update, delete, link, unlink, links, comment, comments, types list, types init, link-types list. Append --for-agent to any of them to force JSON — that one rule is enough to drive the whole surface. Nodes are addressed by label (Task-1, Bug-27), never by GUID. create prints the new label; capture it. link takes <source> <verb> <target> and writes the inverse on the far endpoint for you, so never create the reverse edge yourself. Use long option names: -p is --path on init and --priority elsewhere, and --depth is -D.