README.md

  1# nasin pali (the way of work)
  2
  3[![REUSE status](https://api.reuse.software/badge/git.secluded.site/nasin-pali)](https://api.reuse.software/info/git.secluded.site/nasin-pali)
  4[![Go Report Card](https://goreportcard.com/badge/git.secluded.site/nasin-pali)](https://goreportcard.com/report/git.secluded.site/nasin-pali)
  5
  6**This README is aspirational!** None of the code exists yet, I'm just getting
  7my ideas down.
  8
  9---
 10
 11## Overview
 12
 13_nasin pali_, installed as `np`, is a CLI tool that encourages LLMs in agentic
 14coding tools (specifically coding, I don't think we want to support generic
 15workflows) to do a bit more planning before going off and making a bunch of
 16changes. It is _both_ meant for humans and LLMs; there are subcommands that
 17produce output for the model and subcommands for the human to inspect the
 18model's progress. There's a section on [the name](#the-name) if you're curious
 19about it.
 20
 21The todo systems built into agentic coding tools are often just that: todo and
 22nothing else. I think (backed by no evidence) that they do better when they can
 23also set a goal. If I understand the coding tools correctly, they also have the
 24LLM reproduce the entire task list with each `todo_write` invocation, which just
 25seems wasteful and careless to me. What if it decides it doesn't want to do a
 26task because it's "too hard" and it just omits that task next time it writes the
 27list? _nasin pali_ helps force the model into a different overall flow.
 28
 29## Expected workflow
 30
 31_This is what I like, I'd be happy to hear of other workflows that lead to
 32better/different success and to consider whether nasin-pali can support them_
 33
 34The operator is expected to load the prompt up with relevant text. Type the
 35issue in the prompt, paste the bug report, tell it how to fetch the issue from
 36your issue tracker, whatever you like. If the issue content is too sparse, make
 37sure to add more context. The more context you give and the higher its quality
 38and relevancy, the better results you'll have. Include paths to as many files
 39you know will be relevant as possible. Mention particular symbols, paste
 40snippets of code, etc. Once your prompt looks good, send it off.
 41
 42In the `np` section of the model's rules, we'll have instructions to
 43_immediately_ set an overarching goal with `np g s -t title -d description` that
 44captures the operator's request, combining the information from the ticket and
 45any extra operator-provided context. It should then go off and look at the
 46provided references and thoroughly consider how to go about resolving the goal.
 47After gathering that context, it adds tasks with `np t a -t title -d description
 48-t title2 -d description2` and gets started on them.
 49
 50I'm unsure how to handle session archival (mentioned in [random
 51thoughts](#random-thoughts)). We could tell the model how to archive sessions in
 52the rules, but I don't know that the model even needs to know about sessions;
 53maybe archival should require human interaction. If the model can't archive
 54sessions, and the agentic coding tool doesn't have a way for the operator to
 55execute shell commands, they'd have to quit or open a new shell to run that
 56command before the model can create a new one session. Maybe telling it about
 57the archival command, but to never run it without operator interaction, would be
 58sufficient.
 59
 60## The name
 61
 62Is [toki pona](https://tokipona.org/). [_nasin_](https://nimi.li/nasin) occupies
 63the semantic space of "method, doctrine, tradition; path, road, way" while
 64[_pali_](https://nimi.li/pali) covers "work, activity; create, build, design;
 65put effort toward, take action on". Together and in this context, _nasin pali_
 66could be translated as "the way of work", "the doctrine of design", etc.
 67
 68## Random thoughts
 69
 70- When providing multiple lines for the body, use
 71
 72  ```bash
 73  np goal set "Sentence case title" "$(cat <<'EOF'
 74  Multi-line
 75  - Body
 76  - Here
 77
 78  EOF
 79  )"
 80  ```
 81
 82- I like the way
 83  [planning-mcp-server](https://git.secluded.site/planning-mcp-server#tracking-progress)
 84  renders the task list in unicode characters. `` is one token while `- [x]` is
 85  probably like five.
 86- Start a new session with `np s`. It adds details to the global sqlite database
 87  and produces output to guide the LLM through its next steps. Instead of
 88  telling the model up-front about everything it can do with _nasin pali_ though
 89  AGENTS.md or tool definitions or something, we only reveal the sub-commands
 90  and flags it might actually need once it needs them. It shouldn't ever use the
 91  interactive commands, so we never tell them model about them.
 92  - There can be one active session per working directory and the previous
 93    session must be archived before starting a new one. This is so the model
 94    doesn't have to provide a session ID or something for each invocation.
 95- `np s` tells the model about the goal and task sub-commands and their flags
 96  and to begin the session by turning the user's request, bug report, issue
 97  contents, spec, etc. into a concise overarching goal with a thorough
 98  description
 99- `np g s` accepts title and description arguments and tells the model to, if
100  necessary, look around at additional relevant files before adding some tasks
101  with `np t a`. <mark>Would something like this work?</mark>