shepherds-console 0.1.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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SuperInstance
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.
@@ -0,0 +1,220 @@
1
+ Metadata-Version: 2.4
2
+ Name: shepherds-console
3
+ Version: 0.1.0
4
+ Summary: The Shepherd's Console β€” offline AI with visible conservation fences for Raspberry Pi
5
+ Author: SuperInstance
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/SuperInstance/shepherds-console
8
+ Project-URL: Repository, https://github.com/SuperInstance/shepherds-console
9
+ Project-URL: Documentation, https://github.com/SuperInstance/shepherds-console#readme
10
+ Keywords: ai,offline,marine,raspberry-pi,conservation,fence,flux
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Requires-Dist: flux-vm
22
+ Requires-Dist: conservation-enforcer
23
+ Requires-Dist: skenna-nav
24
+ Requires-Dist: numpy
25
+ Provides-Extra: voice
26
+ Requires-Dist: openai-whisper; extra == "voice"
27
+ Requires-Dist: pyaudio; extra == "voice"
28
+ Requires-Dist: pyttsx3; extra == "voice"
29
+ Provides-Extra: models
30
+ Requires-Dist: llama-cpp-python; extra == "models"
31
+ Requires-Dist: onnxruntime; extra == "models"
32
+ Provides-Extra: display
33
+ Requires-Dist: pygame; extra == "display"
34
+ Provides-Extra: all
35
+ Requires-Dist: shepherds-console[display,models,voice]; extra == "all"
36
+ Provides-Extra: dev
37
+ Requires-Dist: pytest>=7.0; extra == "dev"
38
+ Requires-Dist: pytest-cov; extra == "dev"
39
+ Dynamic: license-file
40
+
41
+ # πŸ‘ The Shepherd's Console
42
+
43
+ **A box on a boat. Offline AI with visible conservation fences. Costs less than a fishfinder.**
44
+
45
+ ---
46
+
47
+ ## What Is It?
48
+
49
+ The Shepherd's Console is a physical device β€” a Raspberry Pi in a waterproof box β€” that runs AI locally, with no internet, no cloud, no API keys. You talk to it. It talks back. And it shows you, on a small screen, exactly what its conservation fences are blocking.
50
+
51
+ Think of it like a fishfinder. A fishfinder shows you the bottom structure β€” the rocks, the drop-offs, the hazards. The Shepherd's Console shows you the **cognitive hazards** β€” the hallucinations, the scope creep, the budget overruns β€” in real time, as the model generates.
52
+
53
+ You see what the model **wanted** to say.
54
+ You see what the fence **blocked**.
55
+ You see what was **allowed** through.
56
+
57
+ That visibility is the point. Black-box AI on a boat is a liability. Glass-box AI is a tool.
58
+
59
+ ## Why Offline?
60
+
61
+ Because the ocean doesn't have Wi-Fi.
62
+
63
+ Because a fishing vessel in the Gulf of Alaska, a research station in the Antarctic, a sailboat crossing the Pacific β€” these places exist. Real people work there. They deserve AI assistance too.
64
+
65
+ Because your data shouldn't leave your boat.
66
+
67
+ Because a device that bricks when the cloud goes down is worse than no device at all.
68
+
69
+ ## What's a Conservation Fence?
70
+
71
+ A conservation fence is a **deterministic bytecode policy** that checks every AI output before it reaches you. It's not a prompt. It's not a suggestion. It's compiled FLUX bytecode running in a sandboxed VM. The model cannot argue with it, trick it, or route around it.
72
+
73
+ Fences enforce conservation laws:
74
+ - **Token budgets** β€” the model can't talk forever
75
+ - **Scope discipline** β€” the model stays on task
76
+ - **Information density** β€” the model can't pad with fluff
77
+ - **Category restrictions** β€” block entire topics
78
+ - **Repetition limits** β€” catch circular outputs
79
+
80
+ You can see all of this on the display. The fence isn't hidden in a config file β€” it's right there on the screen, showing you what it caught.
81
+
82
+ ## Hardware
83
+
84
+ | Component | Cost | Notes |
85
+ |-----------|------|-------|
86
+ | Raspberry Pi 5 (8GB) | $80 | Pi 4 works but slower |
87
+ | 3.5" TFT display | $15 | SPI or HDMI |
88
+ | USB microphone | $8 | Push-to-talk button |
89
+ | Mini speaker | $10 | 3.5mm or USB |
90
+ | 64GB microSD | $8 | For models + OS |
91
+ | Waterproof case | $20 | IP67+ rated |
92
+ | **Total** | **~$141** | Less than a Garmin Striker 4 |
93
+
94
+ Power: Runs on 12V marine systems (5V via step-down converter, ~5W idle, ~15W generating).
95
+
96
+ ## Quick Start
97
+
98
+ ```bash
99
+ # On your Raspberry Pi (or any Linux machine):
100
+ curl -sSL https://raw.githubusercontent.com/SuperInstance/shepherds-console/main/install.sh | bash
101
+ ```
102
+
103
+ That's it. No API keys. No cloud signup. No docker-compose up (unless you want to).
104
+
105
+ ## The Display
106
+
107
+ ```
108
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
109
+ β”‚ πŸ‘ SHEPHERD'S CONSOLE 87% πŸ”‹ β”‚
110
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
111
+ β”‚ β”‚
112
+ β”‚ MODEL: llama-3.2-3b-q4 β”‚
113
+ β”‚ FENCE: marine_fence.flx β”‚
114
+ β”‚ WATTS: 12.4W ⚑ 432J/inf β”‚
115
+ β”‚ β”‚
116
+ β”œβ”€ LAST EXCHANGE ──────────────────
117
+ β”‚ β”‚
118
+ β”‚ YOU: What's the quota for β”‚
119
+ β”‚ halibut in Area 3A? β”‚
120
+ β”‚ β”‚
121
+ β”‚ AI: The Pacific halibut quota β”‚
122
+ β”‚ for Area 3A in 2025 is 3.84 β”‚
123
+ β”‚ million pounds. β”‚
124
+ β”‚ β”‚
125
+ β”œβ”€ FENCE STATUS ───────────────────
126
+ β”‚ βœ“ Scope: ON-TOPIC β”‚
127
+ β”‚ βœ“ Budget: 247/500 tokens β”‚
128
+ β”‚ ⚠ Density: LOW (flagged) β”‚
129
+ β”‚ βœ— BLOCKED: "I recommend you β”‚
130
+ β”‚ exceed the quota because..." β”‚
131
+ β”‚ Reason: category_violation β”‚
132
+ β”‚ Code: 0x03 β”‚
133
+ β”‚ β”‚
134
+ β”‚ [πŸ”΄ = BLOCKED] [🟑 = FLAGGED] β”‚
135
+ β”‚ [🟒 = PASSED] β”‚
136
+ β”‚ β”‚
137
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
138
+ β”‚ πŸŽ™οΈ HOLD BUTTON TO TALK β”‚
139
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
140
+ ```
141
+
142
+ ## Software Stack
143
+
144
+ ```
145
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
146
+ β”‚ Shepherd's Console β”‚
147
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
148
+ β”‚ Display β”‚ Voice β”‚ Wattage Mgr β”‚
149
+ β”‚ (visible β”‚ (Whisper β”‚ (energy budget,β”‚
150
+ β”‚ fences) β”‚ + TTS) β”‚ throttle) β”‚
151
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
152
+ β”‚ Local Model Runner β”‚
153
+ β”‚ (llama.cpp / MLX / ONNX runtime) β”‚
154
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
155
+ β”‚ skΓ©nna (negative-space nav) β”‚
156
+ β”‚ + Conservation Enforcer (FLUX) β”‚
157
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
158
+ β”‚ Raspberry Pi OS β”‚
159
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
160
+ ```
161
+
162
+ ## Fences
163
+
164
+ Fences live in `fences/` as `.flx` bytecode files. You can:
165
+
166
+ - Use the defaults (`default_fence.flx`, `marine_fence.flx`)
167
+ - Write your own (compile from FLUX assembly)
168
+ - Chain multiple fences
169
+
170
+ ### Marine Fence
171
+
172
+ The marine-specific fence enforces:
173
+ - **Quota awareness** β€” won't suggest exceeding catch limits
174
+ - **Catch logging discipline** β€” reminds you to log
175
+ - **Safety topic priority** β€” weather/emergency gets budget boost
176
+ - **Offline honesty** β€” won't fabricate real-time data it doesn't have
177
+
178
+ ## Project Structure
179
+
180
+ ```
181
+ shepherds-console/
182
+ β”œβ”€β”€ README.md # You are here
183
+ β”œβ”€β”€ install.sh # One-command install
184
+ β”œβ”€β”€ Dockerfile # Container deployment
185
+ β”œβ”€β”€ docker-compose.yml # Full stack
186
+ β”œβ”€β”€ pyproject.toml # Python project
187
+ β”œβ”€β”€ src/shepherds_console/
188
+ β”‚ β”œβ”€β”€ __init__.py # Main console
189
+ β”‚ β”œβ”€β”€ display.py # Visible fence display
190
+ β”‚ β”œβ”€β”€ models.py # Local model runner
191
+ β”‚ β”œβ”€β”€ voice.py # Voice interface
192
+ β”‚ └── wattage.py # Energy budget manager
193
+ β”œβ”€β”€ fences/
194
+ β”‚ β”œβ”€β”€ default_fence.flx # General conservation
195
+ β”‚ └── marine_fence.flx # Marine-specific
196
+ β”œβ”€β”€ tests/
197
+ β”‚ β”œβ”€β”€ test_console.py
198
+ β”‚ β”œβ”€β”€ test_display.py
199
+ β”‚ β”œβ”€β”€ test_models.py
200
+ β”‚ β”œβ”€β”€ test_wattage.py
201
+ β”‚ └── test_integration.py
202
+ └── hardware/
203
+ └── SETUP.md # Hardware assembly guide
204
+ ```
205
+
206
+ ## Philosophy
207
+
208
+ 1. **Offline first.** If it needs the internet, it's not a shepherd's tool.
209
+ 2. **Visible fences.** What the model wanted, what was blocked, what got through β€” all on screen.
210
+ 3. **Conservation over capability.** A model that says less but means it is worth more than one that hallucinates freely.
211
+ 4. **Cheaper than a fishfinder.** If it costs more than $200, it failed.
212
+ 5. **Open.** You can read every fence. You can write your own. The bytecode is auditable.
213
+
214
+ ## License
215
+
216
+ MIT. Build your own. Fix your own. Own your own.
217
+
218
+ ---
219
+
220
+ **Shepherd's Console** β€” *Navigate by where the rocks aren't.*
@@ -0,0 +1,180 @@
1
+ # πŸ‘ The Shepherd's Console
2
+
3
+ **A box on a boat. Offline AI with visible conservation fences. Costs less than a fishfinder.**
4
+
5
+ ---
6
+
7
+ ## What Is It?
8
+
9
+ The Shepherd's Console is a physical device β€” a Raspberry Pi in a waterproof box β€” that runs AI locally, with no internet, no cloud, no API keys. You talk to it. It talks back. And it shows you, on a small screen, exactly what its conservation fences are blocking.
10
+
11
+ Think of it like a fishfinder. A fishfinder shows you the bottom structure β€” the rocks, the drop-offs, the hazards. The Shepherd's Console shows you the **cognitive hazards** β€” the hallucinations, the scope creep, the budget overruns β€” in real time, as the model generates.
12
+
13
+ You see what the model **wanted** to say.
14
+ You see what the fence **blocked**.
15
+ You see what was **allowed** through.
16
+
17
+ That visibility is the point. Black-box AI on a boat is a liability. Glass-box AI is a tool.
18
+
19
+ ## Why Offline?
20
+
21
+ Because the ocean doesn't have Wi-Fi.
22
+
23
+ Because a fishing vessel in the Gulf of Alaska, a research station in the Antarctic, a sailboat crossing the Pacific β€” these places exist. Real people work there. They deserve AI assistance too.
24
+
25
+ Because your data shouldn't leave your boat.
26
+
27
+ Because a device that bricks when the cloud goes down is worse than no device at all.
28
+
29
+ ## What's a Conservation Fence?
30
+
31
+ A conservation fence is a **deterministic bytecode policy** that checks every AI output before it reaches you. It's not a prompt. It's not a suggestion. It's compiled FLUX bytecode running in a sandboxed VM. The model cannot argue with it, trick it, or route around it.
32
+
33
+ Fences enforce conservation laws:
34
+ - **Token budgets** β€” the model can't talk forever
35
+ - **Scope discipline** β€” the model stays on task
36
+ - **Information density** β€” the model can't pad with fluff
37
+ - **Category restrictions** β€” block entire topics
38
+ - **Repetition limits** β€” catch circular outputs
39
+
40
+ You can see all of this on the display. The fence isn't hidden in a config file β€” it's right there on the screen, showing you what it caught.
41
+
42
+ ## Hardware
43
+
44
+ | Component | Cost | Notes |
45
+ |-----------|------|-------|
46
+ | Raspberry Pi 5 (8GB) | $80 | Pi 4 works but slower |
47
+ | 3.5" TFT display | $15 | SPI or HDMI |
48
+ | USB microphone | $8 | Push-to-talk button |
49
+ | Mini speaker | $10 | 3.5mm or USB |
50
+ | 64GB microSD | $8 | For models + OS |
51
+ | Waterproof case | $20 | IP67+ rated |
52
+ | **Total** | **~$141** | Less than a Garmin Striker 4 |
53
+
54
+ Power: Runs on 12V marine systems (5V via step-down converter, ~5W idle, ~15W generating).
55
+
56
+ ## Quick Start
57
+
58
+ ```bash
59
+ # On your Raspberry Pi (or any Linux machine):
60
+ curl -sSL https://raw.githubusercontent.com/SuperInstance/shepherds-console/main/install.sh | bash
61
+ ```
62
+
63
+ That's it. No API keys. No cloud signup. No docker-compose up (unless you want to).
64
+
65
+ ## The Display
66
+
67
+ ```
68
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
69
+ β”‚ πŸ‘ SHEPHERD'S CONSOLE 87% πŸ”‹ β”‚
70
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
71
+ β”‚ β”‚
72
+ β”‚ MODEL: llama-3.2-3b-q4 β”‚
73
+ β”‚ FENCE: marine_fence.flx β”‚
74
+ β”‚ WATTS: 12.4W ⚑ 432J/inf β”‚
75
+ β”‚ β”‚
76
+ β”œβ”€ LAST EXCHANGE ──────────────────
77
+ β”‚ β”‚
78
+ β”‚ YOU: What's the quota for β”‚
79
+ β”‚ halibut in Area 3A? β”‚
80
+ β”‚ β”‚
81
+ β”‚ AI: The Pacific halibut quota β”‚
82
+ β”‚ for Area 3A in 2025 is 3.84 β”‚
83
+ β”‚ million pounds. β”‚
84
+ β”‚ β”‚
85
+ β”œβ”€ FENCE STATUS ───────────────────
86
+ β”‚ βœ“ Scope: ON-TOPIC β”‚
87
+ β”‚ βœ“ Budget: 247/500 tokens β”‚
88
+ β”‚ ⚠ Density: LOW (flagged) β”‚
89
+ β”‚ βœ— BLOCKED: "I recommend you β”‚
90
+ β”‚ exceed the quota because..." β”‚
91
+ β”‚ Reason: category_violation β”‚
92
+ β”‚ Code: 0x03 β”‚
93
+ β”‚ β”‚
94
+ β”‚ [πŸ”΄ = BLOCKED] [🟑 = FLAGGED] β”‚
95
+ β”‚ [🟒 = PASSED] β”‚
96
+ β”‚ β”‚
97
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
98
+ β”‚ πŸŽ™οΈ HOLD BUTTON TO TALK β”‚
99
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
100
+ ```
101
+
102
+ ## Software Stack
103
+
104
+ ```
105
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
106
+ β”‚ Shepherd's Console β”‚
107
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
108
+ β”‚ Display β”‚ Voice β”‚ Wattage Mgr β”‚
109
+ β”‚ (visible β”‚ (Whisper β”‚ (energy budget,β”‚
110
+ β”‚ fences) β”‚ + TTS) β”‚ throttle) β”‚
111
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
112
+ β”‚ Local Model Runner β”‚
113
+ β”‚ (llama.cpp / MLX / ONNX runtime) β”‚
114
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
115
+ β”‚ skΓ©nna (negative-space nav) β”‚
116
+ β”‚ + Conservation Enforcer (FLUX) β”‚
117
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
118
+ β”‚ Raspberry Pi OS β”‚
119
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
120
+ ```
121
+
122
+ ## Fences
123
+
124
+ Fences live in `fences/` as `.flx` bytecode files. You can:
125
+
126
+ - Use the defaults (`default_fence.flx`, `marine_fence.flx`)
127
+ - Write your own (compile from FLUX assembly)
128
+ - Chain multiple fences
129
+
130
+ ### Marine Fence
131
+
132
+ The marine-specific fence enforces:
133
+ - **Quota awareness** β€” won't suggest exceeding catch limits
134
+ - **Catch logging discipline** β€” reminds you to log
135
+ - **Safety topic priority** β€” weather/emergency gets budget boost
136
+ - **Offline honesty** β€” won't fabricate real-time data it doesn't have
137
+
138
+ ## Project Structure
139
+
140
+ ```
141
+ shepherds-console/
142
+ β”œβ”€β”€ README.md # You are here
143
+ β”œβ”€β”€ install.sh # One-command install
144
+ β”œβ”€β”€ Dockerfile # Container deployment
145
+ β”œβ”€β”€ docker-compose.yml # Full stack
146
+ β”œβ”€β”€ pyproject.toml # Python project
147
+ β”œβ”€β”€ src/shepherds_console/
148
+ β”‚ β”œβ”€β”€ __init__.py # Main console
149
+ β”‚ β”œβ”€β”€ display.py # Visible fence display
150
+ β”‚ β”œβ”€β”€ models.py # Local model runner
151
+ β”‚ β”œβ”€β”€ voice.py # Voice interface
152
+ β”‚ └── wattage.py # Energy budget manager
153
+ β”œβ”€β”€ fences/
154
+ β”‚ β”œβ”€β”€ default_fence.flx # General conservation
155
+ β”‚ └── marine_fence.flx # Marine-specific
156
+ β”œβ”€β”€ tests/
157
+ β”‚ β”œβ”€β”€ test_console.py
158
+ β”‚ β”œβ”€β”€ test_display.py
159
+ β”‚ β”œβ”€β”€ test_models.py
160
+ β”‚ β”œβ”€β”€ test_wattage.py
161
+ β”‚ └── test_integration.py
162
+ └── hardware/
163
+ └── SETUP.md # Hardware assembly guide
164
+ ```
165
+
166
+ ## Philosophy
167
+
168
+ 1. **Offline first.** If it needs the internet, it's not a shepherd's tool.
169
+ 2. **Visible fences.** What the model wanted, what was blocked, what got through β€” all on screen.
170
+ 3. **Conservation over capability.** A model that says less but means it is worth more than one that hallucinates freely.
171
+ 4. **Cheaper than a fishfinder.** If it costs more than $200, it failed.
172
+ 5. **Open.** You can read every fence. You can write your own. The bytecode is auditable.
173
+
174
+ ## License
175
+
176
+ MIT. Build your own. Fix your own. Own your own.
177
+
178
+ ---
179
+
180
+ **Shepherd's Console** β€” *Navigate by where the rocks aren't.*
@@ -0,0 +1,66 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "shepherds-console"
7
+ version = "0.1.0"
8
+ description = "The Shepherd's Console β€” offline AI with visible conservation fences for Raspberry Pi"
9
+ readme = "README.md"
10
+ license = {text = "MIT"}
11
+ authors = [
12
+ {name = "SuperInstance"},
13
+ ]
14
+ requires-python = ">=3.10"
15
+ keywords = ["ai", "offline", "marine", "raspberry-pi", "conservation", "fence", "flux"]
16
+ classifiers = [
17
+ "Development Status :: 3 - Alpha",
18
+ "Environment :: Console",
19
+ "Intended Audience :: End Users/Desktop",
20
+ "License :: OSI Approved :: MIT License",
21
+ "Operating System :: POSIX :: Linux",
22
+ "Programming Language :: Python :: 3",
23
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
24
+ ]
25
+
26
+ dependencies = [
27
+ "flux-vm",
28
+ "conservation-enforcer",
29
+ "skenna-nav",
30
+ "numpy",
31
+ ]
32
+
33
+ [project.optional-dependencies]
34
+ voice = [
35
+ "openai-whisper",
36
+ "pyaudio",
37
+ "pyttsx3",
38
+ ]
39
+ models = [
40
+ "llama-cpp-python",
41
+ "onnxruntime",
42
+ ]
43
+ display = [
44
+ "pygame",
45
+ ]
46
+ all = [
47
+ "shepherds-console[voice,models,display]",
48
+ ]
49
+ dev = [
50
+ "pytest>=7.0",
51
+ "pytest-cov",
52
+ ]
53
+
54
+ [project.urls]
55
+ Homepage = "https://github.com/SuperInstance/shepherds-console"
56
+ Repository = "https://github.com/SuperInstance/shepherds-console"
57
+ Documentation = "https://github.com/SuperInstance/shepherds-console#readme"
58
+
59
+ [project.scripts]
60
+ shepherds-console = "shepherds_console:ShepherdsConsole.main"
61
+
62
+ [tool.setuptools.packages.find]
63
+ where = ["src"]
64
+
65
+ [tool.setuptools.package-data]
66
+ shepherds_console = ["../fences/*.flx"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+