sako 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
sako-0.5.0/.gitignore ADDED
@@ -0,0 +1,16 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ .venv/
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ .coverage
7
+ htmlcov/
8
+ node_modules/
9
+ .env
10
+ .env.*
11
+ *.pem
12
+ *.key
13
+ *.sqlite*
14
+ *.db
15
+ .claude/settings.local.json
16
+ dist/
sako-0.5.0/AGENTS.md ADDED
@@ -0,0 +1,84 @@
1
+ # Working on SAKO
2
+
3
+ Rules and checks for agents that change this repository. They extend
4
+ [CONTRIBUTING.md](CONTRIBUTING.md), which people read first.
5
+
6
+ SAKO is a small execution kit: [SAKO.md](SAKO.md) is the method with its default
7
+ planner, `sako.py` is the runtime, `skills/` is the optional agent entry,
8
+ `templates/` holds the empty task table, and `docs/` holds the demo, the glossary,
9
+ the recipes, compatibility, limits, the lifecycle, and the guarantees with their
10
+ evidence (validation).
11
+
12
+ ## Read path
13
+
14
+ 1. This file, then [CONTRIBUTING.md](CONTRIBUTING.md) for the design budgets and the
15
+ [principles](README.md#why-it-stays-small) it points to.
16
+ 2. [SAKO.md](SAKO.md) before changing behavior or planning, and the
17
+ [guarantees](docs/validation.md#guarantees) a change must keep.
18
+ 3. `tests/selftest.py` to see what is proven.
19
+
20
+ ## Laws
21
+
22
+ - One runtime file. `sako.py` stays standard-library Python 3.10 or newer, in one
23
+ file within the runtime budget in CONTRIBUTING.md. Count before adding (`wc -l
24
+ sako.py`). Over the budget, remove something or reopen the question of a heavier
25
+ tool; never add a second script.
26
+ - The principles, the guarantees and the maintainer's direction govern changes to
27
+ project conventions.
28
+ - Machinery only after an observed need. A new check, command or hook shows first
29
+ that the ledger row, the method or an existing command cannot hold it.
30
+ - Documents claim only what exists. A command that is not implemented is not
31
+ documented.
32
+ - Examples are synthetic: no real product, person, account, path or session identifier
33
+ in examples, fixtures or tests. Comparisons, recipes, install steps and client wiring
34
+ may name real tools; check what they say against each tool's current documentation.
35
+ - Plain language, no em dashes, in files, replies and commit messages.
36
+ - Git is the archive: delete retired material and commit the deletion.
37
+
38
+ ## Traps
39
+
40
+ - `init` needs this checkout or the package built from it (`pyproject.toml` installs
41
+ `sako.py` as `sako/__init__.py`). The runtime copied into a project cannot seed
42
+ another project.
43
+ - The scenario suite starts `sleep` processes as stand-ins for agent sessions. An
44
+ interrupted run leaves them until they exit on their own, within an hour.
45
+
46
+ ## Checks
47
+
48
+ From the checkout root:
49
+
50
+ ```sh
51
+ PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -v
52
+ PYTHONDONTWRITEBYTECODE=1 python3 tests/selftest.py
53
+ git diff --check
54
+ ```
55
+
56
+ Run both suites on the oldest supported Python when it is available. A change to
57
+ `sako.py` without a green suite does not land.
58
+
59
+ ## Commits
60
+
61
+ Commit under the author and committer identity already configured for this
62
+ repository; never replace it with a tool identity or change global settings.
63
+
64
+ Every agent-created commit ends, after a blank line, with one trailer per tool that
65
+ did the work, each exactly once:
66
+
67
+ ```text
68
+ Co-authored-by: Codex <noreply@openai.com>
69
+ Co-authored-by: Claude <noreply@anthropic.com>
70
+ ```
71
+
72
+ Use the Codex trailer for Codex work and the Claude trailer for Claude work. Credit both
73
+ only when both materially contributed. Review-only involvement belongs in review
74
+ evidence, not co-authorship. Commits made by a person alone carry no tool trailer.
75
+ Keep each trailer exactly once when amending or squashing. These trailers are the
76
+ whole attribution: no `Claude-Session` trailer, no session links.
77
+
78
+ Write the message in a file and commit with `git commit -F <file>`. Check the
79
+ resulting author, committer and message with `git show -s --format=full HEAD`, and the
80
+ parsed trailers with `git show -s --format='%(trailers:key=Co-authored-by,valueonly)' HEAD`.
81
+
82
+ `.claude/settings.json` supplies Claude Code's trailer text for this repository. A
83
+ Claude session that commits here from outside this project must receive that setting
84
+ explicitly. Codex follows this section; no automatic attribution setting is assumed.
@@ -0,0 +1,44 @@
1
+ # Changelog
2
+
3
+ Notable changes to SAKO, one entry per release. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow
5
+ [Semantic Versioning](https://semver.org/). SAKO is alpha software: commands and file
6
+ formats can change in any 0.x release.
7
+
8
+ ## [0.5.0] - 2026-09-25
9
+
10
+ The first public release.
11
+
12
+ Install from your project's Git repository with `uvx sako init`. To update later, run
13
+ `uvx sako@latest init --update`.
14
+
15
+ ### Added
16
+
17
+ - A task ledger in Markdown, `.sako/work/TASKS.md`, with a done record that keeps a
18
+ receipt for every closed task.
19
+ - A finish gate that checks, when a session stops, that its changes belong to a
20
+ claimed task, that closed work has a passing check for its content, and that
21
+ finished work is committed.
22
+ - Hooks for Claude Code and Codex, chosen by `init`; any other agent runs `start`,
23
+ `check --gate` and `end` itself.
24
+ - Claims and scope checks for parallel sessions in one repository and its linked
25
+ worktrees.
26
+ - Three footprints for the records: local (the default), their own repository, or
27
+ committed with the code.
28
+ - The method, `SAKO.md`, with a small default planner, and a `sako` skill for agents.
29
+
30
+ ### Known issues
31
+
32
+ - Codex gets no hooks on Windows; there the agent runs the commands itself.
33
+ - No live client session has run on a Mac yet; macOS is tested in CI.
34
+ - See [limits](docs/limits.md) for the rest.
35
+
36
+ ### Tested with
37
+
38
+ - Python 3.10 and 3.14 on Linux, macOS and Windows in CI; Python 3.10 and 3.12 on
39
+ WSL2 (Ubuntu 24.04).
40
+ - Git 2.31 or newer.
41
+ - Claude Code 2.1.280 on Linux and Codex 0.154.0 on Linux; Claude Code 2.1.220 hooks
42
+ on Windows.
43
+
44
+ [0.5.0]: https://github.com/Thakay/sako/releases/tag/v0.5.0
@@ -0,0 +1,132 @@
1
+ # Contributing to SAKO
2
+
3
+ SAKO is a task ledger and finish gate for coding agents. A useful change makes task
4
+ ownership, evidence, recovery, or adoption more dependable while preserving the
5
+ project's chosen workflow. A bug report, a result from your client, a documentation
6
+ fix and code are all welcome.
7
+
8
+ ## Report a bug
9
+
10
+ Open an issue with the bug form. Give the smallest reproduction, the expected and
11
+ actual behavior, the versions the form asks for, and the command output that
12
+ explains the failure. Use synthetic examples and remove private project details. To
13
+ report a vulnerability, follow [SECURITY.md](SECURITY.md) instead.
14
+
15
+ ## Propose a change
16
+
17
+ For new machinery, show the observed problem and why the existing task record,
18
+ instructions, or commands cannot handle it. Keep planning practices replaceable.
19
+ An external integration must define source identity, status ownership, and recovery.
20
+ A change serves the finish gate, the ledger, installing, or leaving cleanly, and
21
+ keeps to the [principles](README.md#why-it-stays-small); a change that serves none of
22
+ these waits.
23
+
24
+ A pull request explains the problem, the resulting behavior, how it was checked, and
25
+ any compatibility limits. Follow the writing and commit rules in
26
+ [AGENTS.md](AGENTS.md).
27
+
28
+ ## Design budgets
29
+
30
+ Tests hold these limits. Over one, remove something before adding.
31
+
32
+ | Budget | Limit |
33
+ |---|---|
34
+ | Install | One command, no required flags |
35
+ | Reading for a normal task | About 1,500 words: the skill, the task template's preamble, a start context and the method's required part |
36
+ | Required ledger columns | 8 at most |
37
+ | Runtime | One standard-library file of at most 1,800 lines, counted with `wc -l sako.py` |
38
+
39
+ ## Work from a checkout
40
+
41
+ Use Linux, WSL, macOS or Windows, Python 3.10 or newer, and Git 2.31 or newer; on
42
+ Windows, run the checks from Git Bash, with `python` where they say `python3`. The
43
+ runtime and the tests use Python's standard library; no package installation is
44
+ needed. Read [SAKO.md](SAKO.md) before changing behavior.
45
+
46
+ | Path | Purpose |
47
+ |---|---|
48
+ | [README.md](README.md) | The entry for people: what SAKO is, the quickstart, the footprints |
49
+ | [SAKO.md](SAKO.md) | The method installed in each project, with its default planner |
50
+ | [AGENTS.md](AGENTS.md) | Rules for agents changing this repository; `CLAUDE.md` imports it |
51
+ | [SECURITY.md](SECURITY.md) | How to report a vulnerability, and what SAKO reads and sends |
52
+ | `sako.py` | One Python file for records, presence, evidence, and installation |
53
+ | `pyproject.toml` | Builds the `sako` package from this checkout |
54
+ | `skills/sako/` | Optional agent entry to the installed method |
55
+ | `templates/` | The empty task table |
56
+ | `docs/` | Compatibility, the demo, the glossary, intake recipes, limits, moving to a tracker, update and removal, validation |
57
+ | `tests/` | Unit, concurrent-process, adoption, recovery and documentation checks |
58
+ | `.github/` | CI, the bug form and Dependabot |
59
+
60
+ ## Check the change
61
+
62
+ From the checkout root:
63
+
64
+ ```sh
65
+ PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -v
66
+ PYTHONDONTWRITEBYTECODE=1 python3 tests/selftest.py
67
+ git diff --check
68
+ ```
69
+
70
+ Run both suites on Python 3.10 when available; CI runs them on Linux, Windows and
71
+ macOS. The scenario suite is also part of discovery, so the counts overlap. Tests use
72
+ temporary repositories and process stand-ins: they do not establish live-client
73
+ behavior or newcomer usability. Add a focused regression for a behavior bug.
74
+
75
+ ## Documentation
76
+
77
+ - Each fact has one home; elsewhere, a sentence or two and a link. SAKO.md, the only
78
+ document installed in a project, is the home of behavior.
79
+ - Document only behavior that exists, in the words the
80
+ [glossary](docs/glossary.md) defines: plain language, second person, present
81
+ tense. History belongs in Git, not in the docs; owner deliberations and internal
82
+ planning notes stay out.
83
+ - The `Links` test in `tests/test_release.py` checks that every relative link and
84
+ heading anchor resolves, that the README's links to this repository point at real
85
+ files, and that no page has an em dash.
86
+ - The [demo](docs/demo.md) is generated: after a change to what it shows, run
87
+ `PYTHONDONTWRITEBYTECODE=1 python3 tests/demo.py > docs/demo.md` and never edit
88
+ the page by hand.
89
+ - Update [validation](docs/validation.md) when measured results or their scope
90
+ change; `PYTHONDONTWRITEBYTECODE=1 python3 tests/measure.py` reproduces the
91
+ measurements.
92
+
93
+ ## Build and try the package
94
+
95
+ `pyproject.toml` installs the one runtime file as `sako/__init__.py` beside the
96
+ method, the task template and the skill; nothing moves in the checkout. The wheel
97
+ carries no tests or contributor documents. Building publishes nothing. To build it
98
+ and try it in a fresh Git repository:
99
+
100
+ ```sh
101
+ uv build
102
+ wheel=$(ls -t "$PWD"/dist/sako-*.whl | head -1)
103
+ sako_example=$(mktemp -d)
104
+ git init "$sako_example" && cd "$sako_example"
105
+ uvx --from "$wheel" sako init
106
+ python3 .sako/sako.py next
107
+ ```
108
+
109
+ A new repository has no sign of a client, so `init` installs the shared skill and no
110
+ hooks, and says how to add them:
111
+
112
+ ```text
113
+ Hooks: none, no client found here. Agents read .agents/skills/sako/SKILL.md; run start, check --gate and end yourself (python3 .sako/sako.py start --session <id>). Change the client with: uvx sako init --client claude|codex|none.
114
+ ```
115
+
116
+ `next` then says nothing is ready and points to **No planner? Start here** in
117
+ `.sako/SAKO.md`. [Update and removal](docs/update-and-remove.md) covers the rest of
118
+ the kit's lifecycle.
119
+
120
+ ## AI-assisted contributions
121
+
122
+ They are welcome under four rules: you reviewed the change and can explain it; both
123
+ suites pass; you wrote the pull request description yourself; and each commit names
124
+ the tools that helped, with a `Co-authored-by:` trailer as
125
+ [AGENTS.md](AGENTS.md#commits) describes. No session links.
126
+
127
+ ## How the project runs
128
+
129
+ One maintainer reviews and decides; decisions live in issues and pull requests.
130
+ Expect a first reply within 7 days, and within 14 days for a security report. There
131
+ is no contributor license agreement: under GitHub's terms of service, a contribution
132
+ is licensed under the repository's MIT license.
sako-0.5.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kasra Aminiyeganeh
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
sako-0.5.0/PKG-INFO ADDED
@@ -0,0 +1,200 @@
1
+ Metadata-Version: 2.5
2
+ Name: sako
3
+ Version: 0.5.0
4
+ Summary: A task ledger and finish gate for coding agents
5
+ Project-URL: Homepage, https://github.com/Thakay/sako
6
+ Project-URL: Documentation, https://github.com/Thakay/sako/tree/main/docs
7
+ Project-URL: Issues, https://github.com/Thakay/sako/issues
8
+ Project-URL: Source, https://github.com/Thakay/sako
9
+ Project-URL: Changelog, https://github.com/Thakay/sako/blob/main/CHANGELOG.md
10
+ Author: Kasra Aminiyeganeh
11
+ License-Expression: MIT
12
+ License-File: LICENSE
13
+ Keywords: agentic development,claude code,codex,coding agents,finish gate,task ledger
14
+ Classifier: Development Status :: 3 - Alpha
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Operating System :: MacOS
18
+ Classifier: Operating System :: Microsoft :: Windows
19
+ Classifier: Operating System :: POSIX :: Linux
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3 :: Only
22
+ Classifier: Programming Language :: Python :: 3.10
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.14
25
+ Classifier: Topic :: Software Development
26
+ Classifier: Topic :: Software Development :: Quality Assurance
27
+ Requires-Python: >=3.10
28
+ Description-Content-Type: text/markdown
29
+
30
+ # SAKO
31
+
32
+ SAKO helps you track coding-agent tasks and review the evidence behind finished
33
+ work. It keeps tasks in a Markdown **ledger** and uses a **finish gate** to flag
34
+ unrecorded changes, missing or stale check results, and finished work that needs a
35
+ commit.
36
+
37
+ If you use coding agents such as Claude Code or Codex in a Git repository, SAKO
38
+ helps you keep track of who is working on what, what has been checked, and what a
39
+ later session needs to pick up. You can use it with one agent or several sessions
40
+ working in the same repository.
41
+
42
+ SAKO fits alongside your planner, coding agent, and tests. Its focus is the link
43
+ between a task and the evidence that it is finished: the gate reads Git and the
44
+ latest check result, then points out gaps when a session stops. You choose the
45
+ work and decide whether the result meets your needs. The records are plain
46
+ Markdown, and the runtime is one Python file with no service or account to set up.
47
+
48
+ SAKO stands for Simple Agentic Kit for Operations, pronounced "sah-ko".
49
+
50
+ **Alpha:** commands and file formats can change in any 0.x release.
51
+
52
+ ## Quickstart
53
+
54
+ You need Python 3.10 or newer, Git 2.31 or newer,
55
+ [uv](https://docs.astral.sh/uv/getting-started/installation/), and a coding agent
56
+ that can run commands. SAKO runs on Linux, WSL, macOS, and Windows.
57
+
58
+ On Windows, use `python` wherever these instructions say `python3`. Check that
59
+ `python --version` reports 3.10 or newer in Git Bash, where Claude Code runs
60
+ SAKO's hooks
61
+ ([platform notes](https://github.com/Thakay/sako/blob/main/docs/limits.md#environment)).
62
+
63
+ From your project's Git repository, install SAKO:
64
+
65
+ ```sh
66
+ uvx sako init
67
+ ```
68
+
69
+ In a project containing `CLAUDE.md`, the installer sets up Claude Code's hooks and
70
+ prints:
71
+
72
+ ```text
73
+ SAKO installed in .sako/ (local). Nothing tracked changed; the folder is listed in .git/info/exclude.
74
+ Records: .sako/work/TASKS.md and DONE.md. They are not in Git yet; git clean -x deletes them.
75
+ Keep their history, or share them privately: uvx sako init --repo [url]
76
+ Commit them with the code: uvx sako init --shared
77
+ Hooks written: Claude Code (.claude/settings.local.json), chosen from CLAUDE.md. Start a session to begin. Change the client with: uvx sako init --client claude|codex|none.
78
+ ```
79
+
80
+ Next, set your project's check command in `.sako/config.json`. For example, a
81
+ Python project using unittest would set
82
+ `"verify_command": ["python3", "-B", "-m", "unittest"]`. Use the command that checks
83
+ your own project; `-B` in this example prevents Python from creating cache files
84
+ during the check.
85
+
86
+ Start a session in your coding client and ask for a change as usual. The start
87
+ context gives your agent the instructions for recording and checking the work.
88
+ SAKO sets up hooks for Claude Code and Codex when it detects them. Without hooks,
89
+ the agent runs `start`, `check --gate`, and `end` itself. See
90
+ [client compatibility](https://github.com/Thakay/sako/blob/main/docs/compatibility.md)
91
+ for setup details.
92
+
93
+ [What `init` changes](https://github.com/Thakay/sako/blob/main/docs/update-and-remove.md#what-init-changes)
94
+ lists every file the installer writes. To uninstall while keeping your task
95
+ records, run `python3 .sako/sako.py remove`.
96
+
97
+ ## Done means
98
+
99
+ When a session stops, its hook checks that session's changes against three rules.
100
+ The agent can also run the gate with `check --gate`:
101
+
102
+ - **Recorded:** every changed file belongs to a task the session claimed or closed.
103
+ - **Proven:** a task closed after checked content changed has a passing check for
104
+ that content. A missing or failed check never counts as a pass.
105
+ - **Committed:** finished work is committed. If you keep the task records in Git,
106
+ they are committed too.
107
+
108
+ Each finding explains how to fix the problem. You can pause unfinished work while
109
+ keeping its task claimed.
110
+
111
+ Every closed task gets a **receipt** in `.sako/work/DONE.md`, recording its
112
+ completion condition, evidence, closing session, date, and check result. If no
113
+ automated check is configured, the receipt says so.
114
+
115
+ You still review and accept the result. A passing gate confirms that SAKO's rules
116
+ were met; the [method](https://github.com/Thakay/sako/blob/main/SAKO.md#done-means)
117
+ explains what they cover.
118
+
119
+ ## See a complete task
120
+
121
+ [The demo](https://github.com/Thakay/sako/blob/main/docs/demo.md) follows a task
122
+ from an unclaimed change through a failed check, a fix, a receipt, and a commit.
123
+ A fresh session then picks up the next task from the records. It is a scripted
124
+ run with real command output, kept in sync by a test.
125
+
126
+ ## SAKO is and is not
127
+
128
+ SAKO handles task ownership and checks the evidence behind finished work. Here
129
+ is how it fits with the rest of your tools:
130
+
131
+ | SAKO provides | Where other tools fit |
132
+ |---|---|
133
+ | Task records in Markdown, linked to the source of the work | Your planner or spec process; SAKO includes a small default planner |
134
+ | A finish gate connecting changed files, check results, and commits | Your tests and CI to check whether the code works |
135
+ | Claims and scope checks for sessions in one repository and its worktrees | A scheduler if you want agents launched or assigned automatically |
136
+ | Local records you can keep private or commit | A tracker for team sync or work across clones and machines |
137
+
138
+ SAKO uses only Python's standard library and sends no telemetry. The gate prompts
139
+ agents to fix gaps; it is not a security boundary. It blocks a stop once, and a
140
+ repeated stop or a hook's own error lets the session end.
141
+
142
+ ## Where your records live
143
+
144
+ Your task records live in `.sako/`. The **footprint** determines how you keep and
145
+ share them:
146
+
147
+ | Footprint | Command | What you get |
148
+ |---|---|---|
149
+ | Local, the default | `init` | Records stay outside Git. Useful for trying SAKO or working on one machine |
150
+ | Repo | `init --repo [url]` | Records have their own Git history inside `.sako/`, with an optional remote for private sharing |
151
+ | Shared | `init --shared` | Records live with your code, with a separate copy on each branch. The installer prints the commit command |
152
+
153
+ Switching footprints preserves the records byte for byte.
154
+
155
+ ## As your project grows
156
+
157
+ Start with one agent, one task, and the default planner. You can add more when
158
+ your work calls for it:
159
+
160
+ - **Bring an existing plan.** Use
161
+ [task intake](https://github.com/Thakay/sako/blob/main/docs/intake-recipes.md)
162
+ to turn your plan into tasks with priorities and references to their source.
163
+ - **Work in parallel.** Claims and scope checks help coordinate sessions in the
164
+ same repository, including linked worktrees.
165
+ - **Work across clones or machines.**
166
+ [Move task authority to a tracker](https://github.com/Thakay/sako/blob/main/docs/move-to-a-tracker.md).
167
+ Add a scheduler if you also need agents started and assigned for you.
168
+
169
+ ## Why it stays small
170
+
171
+ 1. **Keep evidence visible.** The gate reads Git and check results. A passing
172
+ check, a commit, and your acceptance each mean something different. You decide
173
+ whether the checks cover what the task needs to prove.
174
+ 2. **Give each fact one home.** Your planner holds intent, the ledger holds
175
+ ownership and evidence, and Git holds the changes. Source references connect
176
+ them without copying the plan. Plain Markdown keeps the records readable by
177
+ people, agents, and other tools.
178
+ 3. **Keep everyday use simple.** Install with one command and a short read. Bring
179
+ your own planner, agent, and checks; the agent runs the commands while you
180
+ guide the work and review the result.
181
+ 4. **Make adoption reversible.** The default install leaves tracked files alone.
182
+ Add history and sharing when you need them. Removal and migration instructions
183
+ help you keep your records when you move on.
184
+
185
+ ## Learn more
186
+
187
+ - [SAKO.md](https://github.com/Thakay/sako/blob/main/SAKO.md): the method your agent follows
188
+ - [Compatibility](https://github.com/Thakay/sako/blob/main/docs/compatibility.md): client setup and tested behavior
189
+ - [Limits](https://github.com/Thakay/sako/blob/main/docs/limits.md): supported environments and boundaries
190
+ - [Update and removal](https://github.com/Thakay/sako/blob/main/docs/update-and-remove.md): installation details, updates, and removal
191
+ - [Validation](https://github.com/Thakay/sako/blob/main/docs/validation.md): guarantees and their evidence
192
+ - [Glossary](https://github.com/Thakay/sako/blob/main/docs/glossary.md): terms used in the docs
193
+
194
+ ## Contributing, security and license
195
+
196
+ Bug reports, client test results, and improvements are welcome. See
197
+ [CONTRIBUTING.md](https://github.com/Thakay/sako/blob/main/CONTRIBUTING.md) to get
198
+ started, and [SECURITY.md](https://github.com/Thakay/sako/blob/main/SECURITY.md) to
199
+ report a vulnerability. SAKO is released under the
200
+ [MIT license](https://github.com/Thakay/sako/blob/main/LICENSE).
sako-0.5.0/README.md ADDED
@@ -0,0 +1,171 @@
1
+ # SAKO
2
+
3
+ SAKO helps you track coding-agent tasks and review the evidence behind finished
4
+ work. It keeps tasks in a Markdown **ledger** and uses a **finish gate** to flag
5
+ unrecorded changes, missing or stale check results, and finished work that needs a
6
+ commit.
7
+
8
+ If you use coding agents such as Claude Code or Codex in a Git repository, SAKO
9
+ helps you keep track of who is working on what, what has been checked, and what a
10
+ later session needs to pick up. You can use it with one agent or several sessions
11
+ working in the same repository.
12
+
13
+ SAKO fits alongside your planner, coding agent, and tests. Its focus is the link
14
+ between a task and the evidence that it is finished: the gate reads Git and the
15
+ latest check result, then points out gaps when a session stops. You choose the
16
+ work and decide whether the result meets your needs. The records are plain
17
+ Markdown, and the runtime is one Python file with no service or account to set up.
18
+
19
+ SAKO stands for Simple Agentic Kit for Operations, pronounced "sah-ko".
20
+
21
+ **Alpha:** commands and file formats can change in any 0.x release.
22
+
23
+ ## Quickstart
24
+
25
+ You need Python 3.10 or newer, Git 2.31 or newer,
26
+ [uv](https://docs.astral.sh/uv/getting-started/installation/), and a coding agent
27
+ that can run commands. SAKO runs on Linux, WSL, macOS, and Windows.
28
+
29
+ On Windows, use `python` wherever these instructions say `python3`. Check that
30
+ `python --version` reports 3.10 or newer in Git Bash, where Claude Code runs
31
+ SAKO's hooks
32
+ ([platform notes](https://github.com/Thakay/sako/blob/main/docs/limits.md#environment)).
33
+
34
+ From your project's Git repository, install SAKO:
35
+
36
+ ```sh
37
+ uvx sako init
38
+ ```
39
+
40
+ In a project containing `CLAUDE.md`, the installer sets up Claude Code's hooks and
41
+ prints:
42
+
43
+ ```text
44
+ SAKO installed in .sako/ (local). Nothing tracked changed; the folder is listed in .git/info/exclude.
45
+ Records: .sako/work/TASKS.md and DONE.md. They are not in Git yet; git clean -x deletes them.
46
+ Keep their history, or share them privately: uvx sako init --repo [url]
47
+ Commit them with the code: uvx sako init --shared
48
+ Hooks written: Claude Code (.claude/settings.local.json), chosen from CLAUDE.md. Start a session to begin. Change the client with: uvx sako init --client claude|codex|none.
49
+ ```
50
+
51
+ Next, set your project's check command in `.sako/config.json`. For example, a
52
+ Python project using unittest would set
53
+ `"verify_command": ["python3", "-B", "-m", "unittest"]`. Use the command that checks
54
+ your own project; `-B` in this example prevents Python from creating cache files
55
+ during the check.
56
+
57
+ Start a session in your coding client and ask for a change as usual. The start
58
+ context gives your agent the instructions for recording and checking the work.
59
+ SAKO sets up hooks for Claude Code and Codex when it detects them. Without hooks,
60
+ the agent runs `start`, `check --gate`, and `end` itself. See
61
+ [client compatibility](https://github.com/Thakay/sako/blob/main/docs/compatibility.md)
62
+ for setup details.
63
+
64
+ [What `init` changes](https://github.com/Thakay/sako/blob/main/docs/update-and-remove.md#what-init-changes)
65
+ lists every file the installer writes. To uninstall while keeping your task
66
+ records, run `python3 .sako/sako.py remove`.
67
+
68
+ ## Done means
69
+
70
+ When a session stops, its hook checks that session's changes against three rules.
71
+ The agent can also run the gate with `check --gate`:
72
+
73
+ - **Recorded:** every changed file belongs to a task the session claimed or closed.
74
+ - **Proven:** a task closed after checked content changed has a passing check for
75
+ that content. A missing or failed check never counts as a pass.
76
+ - **Committed:** finished work is committed. If you keep the task records in Git,
77
+ they are committed too.
78
+
79
+ Each finding explains how to fix the problem. You can pause unfinished work while
80
+ keeping its task claimed.
81
+
82
+ Every closed task gets a **receipt** in `.sako/work/DONE.md`, recording its
83
+ completion condition, evidence, closing session, date, and check result. If no
84
+ automated check is configured, the receipt says so.
85
+
86
+ You still review and accept the result. A passing gate confirms that SAKO's rules
87
+ were met; the [method](https://github.com/Thakay/sako/blob/main/SAKO.md#done-means)
88
+ explains what they cover.
89
+
90
+ ## See a complete task
91
+
92
+ [The demo](https://github.com/Thakay/sako/blob/main/docs/demo.md) follows a task
93
+ from an unclaimed change through a failed check, a fix, a receipt, and a commit.
94
+ A fresh session then picks up the next task from the records. It is a scripted
95
+ run with real command output, kept in sync by a test.
96
+
97
+ ## SAKO is and is not
98
+
99
+ SAKO handles task ownership and checks the evidence behind finished work. Here
100
+ is how it fits with the rest of your tools:
101
+
102
+ | SAKO provides | Where other tools fit |
103
+ |---|---|
104
+ | Task records in Markdown, linked to the source of the work | Your planner or spec process; SAKO includes a small default planner |
105
+ | A finish gate connecting changed files, check results, and commits | Your tests and CI to check whether the code works |
106
+ | Claims and scope checks for sessions in one repository and its worktrees | A scheduler if you want agents launched or assigned automatically |
107
+ | Local records you can keep private or commit | A tracker for team sync or work across clones and machines |
108
+
109
+ SAKO uses only Python's standard library and sends no telemetry. The gate prompts
110
+ agents to fix gaps; it is not a security boundary. It blocks a stop once, and a
111
+ repeated stop or a hook's own error lets the session end.
112
+
113
+ ## Where your records live
114
+
115
+ Your task records live in `.sako/`. The **footprint** determines how you keep and
116
+ share them:
117
+
118
+ | Footprint | Command | What you get |
119
+ |---|---|---|
120
+ | Local, the default | `init` | Records stay outside Git. Useful for trying SAKO or working on one machine |
121
+ | Repo | `init --repo [url]` | Records have their own Git history inside `.sako/`, with an optional remote for private sharing |
122
+ | Shared | `init --shared` | Records live with your code, with a separate copy on each branch. The installer prints the commit command |
123
+
124
+ Switching footprints preserves the records byte for byte.
125
+
126
+ ## As your project grows
127
+
128
+ Start with one agent, one task, and the default planner. You can add more when
129
+ your work calls for it:
130
+
131
+ - **Bring an existing plan.** Use
132
+ [task intake](https://github.com/Thakay/sako/blob/main/docs/intake-recipes.md)
133
+ to turn your plan into tasks with priorities and references to their source.
134
+ - **Work in parallel.** Claims and scope checks help coordinate sessions in the
135
+ same repository, including linked worktrees.
136
+ - **Work across clones or machines.**
137
+ [Move task authority to a tracker](https://github.com/Thakay/sako/blob/main/docs/move-to-a-tracker.md).
138
+ Add a scheduler if you also need agents started and assigned for you.
139
+
140
+ ## Why it stays small
141
+
142
+ 1. **Keep evidence visible.** The gate reads Git and check results. A passing
143
+ check, a commit, and your acceptance each mean something different. You decide
144
+ whether the checks cover what the task needs to prove.
145
+ 2. **Give each fact one home.** Your planner holds intent, the ledger holds
146
+ ownership and evidence, and Git holds the changes. Source references connect
147
+ them without copying the plan. Plain Markdown keeps the records readable by
148
+ people, agents, and other tools.
149
+ 3. **Keep everyday use simple.** Install with one command and a short read. Bring
150
+ your own planner, agent, and checks; the agent runs the commands while you
151
+ guide the work and review the result.
152
+ 4. **Make adoption reversible.** The default install leaves tracked files alone.
153
+ Add history and sharing when you need them. Removal and migration instructions
154
+ help you keep your records when you move on.
155
+
156
+ ## Learn more
157
+
158
+ - [SAKO.md](https://github.com/Thakay/sako/blob/main/SAKO.md): the method your agent follows
159
+ - [Compatibility](https://github.com/Thakay/sako/blob/main/docs/compatibility.md): client setup and tested behavior
160
+ - [Limits](https://github.com/Thakay/sako/blob/main/docs/limits.md): supported environments and boundaries
161
+ - [Update and removal](https://github.com/Thakay/sako/blob/main/docs/update-and-remove.md): installation details, updates, and removal
162
+ - [Validation](https://github.com/Thakay/sako/blob/main/docs/validation.md): guarantees and their evidence
163
+ - [Glossary](https://github.com/Thakay/sako/blob/main/docs/glossary.md): terms used in the docs
164
+
165
+ ## Contributing, security and license
166
+
167
+ Bug reports, client test results, and improvements are welcome. See
168
+ [CONTRIBUTING.md](https://github.com/Thakay/sako/blob/main/CONTRIBUTING.md) to get
169
+ started, and [SECURITY.md](https://github.com/Thakay/sako/blob/main/SECURITY.md) to
170
+ report a vulnerability. SAKO is released under the
171
+ [MIT license](https://github.com/Thakay/sako/blob/main/LICENSE).