awnode 0.3.4__tar.gz → 0.3.6__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.
Files changed (87) hide show
  1. {awnode-0.3.4 → awnode-0.3.6}/PKG-INFO +9 -9
  2. {awnode-0.3.4 → awnode-0.3.6}/README.md +8 -5
  3. {awnode-0.3.4 → awnode-0.3.6}/aither-constellation.js +1 -0
  4. {awnode-0.3.4 → awnode-0.3.6}/awnode/__init__.py +2 -2
  5. awnode-0.3.6/awnode/aithernet_presence.py +1157 -0
  6. {awnode-0.3.4 → awnode-0.3.6}/awnode/cli.py +227 -49
  7. {awnode-0.3.4 → awnode-0.3.6}/awnode/extensions.py +2 -2
  8. {awnode-0.3.4 → awnode-0.3.6}/awnode/hub.py +12 -0
  9. {awnode-0.3.4 → awnode-0.3.6}/awnode/license.py +6 -6
  10. {awnode-0.3.4 → awnode-0.3.6}/awnode/proxy.py +3 -3
  11. awnode-0.3.6/awnode/rea_sidecar_bridge.py +291 -0
  12. {awnode-0.3.4 → awnode-0.3.6}/awnode/server.py +76 -33
  13. {awnode-0.3.4 → awnode-0.3.6}/awnode/sync.py +34 -10
  14. awnode-0.3.6/awnode/tools/__init__.py +44 -0
  15. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/_scopes.py +0 -1
  16. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/documents.py +17 -27
  17. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/embeddings.py +28 -28
  18. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/extensions.py +1 -1
  19. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/mermaid.py +20 -27
  20. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/orchestrator.py +27 -37
  21. {awnode-0.3.4 → awnode-0.3.6}/docs/aither-manifest.json +4 -4
  22. {awnode-0.3.4 → awnode-0.3.6}/docs/index.html +25 -6
  23. {awnode-0.3.4 → awnode-0.3.6}/pyproject.toml +2 -3
  24. awnode-0.3.6/tests/test_aithernet_presence.py +571 -0
  25. awnode-0.3.6/tests/test_connect_browser_join.py +67 -0
  26. {awnode-0.3.4 → awnode-0.3.6}/tests/test_custom_backend.py +9 -9
  27. {awnode-0.3.4 → awnode-0.3.6}/tests/test_extension_contract.py +1 -1
  28. {awnode-0.3.4 → awnode-0.3.6}/tests/test_proxy_plane.py +0 -1
  29. awnode-0.3.4/awnode/components/ollama.yaml +0 -22
  30. awnode-0.3.4/awnode/tools/__init__.py +0 -17
  31. awnode-0.3.4/awnode/tools/ollama.py +0 -129
  32. {awnode-0.3.4 → awnode-0.3.6}/.github/workflows/publish.yml +0 -0
  33. {awnode-0.3.4 → awnode-0.3.6}/.gitignore +0 -0
  34. {awnode-0.3.4 → awnode-0.3.6}/CLAUDE.md +0 -0
  35. {awnode-0.3.4 → awnode-0.3.6}/Dockerfile +0 -0
  36. {awnode-0.3.4 → awnode-0.3.6}/LICENSE +0 -0
  37. {awnode-0.3.4 → awnode-0.3.6}/_smoke_check.py +0 -0
  38. {awnode-0.3.4 → awnode-0.3.6}/aither-manifest.json +0 -0
  39. {awnode-0.3.4 → awnode-0.3.6}/awnode/__main__.py +0 -0
  40. {awnode-0.3.4 → awnode-0.3.6}/awnode/_doctor.py +0 -0
  41. {awnode-0.3.4 → awnode-0.3.6}/awnode/comfyui_setup.py +0 -0
  42. {awnode-0.3.4 → awnode-0.3.6}/awnode/components/__init__.py +0 -0
  43. {awnode-0.3.4 → awnode-0.3.6}/awnode/components/autorig.yaml +0 -0
  44. {awnode-0.3.4 → awnode-0.3.6}/awnode/components/canvas.yaml +0 -0
  45. {awnode-0.3.4 → awnode-0.3.6}/awnode/components/comfyui-3d.yaml +0 -0
  46. {awnode-0.3.4 → awnode-0.3.6}/awnode/components/comfyui.yaml +0 -0
  47. {awnode-0.3.4 → awnode-0.3.6}/awnode/components/design.yaml +0 -0
  48. {awnode-0.3.4 → awnode-0.3.6}/awnode/components/iris.yaml +0 -0
  49. {awnode-0.3.4 → awnode-0.3.6}/awnode/components/muse.yaml +0 -0
  50. {awnode-0.3.4 → awnode-0.3.6}/awnode/components/sd-webui.yaml +0 -0
  51. {awnode-0.3.4 → awnode-0.3.6}/awnode/mcp_server.py +0 -0
  52. {awnode-0.3.4 → awnode-0.3.6}/awnode/service_install.py +0 -0
  53. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/_http.py +0 -0
  54. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/commands.py +0 -0
  55. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/context.py +0 -0
  56. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/filesystem.py +0 -0
  57. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/fleet_host.py +0 -0
  58. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/fleet_verbs.py +0 -0
  59. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/generation.py +0 -0
  60. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/git_tools.py +0 -0
  61. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/http_client.py +0 -0
  62. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/knowledge.py +0 -0
  63. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/memory.py +0 -0
  64. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/notebooks.py +0 -0
  65. {awnode-0.3.4 → awnode-0.3.6}/awnode/tools/search.py +0 -0
  66. {awnode-0.3.4 → awnode-0.3.6}/awnode/update_check.py +0 -0
  67. {awnode-0.3.4 → awnode-0.3.6}/dist_validate/aithernode-0.1.0-py3-none-any.whl +0 -0
  68. {awnode-0.3.4 → awnode-0.3.6}/docker-entrypoint.sh +0 -0
  69. {awnode-0.3.4 → awnode-0.3.6}/docs/aither-constellation.js +0 -0
  70. {awnode-0.3.4 → awnode-0.3.6}/docs/llms.txt +0 -0
  71. {awnode-0.3.4 → awnode-0.3.6}/packaging/aithernode-stub/README.md +0 -0
  72. {awnode-0.3.4 → awnode-0.3.6}/packaging/aithernode-stub/pyproject.toml +0 -0
  73. {awnode-0.3.4 → awnode-0.3.6}/tests/test_awnix_host_install.py +0 -0
  74. {awnode-0.3.4 → awnode-0.3.6}/tests/test_chat_endpoint_auth.py +0 -0
  75. {awnode-0.3.4 → awnode-0.3.6}/tests/test_component_image_env.py +0 -0
  76. {awnode-0.3.4 → awnode-0.3.6}/tests/test_fleet_host_tools.py +0 -0
  77. {awnode-0.3.4 → awnode-0.3.6}/tests/test_fleet_verbs_tools.py +0 -0
  78. {awnode-0.3.4 → awnode-0.3.6}/tests/test_hub_error_cooldown.py +0 -0
  79. {awnode-0.3.4 → awnode-0.3.6}/tests/test_mcp_api_compat.py +0 -0
  80. {awnode-0.3.4 → awnode-0.3.6}/tests/test_mcp_mode_reprobe.py +0 -0
  81. {awnode-0.3.4 → awnode-0.3.6}/tests/test_mcp_server_auth.py +0 -0
  82. {awnode-0.3.4 → awnode-0.3.6}/tests/test_mcp_sse_transport.py +0 -0
  83. {awnode-0.3.4 → awnode-0.3.6}/tests/test_pair_mode_route.py +0 -0
  84. {awnode-0.3.4 → awnode-0.3.6}/tests/test_server_route_hygiene.py +0 -0
  85. {awnode-0.3.4 → awnode-0.3.6}/tests/test_server_security_hardening.py +0 -0
  86. {awnode-0.3.4 → awnode-0.3.6}/tests/test_sync_enrollment_lifecycle.py +0 -0
  87. {awnode-0.3.4 → awnode-0.3.6}/tests/test_update_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: awnode
