+22
README.md
+22
README.md
···
27
./check-files-for-bad-links *.md
28
```
29
30
### `kill-processes`
31
32
AI-powered TUI for killing processes.
···
37
./kill-processes
38
```
39
40
### `update-lights`
41
42
Make some change to my phillips hue network of lights via agent + MCP server.
···
47
./update-lights -m "turn on sahara in the living room and nightlight in the kitchen"
48
```
49
50
### `update-readme`
51
52
Update the README.md file with a list of all the scripts in the current directory.
···
57
./update-readme
58
```
59
···
27
./check-files-for-bad-links *.md
28
```
29
30
+
Details:
31
+
- uses [`httpx`](https://www.python-httpx.org/) to check links
32
+
- uses [`anyio`](https://anyio.readthedocs.io/en/stable/) to run the checks concurrently
33
+
- pass include globs to scan (e.g. `*.md`)
34
+
- pass exclude globs to skip (e.g. `*.md`)
35
+
- pass ignore-url prefixes to ignore (e.g. `http://localhost` or `https://localhost`)
36
+
- pass concurrency to run the checks concurrently (default is 50)
37
+
38
+
39
### `kill-processes`
40
41
AI-powered TUI for killing processes.
···
46
./kill-processes
47
```
48
49
+
Details:
50
+
- uses [`textual`](https://textual.textualize.io/) for the TUI
51
+
- uses [`marvin`](https://github.com/prefecthq/marvin) (built on [`pydantic-ai`](https://github.com/pydantic/pydantic-ai)) to annotate processes
52
+
53
+
54
### `update-lights`
55
56
Make some change to my phillips hue network of lights via agent + MCP server.
···
61
./update-lights -m "turn on sahara in the living room and nightlight in the kitchen"
62
```
63
64
+
Details:
65
+
- uses a [`marvin`](https://github.com/prefecthq/marvin) (built on [`pydantic-ai`](https://github.com/pydantic/pydantic-ai)) agent
66
+
- the agent spins up a [`fastmcp`](https://github.com/jlowin/fastmcp) MCP server that talks to my [`phue`](https://github.com/studioimaginaire/phue) bridge
67
+
- set `HUE_BRIDGE_IP` and `HUE_BRIDGE_USERNAME` in `.env` or otherwise in environment
68
+
- uses `OPENAI_API_KEY` by default, but you can set `AI_MODEL` in `.env` or otherwise in environment to use a different model
69
+
70
+
71
### `update-readme`
72
73
Update the README.md file with a list of all the scripts in the current directory.
···
78
./update-readme
79
```
80
81
+
+8
check-files-for-bad-links
+8
check-files-for-bad-links
···
11
```bash
12
./check-files-for-bad-links *.md
13
```
14
+
15
+
Details:
16
+
- uses [`httpx`](https://www.python-httpx.org/) to check links
17
+
- uses [`anyio`](https://anyio.readthedocs.io/en/stable/) to run the checks concurrently
18
+
- pass include globs to scan (e.g. `*.md`)
19
+
- pass exclude globs to skip (e.g. `*.md`)
20
+
- pass ignore-url prefixes to ignore (e.g. `http://localhost` or `https://localhost`)
21
+
- pass concurrency to run the checks concurrently (default is 50)
22
"""
23
24
import argparse
+4
kill-processes
+4
kill-processes
···
11
```bash
12
./kill-processes
13
```
14
+
15
+
Details:
16
+
- uses [`textual`](https://textual.textualize.io/) for the TUI
17
+
- uses [`marvin`](https://github.com/prefecthq/marvin) (built on [`pydantic-ai`](https://github.com/pydantic/pydantic-ai)) to annotate processes
18
"""
19
20
import os
+6
update-lights
+6
update-lights
···
11
```bash
12
./update-lights -m "turn on sahara in the living room and nightlight in the kitchen"
13
```
14
+
15
+
Details:
16
+
- uses a [`marvin`](https://github.com/prefecthq/marvin) (built on [`pydantic-ai`](https://github.com/pydantic/pydantic-ai)) agent
17
+
- the agent spins up a [`fastmcp`](https://github.com/jlowin/fastmcp) MCP server that talks to my [`phue`](https://github.com/studioimaginaire/phue) bridge
18
+
- set `HUE_BRIDGE_IP` and `HUE_BRIDGE_USERNAME` in `.env` or otherwise in environment
19
+
- uses `OPENAI_API_KEY` by default, but you can set `AI_MODEL` in `.env` or otherwise in environment to use a different model
20
"""
21
22
import marvin
+1
-3
update-readme
+1
-3
update-readme
···
62
scripts = get_scripts()
63
script_list = "\n\n## scripts\n\n"
64
65
-
# Add directory
66
for script, _ in scripts:
67
script_list += f"- [`{script.name}`](#{script.name})\n"
68
script_list += "\n---\n\n"
69
70
-
# Add detailed entries
71
for script, doc in scripts:
72
-
script_list += f"### `{script.name}`\n\n{doc or 'no description'}\n\n"
73
74
new_content = base_content + script_list
75
···
62
scripts = get_scripts()
63
script_list = "\n\n## scripts\n\n"
64
65
for script, _ in scripts:
66
script_list += f"- [`{script.name}`](#{script.name})\n"
67
script_list += "\n---\n\n"
68
69
for script, doc in scripts:
70
+
script_list += f"### `{script.name}`\n\n{doc or 'no description'}\n\n\n"
71
72
new_content = base_content + script_list
73