fbtodo 4.30.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.
- fbtodo-4.30.0/LICENSE +21 -0
- fbtodo-4.30.0/PKG-INFO +285 -0
- fbtodo-4.30.0/README.md +255 -0
- fbtodo-4.30.0/pyproject.toml +49 -0
- fbtodo-4.30.0/setup.cfg +4 -0
- fbtodo-4.30.0/src/fbtodo/__init__.py +2271 -0
- fbtodo-4.30.0/src/fbtodo/alerts.py +331 -0
- fbtodo-4.30.0/src/fbtodo/base.py +1493 -0
- fbtodo-4.30.0/src/fbtodo/desktop.py +275 -0
- fbtodo-4.30.0/src/fbtodo/locks.py +191 -0
- fbtodo-4.30.0/src/fbtodo/nas.py +418 -0
- fbtodo-4.30.0/src/fbtodo/panes.py +1600 -0
- fbtodo-4.30.0/src/fbtodo/render.py +1663 -0
- fbtodo-4.30.0/src/fbtodo/scan.py +691 -0
- fbtodo-4.30.0/src/fbtodo/sources.py +372 -0
- fbtodo-4.30.0/src/fbtodo/tasks.py +1834 -0
- fbtodo-4.30.0/src/fbtodo.egg-info/PKG-INFO +285 -0
- fbtodo-4.30.0/src/fbtodo.egg-info/SOURCES.txt +19 -0
- fbtodo-4.30.0/src/fbtodo.egg-info/dependency_links.txt +1 -0
- fbtodo-4.30.0/src/fbtodo.egg-info/entry_points.txt +2 -0
- fbtodo-4.30.0/src/fbtodo.egg-info/top_level.txt +1 -0
fbtodo-4.30.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 fbtodo contributors
|
|
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.
|
fbtodo-4.30.0/PKG-INFO
ADDED
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fbtodo
|
|
3
|
+
Version: 4.30.0
|
|
4
|
+
Summary: Watch your coding agent work — its checklist, live, in a pane beside it.
|
|
5
|
+
Author: TLE47
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/TLE47/fbtodo
|
|
8
|
+
Project-URL: Repository, https://github.com/TLE47/fbtodo
|
|
9
|
+
Project-URL: Issues, https://github.com/TLE47/fbtodo/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/TLE47/fbtodo/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: todos,agent,tmux,pane,cli
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: MacOS
|
|
16
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Topic :: Terminals
|
|
25
|
+
Classifier: Topic :: System :: Monitoring
|
|
26
|
+
Requires-Python: >=3.9
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Dynamic: license-file
|
|
30
|
+
|
|
31
|
+
# fbtodo
|
|
32
|
+
|
|
33
|
+
**Watch your coding agent work — its checklist, live, in a pane beside it.**
|
|
34
|
+
|
|
35
|
+
[](https://github.com/TLE47/fbtodo/actions/workflows/ci.yml)
|
|
36
|
+
[](https://www.python.org)
|
|
37
|
+
[](#installation)
|
|
38
|
+
[](#installation)
|
|
39
|
+
[](LICENSE)
|
|
40
|
+
|
|
41
|
+
fbtodo displays your [Freebuff](https://freebuff.com) agent's task list in a side pane while it works. It shows:
|
|
42
|
+
- **What's done, running, and next** — with live timers
|
|
43
|
+
- **How much time is left** — estimates based on your project history
|
|
44
|
+
- **If it's stuck or waiting** — with optional alerts to your phone
|
|
45
|
+
|
|
46
|
+
No configuration: it reads the list your agent already keeps. Freebuff's list turns up on its own;
|
|
47
|
+
anything else can push one over stdin — see [docs/SOURCES.md](docs/SOURCES.md).
|
|
48
|
+
|
|
49
|
+
**[Installation](#installation)** · **[Commands](#commands)** · **[FAQ](#faq)** · [Install guide](docs/INSTALL.md) · [Settings](docs/SETTINGS.md) · [Deep docs](docs/INTERNALS.md)
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## See it work
|
|
54
|
+
|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
The clip above shows - `fbtodo pane` in real time. It monitors a scripted session through eight steps, updating continuously until all tasks are marked complete *and* the session ends—the exact trigger required for the notification bell.
|
|
58
|
+
|
|
59
|
+
### Side-by-Side View
|
|
60
|
+
To see how the pane mirrors the active session, here is the side-by-side pairing: the scripted session on the left, and the fbtodo pane tracking it on the right:
|
|
61
|
+
|
|
62
|
+

|
|
63
|
+
|
|
64
|
+
>**Note**: The recording script exports animations as lossless WebP files rather than standard video formats. This ensures crisp, pixel-perfect inline rendering directly within GitHub Markdown.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Installation
|
|
69
|
+
|
|
70
|
+
**One line** — takes the first method your machine already has (Homebrew, `uv`,
|
|
71
|
+
`pipx`, a plain venv, or a clone), and never runs as root:
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
curl -fsSL https://raw.githubusercontent.com/TLE47/fbtodo/main/install.sh | sh
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Homebrew**
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
brew install TLE47/tap/fbtodo # brew taps it for you
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**uv / pipx** — an isolated venv, nothing to manage on your `PATH`:
|
|
84
|
+
|
|
85
|
+
```sh
|
|
86
|
+
uvx fbtodo # run it once, install nothing
|
|
87
|
+
uv tool install fbtodo # ...or keep it
|
|
88
|
+
pipx install fbtodo
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**From the checkout** — no install at all:
|
|
92
|
+
|
|
93
|
+
```sh
|
|
94
|
+
brew install tmux # or: apt install tmux
|
|
95
|
+
git clone https://github.com/TLE47/fbtodo ~/Projects/fbtodo
|
|
96
|
+
mkdir -p ~/.local/bin && ln -sf ~/Projects/fbtodo/fbtodo ~/.local/bin/fbtodo
|
|
97
|
+
tmux new -s work
|
|
98
|
+
fbtodo # opens the pane automatically
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Requirements: **Python 3.9+** and **tmux**. If the pane does not appear, run
|
|
102
|
+
`fbtodo doctor` — it names what is missing. Every route, with pinned versions and
|
|
103
|
+
how to uninstall, is in [docs/INSTALL.md](docs/INSTALL.md).
|
|
104
|
+
|
|
105
|
+
### Using the `fb` shortcut (optional)
|
|
106
|
+
|
|
107
|
+
For a one-word launcher that updates and manages everything:
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
. ~/Projects/fbtodo/examples/fb.sh # add this line to ~/.zshrc or ~/.bashrc
|
|
111
|
+
fb # now use 'fb' instead of 'fbtodo'
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
One lazy command:
|
|
115
|
+
```sh
|
|
116
|
+
echo '. ~/Projects/fbtodo/examples/fb.sh' >> ~/.bashrc && source ~/.bashrc && fb
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Updating and pinning
|
|
120
|
+
|
|
121
|
+
Each installer updates itself — `brew upgrade fbtodo`, `uv tool upgrade fbtodo`,
|
|
122
|
+
`pipx upgrade fbtodo`. To pin a release, name it; the tag is the version:
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
uv tool install fbtodo==4.30.0
|
|
126
|
+
pipx install fbtodo==4.30.0
|
|
127
|
+
pipx install "git+https://github.com/TLE47/fbtodo@4.30.0" # from the tag
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
> No Python dependencies are required, though displaying the pane still needs tmux.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## How it works
|
|
135
|
+
|
|
136
|
+
Your agent writes a todo list (by calling `write_todos`). fbtodo watches that list and displays it in a side pane. The pane updates in real time as the agent works through tasks.
|
|
137
|
+
|
|
138
|
+
**No configuration needed** — fbtodo reads the list your agent already creates. Just make sure your agent is keeping one. You can ask it once per session: *"Plan this as a todo list and check off items as you go."*
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Commands
|
|
143
|
+
|
|
144
|
+
```sh
|
|
145
|
+
fbtodo # watch the pane (default)
|
|
146
|
+
fbtodo bar # show "todos 3/5" in your status bar
|
|
147
|
+
fbtodo snap # print one snapshot
|
|
148
|
+
fbtodo status # show pane info and why it might be empty
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Other commands:** `ledger` (forecast vs. actual), `why` (pane location), `pin` (resize pane), `stop` (close watcher), `prune` (clean up old data).
|
|
152
|
+
|
|
153
|
+
Run `fbtodo -h` for all flags.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Customization
|
|
158
|
+
|
|
159
|
+
### Colors
|
|
160
|
+
|
|
161
|
+
Create `~/.config/fbtodo/theme.json`:
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"accent": "#89b4fa",
|
|
166
|
+
"active": "#cdd6f4",
|
|
167
|
+
"success": "#a6e3a1"
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Or use environment variables:
|
|
172
|
+
|
|
173
|
+
```sh
|
|
174
|
+
export FBTODO_ACCENT="#89b4fa"
|
|
175
|
+
export FBTODO_SUCCESS="#a6e3a1"
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Three presets are included in `examples/` (Catppuccin, Gruvbox, Nord).
|
|
179
|
+
|
|
180
|
+
### Pane size and position
|
|
181
|
+
|
|
182
|
+
```sh
|
|
183
|
+
fbtodo pin --size 24 --side h # 24 columns wide, beside the session
|
|
184
|
+
fbtodo pin --size 12 --side v # 12 lines tall, below the session
|
|
185
|
+
fbtodo pin --list # show current settings
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
`--size` is counted along the split: **columns** for `--side h` (the pane sits beside the
|
|
189
|
+
session) and **lines** for `--side v` (below it). The pane remembers your last size and opens
|
|
190
|
+
that way next time. Default: 12 lines below.
|
|
191
|
+
|
|
192
|
+
### Disable the pane
|
|
193
|
+
|
|
194
|
+
If you only want the status bar:
|
|
195
|
+
|
|
196
|
+
```sh
|
|
197
|
+
export FBTODO_NO_PANE=1
|
|
198
|
+
fbtodo bar # just show "todos 3/5"
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Alerts (optional)
|
|
204
|
+
|
|
205
|
+
Get notifications when your agent finishes, gets stuck, or asks for input:
|
|
206
|
+
|
|
207
|
+
```sh
|
|
208
|
+
# Install the notification kit
|
|
209
|
+
mkdir -p ~/.config/freebuff-notify
|
|
210
|
+
cp scripts/notify/*.py scripts/notify/*.sh ~/.config/freebuff-notify/
|
|
211
|
+
chmod +x ~/.config/freebuff-notify/*.sh
|
|
212
|
+
~/.config/freebuff-notify/phone.sh --init
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
See [scripts/notify/README.md](scripts/notify/README.md) for details on iMessage and ntfy alerts.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Troubleshooting
|
|
220
|
+
|
|
221
|
+
| Problem | Fix |
|
|
222
|
+
|---|---|
|
|
223
|
+
| **Pane is empty** | Run `fbtodo status` — it'll tell you why. Usually the agent hasn't written a list yet. |
|
|
224
|
+
| **Pane won't appear** | Make sure you're in tmux and `fbtodo` is in your PATH. |
|
|
225
|
+
| **Pane closed** | It'll reopen automatically. If it doesn't, try `fbtodo stop` then run `fbtodo` again. |
|
|
226
|
+
| **Wrong size/position** | Use `fbtodo pin --side h` (beside) or `--side v` (below), with `--size N` in columns or lines respectively. |
|
|
227
|
+
| **List looks old** | Run `fbtodo status` to check how long ago it was written. |
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## FAQ
|
|
232
|
+
|
|
233
|
+
<details open>
|
|
234
|
+
<summary><strong>Do I need Freebuff?</strong></summary>
|
|
235
|
+
|
|
236
|
+
For the built-in stores, yes. But you can use any agent that writes a JSON state file — see [docs/SOURCES.md](docs/SOURCES.md).
|
|
237
|
+
</details>
|
|
238
|
+
|
|
239
|
+
<details>
|
|
240
|
+
<summary><strong>Does this send my data anywhere?</strong></summary>
|
|
241
|
+
|
|
242
|
+
No. fbtodo reads local files only. The only outbound traffic is optional phone notifications (if you install them).
|
|
243
|
+
</details>
|
|
244
|
+
|
|
245
|
+
<details>
|
|
246
|
+
<summary><strong>Will it slow my agent down?</strong></summary>
|
|
247
|
+
|
|
248
|
+
No. It reads files that are being written anyway — the overhead is negligible.
|
|
249
|
+
</details>
|
|
250
|
+
|
|
251
|
+
<details>
|
|
252
|
+
<summary><strong>Can I run multiple sessions?</strong></summary>
|
|
253
|
+
|
|
254
|
+
Yes. Each session gets its own pane, bound to its task list.
|
|
255
|
+
</details>
|
|
256
|
+
|
|
257
|
+
<details>
|
|
258
|
+
<summary><strong>Works on Windows?</strong></summary>
|
|
259
|
+
|
|
260
|
+
WSL only. Windows Terminal + WSL works fine. Native Windows won't work (tmux isn't available).
|
|
261
|
+
</details>
|
|
262
|
+
|
|
263
|
+
<details>
|
|
264
|
+
<summary><strong>I just want a status bar, no pane.</strong></summary>
|
|
265
|
+
|
|
266
|
+
Set `FBTODO_NO_PANE=1` and use `fbtodo bar`. It prints `todos 3/5` and updates every few seconds.
|
|
267
|
+
</details>
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## For developers
|
|
272
|
+
|
|
273
|
+
Run the test suite:
|
|
274
|
+
|
|
275
|
+
```sh
|
|
276
|
+
python3 scripts/fbtodo-selfcheck.py # full suite (~90-160 seconds)
|
|
277
|
+
python3 scripts/fbtodo-selfcheck.py --only local-session # one test
|
|
278
|
+
bash scripts/notify/test-freebuff-notify.sh # notification tests
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## License
|
|
284
|
+
|
|
285
|
+
MIT — see [LICENSE](LICENSE).
|
fbtodo-4.30.0/README.md
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# fbtodo
|
|
2
|
+
|
|
3
|
+
**Watch your coding agent work — its checklist, live, in a pane beside it.**
|
|
4
|
+
|
|
5
|
+
[](https://github.com/TLE47/fbtodo/actions/workflows/ci.yml)
|
|
6
|
+
[](https://www.python.org)
|
|
7
|
+
[](#installation)
|
|
8
|
+
[](#installation)
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
|
|
11
|
+
fbtodo displays your [Freebuff](https://freebuff.com) agent's task list in a side pane while it works. It shows:
|
|
12
|
+
- **What's done, running, and next** — with live timers
|
|
13
|
+
- **How much time is left** — estimates based on your project history
|
|
14
|
+
- **If it's stuck or waiting** — with optional alerts to your phone
|
|
15
|
+
|
|
16
|
+
No configuration: it reads the list your agent already keeps. Freebuff's list turns up on its own;
|
|
17
|
+
anything else can push one over stdin — see [docs/SOURCES.md](docs/SOURCES.md).
|
|
18
|
+
|
|
19
|
+
**[Installation](#installation)** · **[Commands](#commands)** · **[FAQ](#faq)** · [Install guide](docs/INSTALL.md) · [Settings](docs/SETTINGS.md) · [Deep docs](docs/INTERNALS.md)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## See it work
|
|
24
|
+
|
|
25
|
+

|
|
26
|
+
|
|
27
|
+
The clip above shows - `fbtodo pane` in real time. It monitors a scripted session through eight steps, updating continuously until all tasks are marked complete *and* the session ends—the exact trigger required for the notification bell.
|
|
28
|
+
|
|
29
|
+
### Side-by-Side View
|
|
30
|
+
To see how the pane mirrors the active session, here is the side-by-side pairing: the scripted session on the left, and the fbtodo pane tracking it on the right:
|
|
31
|
+
|
|
32
|
+

|
|
33
|
+
|
|
34
|
+
>**Note**: The recording script exports animations as lossless WebP files rather than standard video formats. This ensures crisp, pixel-perfect inline rendering directly within GitHub Markdown.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Installation
|
|
39
|
+
|
|
40
|
+
**One line** — takes the first method your machine already has (Homebrew, `uv`,
|
|
41
|
+
`pipx`, a plain venv, or a clone), and never runs as root:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
curl -fsSL https://raw.githubusercontent.com/TLE47/fbtodo/main/install.sh | sh
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Homebrew**
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
brew install TLE47/tap/fbtodo # brew taps it for you
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**uv / pipx** — an isolated venv, nothing to manage on your `PATH`:
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
uvx fbtodo # run it once, install nothing
|
|
57
|
+
uv tool install fbtodo # ...or keep it
|
|
58
|
+
pipx install fbtodo
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**From the checkout** — no install at all:
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
brew install tmux # or: apt install tmux
|
|
65
|
+
git clone https://github.com/TLE47/fbtodo ~/Projects/fbtodo
|
|
66
|
+
mkdir -p ~/.local/bin && ln -sf ~/Projects/fbtodo/fbtodo ~/.local/bin/fbtodo
|
|
67
|
+
tmux new -s work
|
|
68
|
+
fbtodo # opens the pane automatically
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Requirements: **Python 3.9+** and **tmux**. If the pane does not appear, run
|
|
72
|
+
`fbtodo doctor` — it names what is missing. Every route, with pinned versions and
|
|
73
|
+
how to uninstall, is in [docs/INSTALL.md](docs/INSTALL.md).
|
|
74
|
+
|
|
75
|
+
### Using the `fb` shortcut (optional)
|
|
76
|
+
|
|
77
|
+
For a one-word launcher that updates and manages everything:
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
. ~/Projects/fbtodo/examples/fb.sh # add this line to ~/.zshrc or ~/.bashrc
|
|
81
|
+
fb # now use 'fb' instead of 'fbtodo'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
One lazy command:
|
|
85
|
+
```sh
|
|
86
|
+
echo '. ~/Projects/fbtodo/examples/fb.sh' >> ~/.bashrc && source ~/.bashrc && fb
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Updating and pinning
|
|
90
|
+
|
|
91
|
+
Each installer updates itself — `brew upgrade fbtodo`, `uv tool upgrade fbtodo`,
|
|
92
|
+
`pipx upgrade fbtodo`. To pin a release, name it; the tag is the version:
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
uv tool install fbtodo==4.30.0
|
|
96
|
+
pipx install fbtodo==4.30.0
|
|
97
|
+
pipx install "git+https://github.com/TLE47/fbtodo@4.30.0" # from the tag
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
> No Python dependencies are required, though displaying the pane still needs tmux.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## How it works
|
|
105
|
+
|
|
106
|
+
Your agent writes a todo list (by calling `write_todos`). fbtodo watches that list and displays it in a side pane. The pane updates in real time as the agent works through tasks.
|
|
107
|
+
|
|
108
|
+
**No configuration needed** — fbtodo reads the list your agent already creates. Just make sure your agent is keeping one. You can ask it once per session: *"Plan this as a todo list and check off items as you go."*
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Commands
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
fbtodo # watch the pane (default)
|
|
116
|
+
fbtodo bar # show "todos 3/5" in your status bar
|
|
117
|
+
fbtodo snap # print one snapshot
|
|
118
|
+
fbtodo status # show pane info and why it might be empty
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Other commands:** `ledger` (forecast vs. actual), `why` (pane location), `pin` (resize pane), `stop` (close watcher), `prune` (clean up old data).
|
|
122
|
+
|
|
123
|
+
Run `fbtodo -h` for all flags.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Customization
|
|
128
|
+
|
|
129
|
+
### Colors
|
|
130
|
+
|
|
131
|
+
Create `~/.config/fbtodo/theme.json`:
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"accent": "#89b4fa",
|
|
136
|
+
"active": "#cdd6f4",
|
|
137
|
+
"success": "#a6e3a1"
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Or use environment variables:
|
|
142
|
+
|
|
143
|
+
```sh
|
|
144
|
+
export FBTODO_ACCENT="#89b4fa"
|
|
145
|
+
export FBTODO_SUCCESS="#a6e3a1"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Three presets are included in `examples/` (Catppuccin, Gruvbox, Nord).
|
|
149
|
+
|
|
150
|
+
### Pane size and position
|
|
151
|
+
|
|
152
|
+
```sh
|
|
153
|
+
fbtodo pin --size 24 --side h # 24 columns wide, beside the session
|
|
154
|
+
fbtodo pin --size 12 --side v # 12 lines tall, below the session
|
|
155
|
+
fbtodo pin --list # show current settings
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
`--size` is counted along the split: **columns** for `--side h` (the pane sits beside the
|
|
159
|
+
session) and **lines** for `--side v` (below it). The pane remembers your last size and opens
|
|
160
|
+
that way next time. Default: 12 lines below.
|
|
161
|
+
|
|
162
|
+
### Disable the pane
|
|
163
|
+
|
|
164
|
+
If you only want the status bar:
|
|
165
|
+
|
|
166
|
+
```sh
|
|
167
|
+
export FBTODO_NO_PANE=1
|
|
168
|
+
fbtodo bar # just show "todos 3/5"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Alerts (optional)
|
|
174
|
+
|
|
175
|
+
Get notifications when your agent finishes, gets stuck, or asks for input:
|
|
176
|
+
|
|
177
|
+
```sh
|
|
178
|
+
# Install the notification kit
|
|
179
|
+
mkdir -p ~/.config/freebuff-notify
|
|
180
|
+
cp scripts/notify/*.py scripts/notify/*.sh ~/.config/freebuff-notify/
|
|
181
|
+
chmod +x ~/.config/freebuff-notify/*.sh
|
|
182
|
+
~/.config/freebuff-notify/phone.sh --init
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
See [scripts/notify/README.md](scripts/notify/README.md) for details on iMessage and ntfy alerts.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Troubleshooting
|
|
190
|
+
|
|
191
|
+
| Problem | Fix |
|
|
192
|
+
|---|---|
|
|
193
|
+
| **Pane is empty** | Run `fbtodo status` — it'll tell you why. Usually the agent hasn't written a list yet. |
|
|
194
|
+
| **Pane won't appear** | Make sure you're in tmux and `fbtodo` is in your PATH. |
|
|
195
|
+
| **Pane closed** | It'll reopen automatically. If it doesn't, try `fbtodo stop` then run `fbtodo` again. |
|
|
196
|
+
| **Wrong size/position** | Use `fbtodo pin --side h` (beside) or `--side v` (below), with `--size N` in columns or lines respectively. |
|
|
197
|
+
| **List looks old** | Run `fbtodo status` to check how long ago it was written. |
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## FAQ
|
|
202
|
+
|
|
203
|
+
<details open>
|
|
204
|
+
<summary><strong>Do I need Freebuff?</strong></summary>
|
|
205
|
+
|
|
206
|
+
For the built-in stores, yes. But you can use any agent that writes a JSON state file — see [docs/SOURCES.md](docs/SOURCES.md).
|
|
207
|
+
</details>
|
|
208
|
+
|
|
209
|
+
<details>
|
|
210
|
+
<summary><strong>Does this send my data anywhere?</strong></summary>
|
|
211
|
+
|
|
212
|
+
No. fbtodo reads local files only. The only outbound traffic is optional phone notifications (if you install them).
|
|
213
|
+
</details>
|
|
214
|
+
|
|
215
|
+
<details>
|
|
216
|
+
<summary><strong>Will it slow my agent down?</strong></summary>
|
|
217
|
+
|
|
218
|
+
No. It reads files that are being written anyway — the overhead is negligible.
|
|
219
|
+
</details>
|
|
220
|
+
|
|
221
|
+
<details>
|
|
222
|
+
<summary><strong>Can I run multiple sessions?</strong></summary>
|
|
223
|
+
|
|
224
|
+
Yes. Each session gets its own pane, bound to its task list.
|
|
225
|
+
</details>
|
|
226
|
+
|
|
227
|
+
<details>
|
|
228
|
+
<summary><strong>Works on Windows?</strong></summary>
|
|
229
|
+
|
|
230
|
+
WSL only. Windows Terminal + WSL works fine. Native Windows won't work (tmux isn't available).
|
|
231
|
+
</details>
|
|
232
|
+
|
|
233
|
+
<details>
|
|
234
|
+
<summary><strong>I just want a status bar, no pane.</strong></summary>
|
|
235
|
+
|
|
236
|
+
Set `FBTODO_NO_PANE=1` and use `fbtodo bar`. It prints `todos 3/5` and updates every few seconds.
|
|
237
|
+
</details>
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## For developers
|
|
242
|
+
|
|
243
|
+
Run the test suite:
|
|
244
|
+
|
|
245
|
+
```sh
|
|
246
|
+
python3 scripts/fbtodo-selfcheck.py # full suite (~90-160 seconds)
|
|
247
|
+
python3 scripts/fbtodo-selfcheck.py --only local-session # one test
|
|
248
|
+
bash scripts/notify/test-freebuff-notify.sh # notification tests
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## License
|
|
254
|
+
|
|
255
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "fbtodo"
|
|
7
|
+
description = "Watch your coding agent work — its checklist, live, in a pane beside it."
|
|
8
|
+
readme = "README.md"
|
|
9
|
+
requires-python = ">=3.9"
|
|
10
|
+
license = { text = "MIT" }
|
|
11
|
+
authors = [{ name = "TLE47" }]
|
|
12
|
+
keywords = ["todos", "agent", "tmux", "pane", "cli"]
|
|
13
|
+
classifiers = [
|
|
14
|
+
"Development Status :: 4 - Beta",
|
|
15
|
+
"Environment :: Console",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Operating System :: MacOS",
|
|
18
|
+
"Operating System :: POSIX :: Linux",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
21
|
+
"Programming Language :: Python :: 3.9",
|
|
22
|
+
"Programming Language :: Python :: 3.10",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Programming Language :: Python :: 3.13",
|
|
26
|
+
"Topic :: Terminals",
|
|
27
|
+
"Topic :: System :: Monitoring",
|
|
28
|
+
]
|
|
29
|
+
# The version is the `VERSION` constant in `fbtodo/base.py`, read statically at build time, so
|
|
30
|
+
# there is one source of truth rather than a second number to keep in step.
|
|
31
|
+
dynamic = ["version"]
|
|
32
|
+
|
|
33
|
+
[project.scripts]
|
|
34
|
+
fbtodo = "fbtodo:main"
|
|
35
|
+
|
|
36
|
+
[project.urls]
|
|
37
|
+
Homepage = "https://github.com/TLE47/fbtodo"
|
|
38
|
+
Repository = "https://github.com/TLE47/fbtodo"
|
|
39
|
+
Issues = "https://github.com/TLE47/fbtodo/issues"
|
|
40
|
+
Changelog = "https://github.com/TLE47/fbtodo/blob/main/CHANGELOG.md"
|
|
41
|
+
|
|
42
|
+
[tool.setuptools]
|
|
43
|
+
package-dir = { "" = "src" }
|
|
44
|
+
|
|
45
|
+
[tool.setuptools.dynamic]
|
|
46
|
+
version = { attr = "fbtodo.base.VERSION" }
|
|
47
|
+
|
|
48
|
+
[tool.setuptools.packages.find]
|
|
49
|
+
where = ["src"]
|
fbtodo-4.30.0/setup.cfg
ADDED