+22
README.md
+22
README.md
···
27
27
./check-files-for-bad-links *.md
28
28
```
29
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
+
30
39
### `kill-processes`
31
40
32
41
AI-powered TUI for killing processes.
···
37
46
./kill-processes
38
47
```
39
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
+
40
54
### `update-lights`
41
55
42
56
Make some change to my phillips hue network of lights via agent + MCP server.
···
47
61
./update-lights -m "turn on sahara in the living room and nightlight in the kitchen"
48
62
```
49
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
+
50
71
### `update-readme`
51
72
52
73
Update the README.md file with a list of all the scripts in the current directory.
···
57
78
./update-readme
58
79
```
59
80
81
+
+8
check-files-for-bad-links
+8
check-files-for-bad-links
···
11
11
```bash
12
12
./check-files-for-bad-links *.md
13
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)
14
22
"""
15
23
16
24
import argparse
+4
kill-processes
+4
kill-processes
···
11
11
```bash
12
12
./kill-processes
13
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
14
18
"""
15
19
16
20
import os
+6
update-lights
+6
update-lights
···
11
11
```bash
12
12
./update-lights -m "turn on sahara in the living room and nightlight in the kitchen"
13
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
14
20
"""
15
21
16
22
import marvin
+1
-3
update-readme
+1
-3
update-readme
···
62
62
scripts = get_scripts()
63
63
script_list = "\n\n## scripts\n\n"
64
64
65
-
# Add directory
66
65
for script, _ in scripts:
67
66
script_list += f"- [`{script.name}`](#{script.name})\n"
68
67
script_list += "\n---\n\n"
69
68
70
-
# Add detailed entries
71
69
for script, doc in scripts:
72
-
script_list += f"### `{script.name}`\n\n{doc or 'no description'}\n\n"
70
+
script_list += f"### `{script.name}`\n\n{doc or 'no description'}\n\n\n"
73
71
74
72
new_content = base_content + script_list
75
73