nasin pali (the way of work)
This README is aspirational! None of the code exists yet, I'm just getting my ideas down.
nasin pali, installed as np, is a CLI tool that encourages LLMs in agentic
coding tools (specifically coding, I don't think we want to support generic
workflows) to do a bit more planning before going off and making a bunch of
changes. It is both meant for humans and LLMs; there are subcommands that
produce instructions for the model and subcommands that let the human inspect
what the model's doing.
The todo systems built into agentic coding tools are often just that: todo and
nothing else. They also, if I understand correctly, have the LLM reproduce the
entire task list with each todo_write invocation, which just seems crazy to
me. What if it decides it doesn't want to do a task because it's "too hard" and
it just omits that task next time it writes the list? nasin pali does things a
little differently.
-
Start a new session with
np s. It adds details to the global sqlite database and produces output to guide the LLM through its next steps. Instead of telling the model up-front about everything it can do with nasin pali, all the sub-commands and flags, we only reveal the sub-commands and flags it might actually need once it needs them. It shouldn't ever use the interactive commands, so we don't tell them model about them.- There can be one active session per working directory and the previous session must be archived before starting a new one. This is so the model doesn't have to provide a session ID or something for each invocation.
-
np stells the model about the goal and task sub-commands and their flags and to begin the session by turning the user's request, bug report, issue contents, spec, etc. into a concise overarching goal with a thorough description -
np g saccepts title and description arguments and tells the model to, if necessary, look around at additional relevant files before adding some tasks withnp t a
When multi-line inputs are required, use
np goal set "Sentence case title" "$(cat <<'EOF'
Multi-line
- Body
- Here
EOF
)"