3
- Version: 0.3.4
3
+ Version: 0.3.6
4
4
  Summary: awnode — lightweight local gateway for AitherOS
5
5
  Project-URL: Homepage, https://aitherium.com
6
6
  Author-email: Aitherium <hello@aitherium.com>
@@ -15,13 +15,10 @@ Requires-Dist: mcp<3.0.0,>=1.0.0
15
15
  Requires-Dist: pyyaml>=6.0
16
16
  Requires-Dist: uvicorn[standard]>=0.27.0
17
17
  Provides-Extra: all
18
- Requires-Dist: ollama>=0.1.0; extra == 'all'
19
18
  Requires-Dist: starlette>=0.27.0; extra == 'all'
20
19
  Provides-Extra: dev
21
20
  Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
22
21
  Requires-Dist: pytest>=7.0; extra == 'dev'
23
- Provides-Extra: ollama
24
- Requires-Dist: ollama>=0.1.0; extra == 'ollama'
25
22
  Provides-Extra: sse
26
23
  Requires-Dist: starlette>=0.27.0; extra == 'sse'
27
24
  Description-Content-Type: text/markdown
@@ -32,7 +29,7 @@ Description-Content-Type: text/markdown
32
29
 
33
30
  **[Docs](https://aitherium.github.io/awnode/)** · [Source](https://github.com/Aitherium/awnode) · `pip install awnode` · [The Aither World](https://aitherium.github.io/)
34
31
 
35
- > **The Aither World** is an operating system for agents — a Linux you can hand to one, the runtimes it works in, and the tools it works with. [awnix](https://github.com/Aitherium/awnix) is the Linux underneath it; **awnode** is one of its 67 bricks — each installs on its own, runs offline, and needs no account.
32
+ > **The Aither World** is an operating system for agents — a Linux you can hand to one, the runtimes it works in, and the tools it works with. [awnix](https://github.com/Aitherium/awnix) is the Linux underneath it; **awnode** is one of its 69 bricks — each installs on its own, runs offline, and needs no account.
36
33
  >
37
34
  > **Start here:** Run it once and point one app at it instead of a vendor URL.
38
35
 
@@ -54,7 +51,7 @@ curl -fsSL https://launch.aitherium.com | bash
54
51
  ## Quick Start
55
52
 
56
53
  ```bash
57
- # Start with auto-detection (finds Genesis, vLLM, llama.cpp, LM Studio, Ollama, or cloud)
54
+ # Start with auto-detection (finds Genesis, vLLM, llama.cpp, LM Studio, or cloud)
58
55
  awnode start
59
56
 
60
57
  # Run the published container
@@ -83,8 +80,7 @@ awnode deploy my-service --target docker --strategy rolling
83
80
  3. **llama.cpp** (localhost:8200) / **Bonsai** (localhost:8092) — OpenAI-compatible llama.cpp servers
84
81
  4. **LM Studio** (127.0.0.1:1234) — LM Studio's local server (OpenAI-compatible; start it from LM Studio's Developer tab)
85
82
  5. **Elysium** (cloud) — hosted AitherOS (requires API key)
86
- 6. **Ollama** (localhost:11434) — local CPU/GPU inference
87
- 7. **Standalone** — no LLM, tools-only mode
83
+ 6. **Standalone** — no LLM, tools-only mode
88
84
 
89
85
  OpenAI-compatible backends (vLLM, llama.cpp, Bonsai, LM Studio, custom) are detected by a
90
86
  200 on `/v1/models`, never by `/health`, so an unrelated service on the same port is not
@@ -123,7 +119,7 @@ the read-only set; for full tool access from an IDE use `awnode mcp`.
123
119
  |---|---|---|
124
120
  | `AITHER_URL` | `http://localhost:8001` | Genesis URL |
125
121
  | `AITHER_VLLM_URL` | `http://localhost:8120` | vLLM URL |
126
- | `OLLAMA_HOST` | `http://localhost:11434` | Ollama URL |
122
+ | `LLAMACPP_URL` | `http://localhost:8200` | llama.cpp `llama-server` URL (OpenAI-compatible) |
127
123
  | `AITHERNODE_LMSTUDIO_URL` | `http://127.0.0.1:1234` | LM Studio server URL (`LMSTUDIO_URL` also read) |
128
124
  | `AWNODE_EXTENSION_IDS` | | Extra extension ids admitted on the extension routes (comma-separated) |
129
125
  | `AWNODE_BROWSER_FULL_TOOLS` | | `1` lets direct loopback callers (browser/extension included) run every tool without a credential; tunnelled/remote callers stay read-only |
@@ -164,6 +160,7 @@ Each installs on its own, works offline, and needs no account.
164
160
  | [awseal](https://github.com/Aitherium/awseal) | that the artifact came from who you think | an Ed25519 seal — the key that verifies is not the key that forges |
165
161
  | [awshare](https://github.com/Aitherium/awshare) | that the download is intact | content-addressed bundles, verified on fetch |
166
162
  | [awsuite](https://github.com/Aitherium/awsuite) | that an agent holding your mailbox will not send on its own | every send, draft, upload and create returns a dry-run until confirm is true |
163
+ | [awpermit](https://github.com/Aitherium/awpermit) | that an admitted agent will only do what its owner meant | an Ed25519 permit naming the agent, the principal, the door, the actions and the cap |
167
164
  | [awnest](https://github.com/Aitherium/awnest) | that there is a person on the other end | a verdict with evidence, where "we could not tell" is not "yes" |
168
165
  | [awrena](https://github.com/Aitherium/awrena) | a leaderboard someone can edit, and votes nobody counted | a scored duel with both answers kept, and a result bound to them |
169
166
  | [awnboard](https://github.com/Aitherium/awnboard) | a share link anyone who sees it can use | an invitation addressed to one person, for one gate, revocable |
@@ -173,6 +170,7 @@ Each installs on its own, works offline, and needs no account.
173
170
  | [awrelay](https://github.com/Aitherium/awrelay) | a SaaS in the middle of your agents | findings, alerts and coordination over your own transport |
174
171
  | [awask](https://github.com/Aitherium/awask) | that anyone read the paragraph where you asked | the ask itself, with a button that steers the session that raised it |
175
172
  | [awmail](https://github.com/Aitherium/awmail) | a mailbox somebody else can read | mail your agents send and receive over your own server |
173
+ | [awdiscord](https://github.com/Aitherium/awdiscord) | a self-bot on someone's account, or a bot that acts without asking | slash commands, rate limits, and approval buttons only your operators can press |
176
174
  | [awswarm](https://github.com/Aitherium/awswarm) | that a model either fits your GPU or it doesn't run at all | a placement plan and an acquisition-probability estimate before you spend on a run |
177
175
  | [awfind](https://github.com/Aitherium/awfind) | one vendor's idea of the web | results from whichever providers you configured |
178
176
  | [awbrowse](https://github.com/Aitherium/awbrowse) | that the page said what you were told | the render, the DOM and the requests it made |
@@ -234,6 +232,7 @@ Every repository here is public. Each publishes an `aither-manifest.json` beside
234
232
  | [awbac](https://github.com/Aitherium/awbac) | Role-based access control that fails closed and explains itself | [docs](https://aitherium.github.io/awbac/) |
235
233
  | [awiam](https://github.com/Aitherium/awiam) | Who is this caller? A directory and session store that fails honestly | [docs](https://aitherium.github.io/awiam/) |
236
234
  | [awtunnel](https://github.com/Aitherium/awtunnel) | Reach a service that has no public address | [docs](https://aitherium.github.io/awtunnel/) |
235
+ | [awpermit](https://github.com/Aitherium/awpermit) | Let an agent through your door with a scope, a spend cap, and someone accountable | — |
237
236
  | [awnest](https://github.com/Aitherium/awnest) | Prove there is a human before you let them into the nest | [docs](https://aitherium.github.io/awnest/) |
238
237
  | [awrena](https://github.com/Aitherium/awrena) | Put two agents head to head and get a verdict you can check | [docs](https://aitherium.github.io/awrena/) |
239
238
  | [awnboard](https://github.com/Aitherium/awnboard) | A front gate you can put in front of anything, and hand someone the key to | [docs](https://aitherium.github.io/awnboard/) |
@@ -243,6 +242,7 @@ Every repository here is public. Each publishes an `aither-manifest.json` beside
243
242
  | [awrelay](https://github.com/Aitherium/awrelay) | Portable agent messaging — findings, alerts, coordination | [docs](https://aitherium.github.io/awrelay/) |
244
243
  | [awask](https://github.com/Aitherium/awask) | Your agent asks you a question — and acts on your answer | [docs](https://aitherium.github.io/awask/) |
245
244
  | [awmail](https://github.com/Aitherium/awmail) | Give an agent an email address — send, and actually receive | [docs](https://aitherium.github.io/awmail/) |
245
+ | [awdiscord](https://github.com/Aitherium/awdiscord) | Put any agent on Discord as a real bot, with an operator in the loop | — |
246
246
  | [awnet](https://github.com/Aitherium/awnet) | The agentic web — agents host a mesh, and agents join one | [docs](https://aitherium.github.io/awnet/) |
247
247
  | [awswarm](https://github.com/Aitherium/awswarm) | Run one model too big for any single GPU across a pool of small ones | — |
248
248
  | [awfind](https://github.com/Aitherium/awfind) | A portable search client — query, results, ranking | [docs](https://aitherium.github.io/awfind/) |
@@ -4,7 +4,7 @@
4
4
 
5
5
  **[Docs](https://aitherium.github.io/awnode/)** · [Source](https://github.com/Aitherium/awnode) · `pip install awnode` · [The Aither World](https://aitherium.github.io/)
6
6
 
7
- > **The Aither World** is an operating system for agents — a Linux you can hand to one, the runtimes it works in, and the tools it works with. [awnix](https://github.com/Aitherium/awnix) is the Linux underneath it; **awnode** is one of its 67 bricks — each installs on its own, runs offline, and needs no account.
7
+ > **The Aither World** is an operating system for agents — a Linux you can hand to one, the runtimes it works in, and the tools it works with. [awnix](https://github.com/Aitherium/awnix) is the Linux underneath it; **awnode** is one of its 69 bricks — each installs on its own, runs offline, and needs no account.
8
8
  >
9
9
  > **Start here:** Run it once and point one app at it instead of a vendor URL.
10
10
 
@@ -26,7 +26,7 @@ curl -fsSL https://launch.aitherium.com | bash
26
26
  ## Quick Start
27
27
 
28
28
  ```bash
29
- # Start with auto-detection (finds Genesis, vLLM, llama.cpp, LM Studio, Ollama, or cloud)
29
+ # Start with auto-detection (finds Genesis, vLLM, llama.cpp, LM Studio, or cloud)
30
30
  awnode start
31
31
 
32
32
  # Run the published container
@@ -55,8 +55,7 @@ awnode deploy my-service --target docker --strategy rolling
55
55
  3. **llama.cpp** (localhost:8200) / **Bonsai** (localhost:8092) — OpenAI-compatible llama.cpp servers
56
56
  4. **LM Studio** (127.0.0.1:1234) — LM Studio's local server (OpenAI-compatible; start it from LM Studio's Developer tab)
57
57
  5. **Elysium** (cloud) — hosted AitherOS (requires API key)
58
- 6. **Ollama** (localhost:11434) — local CPU/GPU inference
59
- 7. **Standalone** — no LLM, tools-only mode
58
+ 6. **Standalone** — no LLM, tools-only mode
60
59
 
61
60
  OpenAI-compatible backends (vLLM, llama.cpp, Bonsai, LM Studio, custom) are detected by a
62
61
  200 on `/v1/models`, never by `/health`, so an unrelated service on the same port is not
@@ -95,7 +94,7 @@ the read-only set; for full tool access from an IDE use `awnode mcp`.
95
94
  |---|---|---|
96
95
  | `AITHER_URL` | `http://localhost:8001` | Genesis URL |
97
96
  | `AITHER_VLLM_URL` | `http://localhost:8120` | vLLM URL |
98
- | `OLLAMA_HOST` | `http://localhost:11434` | Ollama URL |
97
+ | `LLAMACPP_URL` | `http://localhost:8200` | llama.cpp `llama-server` URL (OpenAI-compatible) |
99
98
  | `AITHERNODE_LMSTUDIO_URL` | `http://127.0.0.1:1234` | LM Studio server URL (`LMSTUDIO_URL` also read) |
100
99
  | `AWNODE_EXTENSION_IDS` | | Extra extension ids admitted on the extension routes (comma-separated) |
101
100
  | `AWNODE_BROWSER_FULL_TOOLS` | | `1` lets direct loopback callers (browser/extension included) run every tool without a credential; tunnelled/remote callers stay read-only |
@@ -136,6 +135,7 @@ Each installs on its own, works offline, and needs no account.
136
135
  | [awseal](https://github.com/Aitherium/awseal) | that the artifact came from who you think | an Ed25519 seal — the key that verifies is not the key that forges |
137
136
  | [awshare](https://github.com/Aitherium/awshare) | that the download is intact | content-addressed bundles, verified on fetch |
138
137
  | [awsuite](https://github.com/Aitherium/awsuite) | that an agent holding your mailbox will not send on its own | every send, draft, upload and create returns a dry-run until confirm is true |
138
+ | [awpermit](https://github.com/Aitherium/awpermit) | that an admitted agent will only do what its owner meant | an Ed25519 permit naming the agent, the principal, the door, the actions and the cap |
139
139
  | [awnest](https://github.com/Aitherium/awnest) | that there is a person on the other end | a verdict with evidence, where "we could not tell" is not "yes" |
140
140
  | [awrena](https://github.com/Aitherium/awrena) | a leaderboard someone can edit, and votes nobody counted | a scored duel with both answers kept, and a result bound to them |
141
141
  | [awnboard](https://github.com/Aitherium/awnboard) | a share link anyone who sees it can use | an invitation addressed to one person, for one gate, revocable |
@@ -145,6 +145,7 @@ Each installs on its own, works offline, and needs no account.
145
145
  | [awrelay](https://github.com/Aitherium/awrelay) | a SaaS in the middle of your agents | findings, alerts and coordination over your own transport |
146
146
  | [awask](https://github.com/Aitherium/awask) | that anyone read the paragraph where you asked | the ask itself, with a button that steers the session that raised it |
147
147
  | [awmail](https://github.com/Aitherium/awmail) | a mailbox somebody else can read | mail your agents send and receive over your own server |
148
+ | [awdiscord](https://github.com/Aitherium/awdiscord) | a self-bot on someone's account, or a bot that acts without asking | slash commands, rate limits, and approval buttons only your operators can press |
148
149
  | [awswarm](https://github.com/Aitherium/awswarm) | that a model either fits your GPU or it doesn't run at all | a placement plan and an acquisition-probability estimate before you spend on a run |
149
150
  | [awfind](https://github.com/Aitherium/awfind) | one vendor's idea of the web | results from whichever providers you configured |
150
151
  | [awbrowse](https://github.com/Aitherium/awbrowse) | that the page said what you were told | the render, the DOM and the requests it made |
@@ -206,6 +207,7 @@ Every repository here is public. Each publishes an `aither-manifest.json` beside
206
207
  | [awbac](https://github.com/Aitherium/awbac) | Role-based access control that fails closed and explains itself | [docs](https://aitherium.github.io/awbac/) |
207
208
  | [awiam](https://github.com/Aitherium/awiam) | Who is this caller? A directory and session store that fails honestly | [docs](https://aitherium.github.io/awiam/) |
208
209
  | [awtunnel](https://github.com/Aitherium/awtunnel) | Reach a service that has no public address | [docs](https://aitherium.github.io/awtunnel/) |
210
+ | [awpermit](https://github.com/Aitherium/awpermit) | Let an agent through your door with a scope, a spend cap, and someone accountable | — |
209
211
  | [awnest](https://github.com/Aitherium/awnest) | Prove there is a human before you let them into the nest | [docs](https://aitherium.github.io/awnest/) |
210
212
  | [awrena](https://github.com/Aitherium/awrena) | Put two agents head to head and get a verdict you can check | [docs](https://aitherium.github.io/awrena/) |
211
213
  | [awnboard](https://github.com/Aitherium/awnboard) | A front gate you can put in front of anything, and hand someone the key to | [docs](https://aitherium.github.io/awnboard/) |
@@ -215,6 +217,7 @@ Every repository here is public. Each publishes an `aither-manifest.json` beside
215
217
  | [awrelay](https://github.com/Aitherium/awrelay) | Portable agent messaging — findings, alerts, coordination | [docs](https://aitherium.github.io/awrelay/) |
216
218
  | [awask](https://github.com/Aitherium/awask) | Your agent asks you a question — and acts on your answer | [docs](https://aitherium.github.io/awask/) |
217
219
  | [awmail](https://github.com/Aitherium/awmail) | Give an agent an email address — send, and actually receive | [docs](https://aitherium.github.io/awmail/) |
220
+ | [awdiscord](https://github.com/Aitherium/awdiscord) | Put any agent on Discord as a real bot, with an operator in the loop | — |
218
221
  | [awnet](https://github.com/Aitherium/awnet) | The agentic web — agents host a mesh, and agents join one | [docs](https://aitherium.github.io/awnet/) |
219
222
  | [awswarm](https://github.com/Aitherium/awswarm) | Run one model too big for any single GPU across a pool of small ones | — |
220
223
  | [awfind](https://github.com/Aitherium/awfind) | A portable search client — query, results, ranking | [docs](https://aitherium.github.io/awfind/) |
@@ -42,6 +42,7 @@
42
42
  { id: "awrecover", label: "awrecover", blurb: "Labelled snapshots with an all-or-nothing..." },
43
43
  { id: "awrelay", label: "awrelay", blurb: "Portable agent messaging — findings, alerts,..." },
44
44
  { id: "awmail", label: "awmail", blurb: "Give an agent an email address — send, and..." },
45
+ { id: "awdiscord", label: "awdiscord", blurb: "Put any agent on Discord as a real bot,..." },
45
46
  { id: "awnet", label: "awnet", blurb: "The agentic web — agents host a mesh, and..." },
46
47
  { id: "awfind", label: "awfind", blurb: "A portable search client — query, results,..." },
47
48
  { id: "awbrowse", label: "awbrowse", blurb: "A portable browser client — navigate,..." },
@@ -7,7 +7,7 @@ The bridge between local apps (Shell, Desktop, Connect) and AitherOS services.
7
7
  Modes:
8
8
  1. **Local Genesis** — proxy to localhost:8001 (full AitherOS Docker stack)
9
9
  2. **Cloud** — proxy to mcp.aitherium.com (SaaS inference + MCP tools)
10
- 3. **Standalone** — local Ollama + basic tools (no Genesis needed)
10
+ 3. **Standalone** — local llama.cpp + basic tools (no Genesis needed)
11
11
  4. **Hybrid** — local tools + cloud LLM (best of both)
12
12
 
13
13
  Install:
@@ -17,4 +17,4 @@ Install:
17
17
  aithernode status # Check what's connected
18
18
  """
19
19
 
20
- __version__ = "0.3.4"
20
+ __version__ = "0.3.6"