1# nasin pali (the way of work)
2
3[](https://api.reuse.software/info/git.secluded.site/nasin-pali)
4[](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>