awkno 0.2.6__tar.gz → 0.2.8__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 (193) hide show
  1. {awkno-0.2.6 → awkno-0.2.8}/PKG-INFO +12 -2
  2. {awkno-0.2.6 → awkno-0.2.8}/README.md +11 -1
  3. {awkno-0.2.6 → awkno-0.2.8}/awkno/__init__.py +1 -1
  4. {awkno-0.2.6 → awkno-0.2.8}/awkno/_doctor.py +9 -1
  5. {awkno-0.2.6 → awkno-0.2.8}/awkno/generate.py +38 -2
  6. awkno-0.2.8/awkno/pages/aitherbrowser.json +12 -0
  7. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/aitherconnect.json +1 -1
  8. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awask.json +2 -1
  9. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awavatar.json +1 -1
  10. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awbrain.json +1 -1
  11. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awbrowse.json +1 -1
  12. awkno-0.2.8/awkno/pages/awcams.json +12 -0
  13. awkno-0.2.8/awkno/pages/awcap.json +16 -0
  14. awkno-0.2.8/awkno/pages/awconnect.json +12 -0
  15. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awdaemons.json +1 -1
  16. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awdecide.json +1 -1
  17. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awdelphi.json +1 -1
  18. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awdesk.json +4 -2
  19. awkno-0.2.8/awkno/pages/awdiscord.json +15 -0
  20. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awdk.json +1 -1
  21. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awembed.json +1 -1
  22. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awfind.json +5 -2
  23. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awflow.json +1 -1
  24. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awfocus.json +1 -1
  25. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awgit.json +1 -1
  26. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awgraph.json +1 -1
  27. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awkno.json +1 -1
  28. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awknowledge.json +1 -1
  29. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awm.json +1 -1
  30. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awmine.json +1 -1
  31. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awnest.json +2 -1
  32. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awnix.json +2 -1
  33. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awnode.json +1 -1
  34. awkno-0.2.8/awkno/pages/awpermit.json +14 -0
  35. awkno-0.2.8/awkno/pages/awplay.json +13 -0
  36. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awpool.json +2 -2
  37. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awpredict.json +1 -1
  38. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awprism.json +1 -1
  39. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awreason.json +1 -1
  40. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awrecurse.json +1 -1
  41. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awrelay.json +1 -1
  42. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awrepl.json +1 -1
  43. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awresearch.json +1 -1
  44. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awrise.json +1 -1
  45. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awrtifact.json +1 -1
  46. awkno-0.2.8/awkno/pages/aws.json +20 -0
  47. awkno-0.2.8/awkno/pages/awscope.json +15 -0
  48. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awscreen.json +1 -1
  49. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awsettings.json +1 -1
  50. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awshare.json +1 -1
  51. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awsprite.json +1 -1
  52. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awstorage.json +9 -2
  53. awkno-0.2.8/awkno/pages/awsuite.json +14 -0
  54. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awtoll.json +1 -1
  55. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awtunnel.json +1 -1
  56. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awvision.json +3 -2
  57. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awvoice.json +1 -1
  58. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awwall.json +1 -1
  59. awkno-0.2.8/awkno/pages/bead-space.json +12 -0
  60. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/browser-companion-graduation.json +1 -1
  61. awkno-0.2.8/awkno/pages/dark-matters-living-world.json +16 -0
  62. awkno-0.2.8/awkno/pages/free-cloud.json +12 -0
  63. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/gobbonet.json +1 -1
  64. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-00.json +1 -1
  65. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-01.json +1 -1
  66. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-02.json +1 -1
  67. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-03.json +1 -1
  68. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-04.json +1 -1
  69. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-05.json +1 -1
  70. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-06.json +1 -1
  71. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-07.json +1 -1
  72. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-08.json +1 -1
  73. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-09.json +1 -1
  74. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide-10.json +3 -2
  75. awkno-0.2.8/awkno/pages/guide-11.json +14 -0
  76. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/guide.json +3 -2
  77. awkno-0.2.8/awkno/pages/law-30.json +11 -0
  78. awkno-0.2.8/awkno/pages/ps5-bridge.json +12 -0
  79. awkno-0.2.8/awkno/pages/salescompel.json +12 -0
  80. awkno-0.2.8/awkno/pages/the-aither-way-claude-code.json +25 -0
  81. awkno-0.2.8/awkno/pages/trust.json +13 -0
  82. awkno-0.2.8/awkno/pages/workspace-bridge.json +15 -0
  83. awkno-0.2.8/awkno/pages/zeroauthy.json +12 -0
  84. {awkno-0.2.6 → awkno-0.2.8}/awkno.egg-info/PKG-INFO +12 -2
  85. {awkno-0.2.6 → awkno-0.2.8}/awkno.egg-info/SOURCES.txt +19 -0
  86. {awkno-0.2.6 → awkno-0.2.8}/pyproject.toml +1 -1
  87. {awkno-0.2.6 → awkno-0.2.8}/tests/test_awkno.py +44 -1
  88. awkno-0.2.6/awkno/pages/bead-space.json +0 -12
  89. awkno-0.2.6/awkno/pages/dark-matters-living-world.json +0 -15
  90. {awkno-0.2.6 → awkno-0.2.8}/LICENSE +0 -0
  91. {awkno-0.2.6 → awkno-0.2.8}/awkno/cli.py +0 -0
  92. {awkno-0.2.6 → awkno-0.2.8}/awkno/corpus.py +0 -0
  93. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/agent-senses.json +0 -0
  94. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/agent-vm.json +0 -0
  95. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/agentic-orchestrator.json +0 -0
  96. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/aitherkvcache.json +0 -0
  97. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/aitheros.json +0 -0
  98. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/aitherzero.json +0 -0
  99. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/avatar-ensemble.json +0 -0
  100. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awasp.json +0 -0
  101. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awbac.json +0 -0
  102. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awbeads.json +0 -0
  103. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awbonsai.json +0 -0
  104. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awcache.json +0 -0
  105. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awclassify.json +0 -0
  106. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awdata.json +0 -0
  107. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awdeck.json +0 -0
  108. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awdit.json +0 -0
  109. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awevolve.json +0 -0
  110. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awforge.json +0 -0
  111. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awgym.json +0 -0
  112. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awiam.json +0 -0
  113. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awiris.json +0 -0
  114. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awkit.json +0 -0
  115. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awlab.json +0 -0
  116. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awlog.json +0 -0
  117. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awmail.json +0 -0
  118. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awmod.json +0 -0
  119. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awnboard.json +0 -0
  120. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awnet.json +0 -0
  121. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awpack.json +0 -0
  122. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awprove.json +0 -0
  123. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awrecover.json +0 -0
  124. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awrena.json +0 -0
  125. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awreport.json +0 -0
  126. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awresume.json +0 -0
  127. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awrouter.json +0 -0
  128. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awrun.json +0 -0
  129. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awsaga.json +0 -0
  130. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awseal.json +0 -0
  131. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awsh.json +0 -0
  132. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awskills.json +0 -0
  133. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awspaces.json +0 -0
  134. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awswarm.json +0 -0
  135. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awsync.json +0 -0
  136. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/awtax.json +0 -0
  137. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/cited-research.json +0 -0
  138. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/creator-stack.json +0 -0
  139. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/dgg-research.json +0 -0
  140. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/gawbbonet.json +0 -0
  141. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/inference-commons.json +0 -0
  142. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-01.json +0 -0
  143. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-02.json +0 -0
  144. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-03.json +0 -0
  145. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-04.json +0 -0
  146. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-05.json +0 -0
  147. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-06.json +0 -0
  148. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-07.json +0 -0
  149. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-08.json +0 -0
  150. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-09.json +0 -0
  151. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-10.json +0 -0
  152. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-11.json +0 -0
  153. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-12.json +0 -0
  154. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-13.json +0 -0
  155. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-14.json +0 -0
  156. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-15.json +0 -0
  157. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-16.json +0 -0
  158. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-17.json +0 -0
  159. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-18.json +0 -0
  160. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-19.json +0 -0
  161. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-20.json +0 -0
  162. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-21.json +0 -0
  163. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-22.json +0 -0
  164. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-23.json +0 -0
  165. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-24.json +0 -0
  166. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-25.json +0 -0
  167. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-26.json +0 -0
  168. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-27.json +0 -0
  169. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-28.json +0 -0
  170. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/law-29.json +0 -0
  171. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/mediaforge.json +0 -0
  172. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/mine-what-you-ran.json +0 -0
  173. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/one-surface.json +0 -0
  174. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/open-scheduler.json +0 -0
  175. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/persona.json +0 -0
  176. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/personal-agent-home.json +0 -0
  177. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/personal-mesh-pool.json +0 -0
  178. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/provenance.json +0 -0
  179. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/retrieval-you-trained.json +0 -0
  180. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/set-and-forget.json +0 -0
  181. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/shared-worktree.json +0 -0
  182. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/the-daily-driver.json +0 -0
  183. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/the-front-door.json +0 -0
  184. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/the-reasoning-loop.json +0 -0
  185. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/the-studio.json +0 -0
  186. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/train-what-you-run.json +0 -0
  187. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/wake-learning-loop.json +0 -0
  188. {awkno-0.2.6 → awkno-0.2.8}/awkno/pages/who-what-did.json +0 -0
  189. {awkno-0.2.6 → awkno-0.2.8}/awkno.egg-info/dependency_links.txt +0 -0
  190. {awkno-0.2.6 → awkno-0.2.8}/awkno.egg-info/entry_points.txt +0 -0
  191. {awkno-0.2.6 → awkno-0.2.8}/awkno.egg-info/requires.txt +0 -0
  192. {awkno-0.2.6 → awkno-0.2.8}/awkno.egg-info/top_level.txt +0 -0
  193. {awkno-0.2.6 → awkno-0.2.8}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: awkno
3
- Version: 0.2.6
3
+ Version: 0.2.8
4
4
  Summary: The man page for the Aither World — every brick, stack and law, in your terminal, offline.
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/Aitherium/awkno
@@ -21,7 +21,7 @@ Dynamic: license-file
21
21
 
22
22
  **[Docs](https://aitherium.github.io/awkno/)** · [Source](https://github.com/Aitherium/awkno) · `pip install awkno` · [The Aither World](https://aitherium.github.io/)
23
23
 
24
- > **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; **awkno** is one of its 65 bricks — each installs on its own, runs offline, and needs no account.
24
+ > **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; **awkno** is one of its 69 bricks — each installs on its own, runs offline, and needs no account.
25
25
  >
26
26
  > **Start here:** Ask it what a brick does and get the answer with your network cable out.
27
27
 
@@ -269,9 +269,12 @@ Each installs on its own, works offline, and needs no account.
269
269
  | [awgit](https://github.com/Aitherium/awgit) | that no one else is editing this file | a lease, refused at commit time if you do not hold it |
270
270
  | [awdelphi](https://github.com/Aitherium/awdelphi) | one agent's confident take on a decision | the round trace, the anonymity, and who dissents |
271
271
  | [awclassify](https://github.com/Aitherium/awclassify) | a filename, a folder, or whoever last touched it | doc_type, visibility, audience and topics, with the evidence lines that decided each |
272
+ | [awdecide](https://github.com/Aitherium/awdecide) | a hosted classifier's probability that never learns whether it was right | the decision, its probability, and the calibration curve from your own resolved outcomes |
272
273
  | [awtoll](https://github.com/Aitherium/awtoll) | that your tooling is saving you context | the measured token cost of each tool call, and what the alternative cost |
273
274
  | [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 |
274
275
  | [awshare](https://github.com/Aitherium/awshare) | that the download is intact | content-addressed bundles, verified on fetch |
276
+ | [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 |
277
+ | [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 |
275
278
  | [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" |
276
279
  | [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 |
277
280
  | [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 |
@@ -281,6 +284,7 @@ Each installs on its own, works offline, and needs no account.
281
284
  | [awrelay](https://github.com/Aitherium/awrelay) | a SaaS in the middle of your agents | findings, alerts and coordination over your own transport |
282
285
  | [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 |
283
286
  | [awmail](https://github.com/Aitherium/awmail) | a mailbox somebody else can read | mail your agents send and receive over your own server |
287
+ | [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 |
284
288
  | [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 |
285
289
  | [awfind](https://github.com/Aitherium/awfind) | one vendor's idea of the web | results from whichever providers you configured |
286
290
  | [awbrowse](https://github.com/Aitherium/awbrowse) | that the page said what you were told | the render, the DOM and the requests it made |
@@ -333,13 +337,16 @@ Every repository here is public. Each publishes an `aither-manifest.json` beside
333
337
  | [awgit](https://github.com/Aitherium/awgit) | Semantic version control on top of git — edit-ops and leases | [docs](https://aitherium.github.io/awgit/) |
334
338
  | [awdelphi](https://github.com/Aitherium/awdelphi) | Anonymous multi-round expert panels — a converged answer with a trace | [docs](https://aitherium.github.io/awdelphi/) |
335
339
  | [awclassify](https://github.com/Aitherium/awclassify) | Classify any document -- what it is, who may read it, who it is for, what it is about | — |
340
+ | [awdecide](https://github.com/Aitherium/awdecide) | One typed-decision contract -- choice / score / bool with a probability -- over a ladder of backends you already run (rules, tiny local models, an LLM's logprobs), fail-closed, with a Brier ledger that resolves every decision against its outcome | — |
336
341
  | [awtoll](https://github.com/Aitherium/awtoll) | What every tool call costs you in context, measured from your own transcripts | [docs](https://aitherium.github.io/awtoll/) |
337
342
  | [awseal](https://github.com/Aitherium/awseal) | Sign an artifact so a stranger can verify it | [docs](https://aitherium.github.io/awseal/) |
338
343
  | [awshare](https://github.com/Aitherium/awshare) | Publish an artifact and fetch it back verified | [docs](https://aitherium.github.io/awshare/) |
344
+ | [awsuite](https://github.com/Aitherium/awsuite) | Your Google Workspace as agent tools, and no write happens without a yes | — |
339
345
  | [awdit](https://github.com/Aitherium/awdit) | An append-only audit trail whose gaps are DETECTABLE | [docs](https://aitherium.github.io/awdit/) |
340
346
  | [awbac](https://github.com/Aitherium/awbac) | Role-based access control that fails closed and explains itself | [docs](https://aitherium.github.io/awbac/) |
341
347
  | [awiam](https://github.com/Aitherium/awiam) | Who is this caller? A directory and session store that fails honestly | [docs](https://aitherium.github.io/awiam/) |
342
348
  | [awtunnel](https://github.com/Aitherium/awtunnel) | Reach a service that has no public address | [docs](https://aitherium.github.io/awtunnel/) |
349
+ | [awpermit](https://github.com/Aitherium/awpermit) | Let an agent through your door with a scope, a spend cap, and someone accountable | — |
343
350
  | [awnest](https://github.com/Aitherium/awnest) | Prove there is a human before you let them into the nest | [docs](https://aitherium.github.io/awnest/) |
344
351
  | [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/) |
345
352
  | [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/) |
@@ -349,6 +356,7 @@ Every repository here is public. Each publishes an `aither-manifest.json` beside
349
356
  | [awrelay](https://github.com/Aitherium/awrelay) | Portable agent messaging — findings, alerts, coordination | [docs](https://aitherium.github.io/awrelay/) |
350
357
  | [awask](https://github.com/Aitherium/awask) | Your agent asks you a question — and acts on your answer | [docs](https://aitherium.github.io/awask/) |
351
358
  | [awmail](https://github.com/Aitherium/awmail) | Give an agent an email address — send, and actually receive | [docs](https://aitherium.github.io/awmail/) |
359
+ | [awdiscord](https://github.com/Aitherium/awdiscord) | Put any agent on Discord as a real bot, with an operator in the loop | — |
352
360
  | [awnet](https://github.com/Aitherium/awnet) | The agentic web — agents host a mesh, and agents join one | [docs](https://aitherium.github.io/awnet/) |
353
361
  | [awswarm](https://github.com/Aitherium/awswarm) | Run one model too big for any single GPU across a pool of small ones | — |
354
362
  | [awfind](https://github.com/Aitherium/awfind) | A portable search client — query, results, ranking | [docs](https://aitherium.github.io/awfind/) |
@@ -388,6 +396,8 @@ Every repository here is public. Each publishes an `aither-manifest.json` beside
388
396
  | [awsettings](https://github.com/Aitherium/awsettings) | Your agent's permissions and config, following you to the next machine | [docs](https://aitherium.github.io/awsettings/) |
389
397
  | [awavatar](https://github.com/Aitherium/awavatar) | One character spec in, a rigged, animated, multi-style avatar pack out | [docs](https://aitherium.github.io/awavatar/) |
390
398
 
399
+ **Built on** [REA (Reverse Engineer Anything)](https://github.com/morluto/rea) · [llama.cpp](https://github.com/ggml-org/llama.cpp) · [vLLM](https://github.com/vllm-project/vllm) · [ComfyUI](https://github.com/comfyanonymous/ComfyUI) · [CentOS Stream](https://www.centos.org/centos-stream/) · [Podman](https://github.com/containers/podman) · [Docker](https://github.com/moby/moby) · [LanceDB](https://github.com/lancedb/lancedb) · [WireGuard](https://www.wireguard.com/) · [FFmpeg](https://ffmpeg.org/) · [Blender + Rigify](https://www.blender.org/) · [headroom](https://github.com/headroomlabs-ai/headroom) · [SANA](https://github.com/NVlabs/Sana) · [Hunyuan3D](https://github.com/Tencent-Hunyuan/Hunyuan3D-2.1) · [repowise](https://github.com/repowise-dev/repowise) · [Playwright](https://github.com/microsoft/playwright) · [Chromium](https://www.chromium.org/) · [Next.js](https://github.com/vercel/next.js) · [React](https://github.com/facebook/react).
400
+
391
401
  <div id="aither-constellation" data-self="awkno"></div>
392
402
  <script src="aither-constellation.js"></script>
393
403
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  **[Docs](https://aitherium.github.io/awkno/)** · [Source](https://github.com/Aitherium/awkno) · `pip install awkno` · [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; **awkno** is one of its 65 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; **awkno** is one of its 69 bricks — each installs on its own, runs offline, and needs no account.
8
8
  >
9
9
  > **Start here:** Ask it what a brick does and get the answer with your network cable out.
10
10
 
@@ -252,9 +252,12 @@ Each installs on its own, works offline, and needs no account.
252
252
  | [awgit](https://github.com/Aitherium/awgit) | that no one else is editing this file | a lease, refused at commit time if you do not hold it |
253
253
  | [awdelphi](https://github.com/Aitherium/awdelphi) | one agent's confident take on a decision | the round trace, the anonymity, and who dissents |
254
254
  | [awclassify](https://github.com/Aitherium/awclassify) | a filename, a folder, or whoever last touched it | doc_type, visibility, audience and topics, with the evidence lines that decided each |
255
+ | [awdecide](https://github.com/Aitherium/awdecide) | a hosted classifier's probability that never learns whether it was right | the decision, its probability, and the calibration curve from your own resolved outcomes |
255
256
  | [awtoll](https://github.com/Aitherium/awtoll) | that your tooling is saving you context | the measured token cost of each tool call, and what the alternative cost |
256
257
  | [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 |
257
258
  | [awshare](https://github.com/Aitherium/awshare) | that the download is intact | content-addressed bundles, verified on fetch |
259
+ | [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 |
260
+ | [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 |
258
261
  | [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" |
259
262
  | [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 |
260
263
  | [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 |
@@ -264,6 +267,7 @@ Each installs on its own, works offline, and needs no account.
264
267
  | [awrelay](https://github.com/Aitherium/awrelay) | a SaaS in the middle of your agents | findings, alerts and coordination over your own transport |
265
268
  | [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 |
266
269
  | [awmail](https://github.com/Aitherium/awmail) | a mailbox somebody else can read | mail your agents send and receive over your own server |
270
+ | [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 |
267
271
  | [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 |
268
272
  | [awfind](https://github.com/Aitherium/awfind) | one vendor's idea of the web | results from whichever providers you configured |
269
273
  | [awbrowse](https://github.com/Aitherium/awbrowse) | that the page said what you were told | the render, the DOM and the requests it made |
@@ -316,13 +320,16 @@ Every repository here is public. Each publishes an `aither-manifest.json` beside
316
320
  | [awgit](https://github.com/Aitherium/awgit) | Semantic version control on top of git — edit-ops and leases | [docs](https://aitherium.github.io/awgit/) |
317
321
  | [awdelphi](https://github.com/Aitherium/awdelphi) | Anonymous multi-round expert panels — a converged answer with a trace | [docs](https://aitherium.github.io/awdelphi/) |
318
322
  | [awclassify](https://github.com/Aitherium/awclassify) | Classify any document -- what it is, who may read it, who it is for, what it is about | — |
323
+ | [awdecide](https://github.com/Aitherium/awdecide) | One typed-decision contract -- choice / score / bool with a probability -- over a ladder of backends you already run (rules, tiny local models, an LLM's logprobs), fail-closed, with a Brier ledger that resolves every decision against its outcome | — |
319
324
  | [awtoll](https://github.com/Aitherium/awtoll) | What every tool call costs you in context, measured from your own transcripts | [docs](https://aitherium.github.io/awtoll/) |
320
325
  | [awseal](https://github.com/Aitherium/awseal) | Sign an artifact so a stranger can verify it | [docs](https://aitherium.github.io/awseal/) |
321
326
  | [awshare](https://github.com/Aitherium/awshare) | Publish an artifact and fetch it back verified | [docs](https://aitherium.github.io/awshare/) |
327
+ | [awsuite](https://github.com/Aitherium/awsuite) | Your Google Workspace as agent tools, and no write happens without a yes | — |
322
328
  | [awdit](https://github.com/Aitherium/awdit) | An append-only audit trail whose gaps are DETECTABLE | [docs](https://aitherium.github.io/awdit/) |
323
329
  | [awbac](https://github.com/Aitherium/awbac) | Role-based access control that fails closed and explains itself | [docs](https://aitherium.github.io/awbac/) |
324
330
  | [awiam](https://github.com/Aitherium/awiam) | Who is this caller? A directory and session store that fails honestly | [docs](https://aitherium.github.io/awiam/) |
325
331
  | [awtunnel](https://github.com/Aitherium/awtunnel) | Reach a service that has no public address | [docs](https://aitherium.github.io/awtunnel/) |
332
+ | [awpermit](https://github.com/Aitherium/awpermit) | Let an agent through your door with a scope, a spend cap, and someone accountable | — |
326
333
  | [awnest](https://github.com/Aitherium/awnest) | Prove there is a human before you let them into the nest | [docs](https://aitherium.github.io/awnest/) |
327
334
  | [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/) |
328
335
  | [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/) |
@@ -332,6 +339,7 @@ Every repository here is public. Each publishes an `aither-manifest.json` beside
332
339
  | [awrelay](https://github.com/Aitherium/awrelay) | Portable agent messaging — findings, alerts, coordination | [docs](https://aitherium.github.io/awrelay/) |
333
340
  | [awask](https://github.com/Aitherium/awask) | Your agent asks you a question — and acts on your answer | [docs](https://aitherium.github.io/awask/) |
334
341
  | [awmail](https://github.com/Aitherium/awmail) | Give an agent an email address — send, and actually receive | [docs](https://aitherium.github.io/awmail/) |
342
+ | [awdiscord](https://github.com/Aitherium/awdiscord) | Put any agent on Discord as a real bot, with an operator in the loop | — |
335
343
  | [awnet](https://github.com/Aitherium/awnet) | The agentic web — agents host a mesh, and agents join one | [docs](https://aitherium.github.io/awnet/) |
336
344
  | [awswarm](https://github.com/Aitherium/awswarm) | Run one model too big for any single GPU across a pool of small ones | — |
337
345
  | [awfind](https://github.com/Aitherium/awfind) | A portable search client — query, results, ranking | [docs](https://aitherium.github.io/awfind/) |
@@ -371,6 +379,8 @@ Every repository here is public. Each publishes an `aither-manifest.json` beside
371
379
  | [awsettings](https://github.com/Aitherium/awsettings) | Your agent's permissions and config, following you to the next machine | [docs](https://aitherium.github.io/awsettings/) |
372
380
  | [awavatar](https://github.com/Aitherium/awavatar) | One character spec in, a rigged, animated, multi-style avatar pack out | [docs](https://aitherium.github.io/awavatar/) |
373
381
 
382
+ **Built on** [REA (Reverse Engineer Anything)](https://github.com/morluto/rea) · [llama.cpp](https://github.com/ggml-org/llama.cpp) · [vLLM](https://github.com/vllm-project/vllm) · [ComfyUI](https://github.com/comfyanonymous/ComfyUI) · [CentOS Stream](https://www.centos.org/centos-stream/) · [Podman](https://github.com/containers/podman) · [Docker](https://github.com/moby/moby) · [LanceDB](https://github.com/lancedb/lancedb) · [WireGuard](https://www.wireguard.com/) · [FFmpeg](https://ffmpeg.org/) · [Blender + Rigify](https://www.blender.org/) · [headroom](https://github.com/headroomlabs-ai/headroom) · [SANA](https://github.com/NVlabs/Sana) · [Hunyuan3D](https://github.com/Tencent-Hunyuan/Hunyuan3D-2.1) · [repowise](https://github.com/repowise-dev/repowise) · [Playwright](https://github.com/microsoft/playwright) · [Chromium](https://www.chromium.org/) · [Next.js](https://github.com/vercel/next.js) · [React](https://github.com/facebook/react).
383
+
374
384
  <div id="aither-constellation" data-self="awkno"></div>
375
385
  <script src="aither-constellation.js"></script>
376
386
 
@@ -15,7 +15,7 @@ from __future__ import annotations
15
15
 
16
16
  from awkno.corpus import AwknoPage, AwknoRegistry, NotFoundError
17
17
 
18
- __version__ = "0.2.6"
18
+ __version__ = "0.2.8"
19
19
 
20
20
  __all__ = [
21
21
  "AwknoRegistry",
@@ -23,7 +23,15 @@ import sys
23
23
  #: package cannot read the registry, and a doctor that guessed at the family
24
24
  #: would go stale in silence. Regenerate to update.
25
25
  SELF = 'awkno'
26
- FAMILY = ['awask', 'awavatar', 'awbac', 'awbrain', 'awbrowse', 'awclassify', 'awdecide', 'awdeck', 'awdelphi', 'awdit', 'awembed', 'awevolve', 'awfind', 'awflow', 'awfocus', 'awgit', 'awgraph', 'awgym', 'awiam', 'awm', 'awmail', 'awmine', 'awnboard', 'awnest', 'awnet', 'awnode', 'awpool', 'awpredict', 'awprism', 'awprove', 'awreason', 'awrecover', 'awrecurse', 'awrelay', 'awrena', 'awrepl', 'awreport', 'awresearch', 'awrise', 'awrouter', 'awrtifact', 'awrun', 'awscreen', 'awseal', 'awsettings', 'awshare', 'awsprite', 'awstorage', 'awswarm', 'awtax', 'awtoll', 'awtunnel', 'awvision', 'awvoice', 'awwall', 'gawbbonet']
26
+ FAMILY = [
27
+ 'awask', 'awavatar', 'awbac', 'awbrain', 'awbrowse', 'awcams', 'awclassify', 'awdecide',
28
+ 'awdeck', 'awdelphi', 'awdit', 'awembed', 'awevolve', 'awfind', 'awflow', 'awfocus', 'awgit',
29
+ 'awgraph', 'awgym', 'awiam', 'awm', 'awmail', 'awmine', 'awnboard', 'awnest', 'awnet', 'awplay',
30
+ 'awpool', 'awpredict', 'awprism', 'awprove', 'awreason', 'awrecover', 'awrecurse', 'awrelay',
31
+ 'awrena', 'awrepl', 'awreport', 'awresearch', 'awrise', 'awrouter', 'awrtifact', 'awrun',
32
+ 'awscope', 'awscreen', 'awseal', 'awsettings', 'awshare', 'awsprite', 'awstorage', 'awsuite',
33
+ 'awswarm', 'awtax', 'awtoll', 'awtunnel', 'awvision', 'awvoice', 'awwall', 'gawbbonet',
34
+ ]
27
35
  PAIRS_WITH = ['awfind', 'awm']
28
36
 
29
37
  #: This brick's OWN config, read out of its source at generation time.
@@ -118,11 +118,22 @@ class AwknoGenerator:
118
118
 
119
119
  # Generate a page per pack ON THE SHELF. Held packs are absent by
120
120
  # design — see _make_pack_page.
121
+ # A pack that shares an id with a registry brick or stack (awnode and awdesk
122
+ # each ship a shelf pack of the same name) must NOT overwrite that page: the
123
+ # registry owns the id, and the overwrite made EC012 report the brick as
124
+ # absent from the corpus after every regen.
125
+ registry_ids = set(pages)
121
126
  if self.shelf_dir.exists():
122
127
  for manifest in sorted(self.shelf_dir.glob("*/pack.yaml")):
123
128
  page = self._make_pack_page(manifest)
124
- if page is not None:
125
- pages[page["topic"].lower()] = page
129
+ if page is None:
130
+ continue
131
+ key = page["topic"].lower()
132
+ if key in registry_ids:
133
+ print(f"[SKIP] pack {key!r}: the id is a registry brick or "
134
+ f"stack; the registry page wins")
135
+ continue
136
+ pages[key] = page
126
137
 
127
138
  # Generate law pages
128
139
  if self.laws_dir.exists():
@@ -305,6 +316,28 @@ class AwknoGenerator:
305
316
  return self._scrub_internal_refs(block)
306
317
  return ""
307
318
 
319
+ def _brick_harness_surfaces(self, brick: dict) -> list[str]:
320
+ """How the brick shows up inside an agent harness, one line per surface.
321
+
322
+ Declared in the registry's `harness_surfaces:`; a skill is DERIVED from
323
+ `.claude/skills/<id>/SKILL.md` -- the same rule gen_ecosystem's hub uses,
324
+ so the offline page and the hub cannot disagree about it.
325
+ """
326
+ rows = [s for s in (brick.get("harness_surfaces") or []) if isinstance(s, dict)]
327
+ if not any(s.get("kind") == "skill" for s in rows):
328
+ skill = self.repo_root.parent / ".claude" / "skills" / str(brick.get("id")) / "SKILL.md"
329
+ if skill.is_file():
330
+ rows.append({"harness": "claude-code", "kind": "skill",
331
+ "run": f"/{brick.get('id')}", "state": "live"})
332
+ out = []
333
+ for s in rows:
334
+ kind = str(s.get("kind", ""))
335
+ if s.get("event"):
336
+ kind += f" ({s['event']})"
337
+ tail = " [planned]" if s.get("state") == "planned" else ""
338
+ out.append(f"{kind:<22} {self._scrub_internal_refs(str(s.get('run', '')))}{tail}")
339
+ return out
340
+
308
341
  @staticmethod
309
342
  def _brick_docs_url(brick: dict) -> str:
310
343
  """The brick's Pages site. Public bricks publish at aitherium.github.io/<id>/."""
@@ -344,6 +377,9 @@ class AwknoGenerator:
344
377
  quick = self._brick_quick_start(brick)
345
378
  if quick:
346
379
  description += "\nQuick start\n" + "\n".join(f" {ln}" for ln in quick.splitlines()) + "\n"
380
+ harness = self._brick_harness_surfaces(brick)
381
+ if harness:
382
+ description += "\nIn Claude Code\n" + "\n".join(f" {h}" for h in harness) + "\n"
347
383
  docs = self._brick_docs_url(brick)
348
384
  if docs:
349
385
  description += f"\nDocs\n{docs}\n"
@@ -0,0 +1,12 @@
1
+ {
2
+ "adopt": "# Only inside a checkout of this repository, or where the addon manifest has\n# been installed to ~/.aither/components. From PyPI alone this raises\n# \"Unknown addon: aitherbrowser\".\npip install awdk\n\n# Start the browser here (port 8132) and\n# register what it finds:\nadk addon enable aitherbrowser\n\n# Confirm it is serving. The image answers TLS when configured and plain\n# HTTP on a bare node, so probe the one you actually started.\ncurl -fsS http://127.0.0.1:8132/health\n\n# Status, and the container's own log when something is wrong:\nadk addon status aitherbrowser\nadk addon logs aitherbrowser",
3
+ "category": "pack",
4
+ "description": "Kind: pack\n\nWhat it does\nRun AitherBrowser on your own machine: an untethered Chromium an agent drives with the pilot_* tools — sessions, screenshots, extraction, taught recipes and saved logins that stay on your disk and never touch anyone else's hardware.\n\nRuntime\nawdk>=3.8.0\n\nTools\n pilot_open\n pilot_navigate\n pilot_observe\n pilot_parse_ui\n pilot_look\n pilot_click\n pilot_fill\n pilot_scroll\n pilot_extract\n pilot_save_login\n pilot_done\n pilot_close",
5
+ "see_also": [
6
+ "awdk",
7
+ "awpack"
8
+ ],
9
+ "status": "preview",
10
+ "synopsis": "Run AitherBrowser on your own machine: an untethered Chromium an agent drives with the pilot_* tools — sessions, screenshots, extraction, taught recipes and saved logins that stay on your disk and never touch anyone else's hardware.",
11
+ "topic": "aitherbrowser"
12
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Install it and ask an agent about the tab you are on.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nYour agent cannot see the page you are looking at, so you paste it in by hand.\n\nInstall\nload unpacked — see the repo\n\nDocs\nhttps://aitherium.github.io/AitherConnect/",
4
+ "description": "Kind: tool\n\nProblem\nYour agent cannot see the page you are looking at, so you paste it in by hand.\n\nInstall\nhttps://chromewebstore.google.com/detail/awconnect/peeojgjhjficedkncdejbfnacooodbak\n\nDocs\nhttps://aitherium.github.io/AitherConnect/",
5
5
  "see_also": [
6
6
  "awdk"
7
7
  ],
@@ -8,7 +8,8 @@
8
8
  "awmail",
9
9
  "awsh",
10
10
  "awnest",
11
- "awrise"
11
+ "awrise",
12
+ "awdiscord"
12
13
  ],
13
14
  "status": "public",
14
15
  "synopsis": "Your agent asks you a question",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Validate one character_spec.json and one character_pack/ against their schemas and refuse the pack if any file's hash, licence or rig audit is missing.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nA generated 3D character is five artifacts from five tools (mesh, rig, clips, VRM, style renders) with no shared contract, so every host re-derives what it may load, and the bakes end up.gitignored with no canonical home -- measured 2026-09-05 on the CoC engine, where every Anny body and every clip pack is absent from disk while the code that drives them is committed.\n\nInstall\npip install awavatar\n\nCommands\n awavatar\n\nQuick start\n pip install awavatar\n awavatar validate-spec character_spec.json # schema_version-routed validation\n awavatar validate-pack./character_pack/ # hashes, licences, rig audit, VRM bones\n awavatar submit character_spec.json --server http://127.0.0.1:8200 # any media-forge-shaped server\n\nDocs\nhttps://aitherium.github.io/awavatar/",
4
+ "description": "Kind: tool\n\nProblem\nA generated 3D character is five artifacts from five tools (mesh, rig, clips, VRM, style renders) with no shared contract, so every host re-derives what it may load, and the bakes end up.gitignored with no canonical home -- measured 2026-09-05 on the CoC engine, where every Anny body and every clip pack is absent from disk while the code that drives them is committed.\n\nInstall\npip install awavatar\n\nCommands\n awavatar\n\nQuick start\n pip install awavatar\n awavatar validate-spec character_spec.json # schema_version-routed validation\n awavatar validate-pack./character_pack/ # hashes, licences, rig audit, VRM bones\n awavatar validate-presence roster.json # declared per-agent voice + desk character\n awavatar apply-presence character_spec.json --roster roster.json # default a missing voice\n awavatar submit character_spec.json --server http://127.0.0.1:8200 # any media-forge-shaped server\n\nDocs\nhttps://aitherium.github.io/awavatar/",
5
5
  "see_also": [
6
6
  "awrtifact",
7
7
  "awdk",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Point it at a folder of notes or sessions; ask a question your context never held.",
3
3
  "category": "brick",
4
- "description": "Kind: runtime\n\nProblem\nEvery AI memory system sells you a black box: sessions vanish into a vendor cloud, and \"it remembers\" means \"the vendor's model was prompted with a blob\". Memory should be files you can read, claims you can check against the session or file that produced them, and retrieval that never dumps your whole history into a prompt.\n\nInstall\npip install awbrain\n\nCommands\n awbrain\n\nQuick start\n pip install awbrain",
4
+ "description": "Kind: runtime\n\nProblem\nEvery AI memory system sells you a black box: sessions vanish into a vendor cloud, and \"it remembers\" means \"the vendor's model was prompted with a blob\". Memory should be files you can read, claims you can check against the session or file that produced them, and retrieval that never dumps your whole history into a prompt.\n\nInstall\npip install awbrain\n\nCommands\n awbrain\n\nQuick start\n pip install awbrain\n\nIn Claude Code\n skill /awbrain",
5
5
  "see_also": [
6
6
  "awknowledge",
7
7
  "awm",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Drive one page and get back what is on it in a form worth reasoning about.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nHanding an agent a screenshot makes it read a picture of text; handing it raw DOM makes it read a megabyte of markup. Neither of those is the page.\n\nInstall\npip install awbrowse\n\nCommands\n awbrowse\n\nQuick start\n pip install awbrowse\n\nDocs\nhttps://aitherium.github.io/awbrowse/",
4
+ "description": "Kind: tool\n\nProblem\nHanding an agent a screenshot makes it read a picture of text; handing it raw DOM makes it read a megabyte of markup. Neither of those is the page.\n\nInstall\npip install awbrowse\n\nCommands\n awbrowse\n\nQuick start\n pip install awbrowse\n\nIn Claude Code\n skill /awbrowse\n\nDocs\nhttps://aitherium.github.io/awbrowse/",
5
5
  "see_also": [
6
6
  "awdk",
7
7
  "awfind",
@@ -0,0 +1,12 @@
1
+ {
2
+ "adopt": "Point it at one RTSP camera, enable it, and read back a one-line description of each event.",
3
+ "category": "brick",
4
+ "description": "Kind: tool\n\nProblem\nHome cameras record to someone else's servers, keep footage on their terms, and tell you \"motion detected\" forty times a day without saying what moved.\n\nInstall\nbuilds in-tree -- not on PyPI yet; `pip install awcams` 404s today\n\nCommands\n awcams\n\nQuick start\n pip install -e. # recording, events, API\n pip install -e \".[vision]\" # + one-line summaries through a local vision model",
5
+ "see_also": [
6
+ "awvision",
7
+ "awnode"
8
+ ],
9
+ "status": "unpublished",
10
+ "synopsis": "Private camera recording and one-line event summaries, on storage you own.",
11
+ "topic": "awcams"
12
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "adopt": "Describe one capability in one file and get the same name, arguments and JSON back from CLI, Python, MCP and relay.",
3
+ "category": "brick",
4
+ "description": "Kind: tool\n\nProblem\nA tool that ships a CLI, a Python API and an MCP server ends up with three names, three argument shapes and three result formats, and nothing tells you which of them still work.\n\nInstall\nnot yet published; builds in-tree\n\nCommands\n awcap",
5
+ "see_also": [
6
+ "awdk",
7
+ "awnode",
8
+ "awrelay",
9
+ "awm",
10
+ "awflow",
11
+ "awgit"
12
+ ],
13
+ "status": "planned",
14
+ "synopsis": "Describe a capability once; call it the same way from CLI, Python, MCP and relay.",
15
+ "topic": "awcap"
16
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "adopt": "# Chrome Web Store:\n# https://chromewebstore.google.com/detail/awconnect/peeojgjhjficedkncdejbfnacooodbak\n#\n# Source (MIT): https://github.com/Aitherium/AitherConnect\n# Load unpacked from a checkout of `awconnect/` if you want your own build.\n#\n# Start a local daemon BEFORE expecting it to pair — `awnode mcp`, or the awsh\n# harness on :8362. With no daemon listening it reports\n# \"No awdk daemon answered ...; using Cloud\"\n# and the page goes through the cloud instead of your machine. That fallback\n# is deliberate; it is also the thing to check first when it \"feels remote\".",
3
+ "category": "pack",
4
+ "description": "Kind: pack\n\nWhat it does\nAdd the awconnect browser extension: it hands an agent the page you are looking at, pairs over loopback to a local daemon, and falls back to the cloud only when no daemon answers.\n\nRuntime\nawdk>=3.8.0",
5
+ "see_also": [
6
+ "awdk",
7
+ "awpack"
8
+ ],
9
+ "status": "preview",
10
+ "synopsis": "Add the awconnect browser extension: it hands an agent the page you are looking at, pairs over loopback to a local daemon, and falls back to the cloud only when no daemon answers.",
11
+ "topic": "awconnect"
12
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Run it on a box with no Python and curl its /health.",
3
3
  "category": "brick",
4
- "description": "Kind: runtime\n\nProblem\nShipping the agent loop and the shell harness means shipping a Python environment, and freezing the whole CLI to get them drags in the entire ML stack: 694 MiB and 164+ PyInstaller hooks to obtain two subcommands.\n\nInstall\nsee the repo — built by awdk/packaging/build_executable.py --narrow\n\nCommands\n adk\n adk-bug\n adk-py\n adk-serve\n adk-shell\n adk-workspace\n aither-adk\n awdk\n\nQuick start\n pip install awdk\n adk quickstart # auto-detect hardware, set up inference\n adk init my-agent && cd my-agent && python agent.py",
4
+ "description": "Kind: runtime\n\nProblem\nShipping the agent loop and the shell harness means shipping a Python environment, and freezing the whole CLI to get them drags in the entire ML stack: 694 MiB and 164+ PyInstaller hooks to obtain two subcommands.\n\nInstall\nsee the repo — built by awdk/packaging/build_executable.py --narrow\n\nCommands\n adk\n adk-awdelegate\n adk-bug\n adk-py\n adk-serve\n adk-shell\n adk-workspace\n aither-adk\n aither-hearth\n awdk\n\nQuick start\n pip install awdk\n adk quickstart # auto-detect hardware, set up inference\n adk init my-agent && cd my-agent && python agent.py",
5
5
  "see_also": [
6
6
  "awdk",
7
7
  "awnode",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Ask one typed question of one state and read back a decision, a probability, and decided=False when nothing earned it.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nSoftware makes the same bounded decision millions of times and asks a text model each time, then parses prose. Hosted \"decision models\" fix the shape but send the program state off-box, emit a probability that is never resolved against what happened, and cannot say what happens next if you act on it. A decision is a function; the loop it sits in is the product.\n\nInstall\npip install awdecide\n\nCommands\n awdecide\n\nQuick start\n ## The loop: a decision you resolved is never paid for twice\n \n `Ladder` answers a question. `Loop` remembers how the answer turned out. Ask, act,\n resolve -- the next identical decision is answered from that evidence with no model\n call, and an answer that was resolved wrong is never given again.\n \n Add it to the agent harness you already use:",
4
+ "description": "Kind: tool\n\nProblem\nSoftware makes the same bounded decision millions of times and asks a text model each time, then parses prose. Hosted \"decision models\" fix the shape but send the program state off-box, emit a probability that is never resolved against what happened, and cannot say what happens next if you act on it. A decision is a function; the loop it sits in is the product.\n\nInstall\npip install awdecide\n\nCommands\n awdecide\n\nQuick start\n ## The loop: a decision you resolved is never paid for twice\n \n `Ladder` answers a question. `Loop` remembers how the answer turned out. Ask, act,\n resolve -- the next identical decision is answered from that evidence with no model\n call, and an answer that was resolved wrong is never given again.\n \n Add it to the agent harness you already use:\n\nIn Claude Code\n mcp awdecide mcp",
5
5
  "see_also": [
6
6
  "awclassify",
7
7
  "awpredict",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Run a multi-round anonymous expert panel on a question and get a converged answer with a trace.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nA single expert opinion is one opinion; a panel that reads each other's names converges on the loudest voice, not the best argument. Delphi panels need anonymous rounds, aggregate feedback, and an honest stop rule.\n\nInstall\npip install awdelphi\n\nCommands\n awdelphi\n\nQuick start\n pip install awdelphi # the CLI + engine\n pip install \"awdelphi[mcp]\" # + the MCP server for coding agents\n \n awdelphi run \"Should the fleet pin the model pool to the DGX Spark?\" \\\n --experts demiurge,athena,hydra --context \"...\" --arena\n awdelphi status <run_id>\n awdelphi show <run_id> --json\n\nDocs\nhttps://aitherium.github.io/awdelphi/",
4
+ "description": "Kind: tool\n\nProblem\nA single expert opinion is one opinion; a panel that reads each other's names converges on the loudest voice, not the best argument. Delphi panels need anonymous rounds, aggregate feedback, and an honest stop rule.\n\nInstall\npip install awdelphi\n\nCommands\n awdelphi\n\nQuick start\n pip install awdelphi # the CLI + engine\n pip install \"awdelphi[mcp]\" # + the MCP server for coding agents\n \n awdelphi run \"Should the fleet pin the model pool to the DGX Spark?\" \\\n --experts demiurge,athena,hydra --context \"...\" --arena\n awdelphi status <run_id>\n awdelphi show <run_id> --json\n\nIn Claude Code\n skill /awdelphi\n\nDocs\nhttps://aitherium.github.io/awdelphi/",
5
5
  "see_also": [
6
6
  "awrelay",
7
7
  "awdk"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Run it, and the next decision card an agent raises pops on your desktop instead of scrolling past in a log.",
3
3
  "category": "brick",
4
- "description": "Kind: runtime\n\nProblem\nEvery surface an agent has on a laptop lives in a browser tab that can be closed, minimized or forgotten. The desk is the one that stays: an always-on presence that can interrupt you with a decision card, embody an agent as an avatar, and hold the Living Desktop over your real desktop.\n\nInstall\nsee the repo -- Electron app (npm install && npx electron .)\n\nQuick start\n npm install\n npm run demo\n\nDocs\nhttps://aitherium.github.io/awdesk/",
4
+ "description": "Kind: runtime\n\nProblem\nEvery surface an agent has on a laptop lives in a browser tab that can be closed, minimized or forgotten. The desk is the one that stays: an always-on presence that can interrupt you with a decision card, embody an agent as an avatar, and hold the Living Desktop over your real desktop. It also replaces the Windows utilities, each synced to AitherOS Online and reachable by agents through awsh, adk and AwNode under one command id: a snipping tool (PrintScreen), clipboard sync, a screen recorder (Shift+PrintScreen), a System window for processes, ports and connections, a File Explorer (Win+E, opt-in), Search this PC (Alt+Space) and a one-click public URL for a local port.\n\nInstall\nsee the repo -- Electron app (npm install && npx electron .)\n\nQuick start\n npm install\n npm run demo\n\nDocs\nhttps://aitherium.github.io/awdesk/",
5
5
  "see_also": [
6
6
  "awdk",
7
7
  "awsh",
@@ -11,7 +11,9 @@
11
11
  "awavatar",
12
12
  "AitherConnect",
13
13
  "awdaemons",
14
- "awsettings"
14
+ "awsettings",
15
+ "awnode",
16
+ "awtunnel"
15
17
  ],
16
18
  "status": "public",
17
19
  "synopsis": "Aither World Desk -- the desktop body of AitherOS Online: tray, avatars, decision cards, the Living Desktop as an overlay.",
@@ -0,0 +1,15 @@
1
+ {
2
+ "adopt": "Put an agent you already run into your Discord server as a bot with /ask.",
3
+ "category": "brick",
4
+ "description": "Kind: tool\n\nProblem\nPutting an agent in a Discord server usually means one of two bad shapes: a script driving a person's account, which breaks Discord's terms and gets the account banned, or a bot that answers anyone as fast as they can type and acts on its own judgement. What is missing is the boring middle: an install link that asks for almost nothing, per-user and per-server limits, and a way for the agent to ask a human before it does something, with an answer it can trust.\n\nInstall\npip install git+https://github.com/Aitherium/awdiscord.git\n\nCommands\n awdiscord\n\nQuick start\n pip install \"awdiscord[gateway]\"\n awdiscord setup # paste the bot token once; it does the rest\n awdiscord run",
5
+ "see_also": [
6
+ "awdk",
7
+ "awask",
8
+ "awrelay",
9
+ "awmail",
10
+ "awiam"
11
+ ],
12
+ "status": "no-pages",
13
+ "synopsis": "Put any agent on Discord as a real bot, with an operator in the loop.",
14
+ "topic": "awdiscord"
15
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Point it at a backend you already pay for and run one agent loop.",
3
3
  "category": "brick",
4
- "description": "Kind: runtime\n\nProblem\nRunning one agent is easy and running fifty is a different job: budgets, retries, which model, whose machine. Most frameworks make you adopt their whole world to find out.\n\nInstall\npip install awdk\n\nCommands\n adk\n adk-bug\n adk-py\n adk-serve\n adk-shell\n adk-workspace\n aither-adk\n awdk\n\nQuick start\n pip install awdk\n adk quickstart # auto-detect hardware, set up inference\n adk init my-agent && cd my-agent && python agent.py\n\nDocs\nhttps://aitherium.github.io/awdk/",
4
+ "description": "Kind: runtime\n\nProblem\nRunning one agent is easy and running fifty is a different job: budgets, retries, which model, whose machine. Most frameworks make you adopt their whole world to find out.\n\nInstall\npip install awdk\n\nCommands\n adk\n adk-awdelegate\n adk-bug\n adk-py\n adk-serve\n adk-shell\n adk-workspace\n aither-adk\n aither-hearth\n awdk\n\nQuick start\n pip install awdk\n adk quickstart # auto-detect hardware, set up inference\n adk init my-agent && cd my-agent && python agent.py\n\nIn Claude Code\n plugin awsh@awsh\n command adk claude setup\n command adk claude doctor\n mcp python -m adk.harnesses.mcp_stdio\n skill /awdk\n\nDocs\nhttps://aitherium.github.io/awdk/",
5
5
  "see_also": [
6
6
  "aitheros",
7
7
  "awskills",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Point it at one repo and get a 0.6B embedder that ranks your directories better than the 7B one it learned from, with the eval that proves it.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nEvery agent stack searches your code with an embedding model trained on someone else's. It is right about two thirds of the time on a corpus it never saw, and nothing in the stack measures that. Distilling a small student on your own corpus -- the big model's margins plus your labels -- beats the big model, and the eval that proves it is the part people skip.\n\nInstall\npip install awembed\n\nCommands\n awembed\n\nQuick start\n pip install awembed # the student side: torch + transformers\n pip install \"awembed[teacher]\" # also the teacher server (fastapi, einops,...)\n\nDocs\nhttps://aitherium.github.io/awembed/",
4
+ "description": "Kind: tool\n\nProblem\nEvery agent stack searches your code with an embedding model trained on someone else's. It is right about two thirds of the time on a corpus it never saw, and nothing in the stack measures that. Distilling a small student on your own corpus -- the big model's margins plus your labels -- beats the big model, and the eval that proves it is the part people skip.\n\nInstall\npip install awembed\n\nCommands\n awembed\n\nQuick start\n pip install awembed # the student side: torch + transformers\n pip install \"awembed[teacher]\" # also the teacher server (fastapi, einops,...)\n\nIn Claude Code\n skill /awembed\n\nDocs\nhttps://aitherium.github.io/awembed/",
5
5
  "see_also": [
6
6
  "awdk",
7
7
  "awgraph",
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "adopt": "Ask one question and get ranked answers back instead of a page of results.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nAn agent with no search guesses from training data; an agent handed a raw web API gets ten blue links and burns its context reading them.\n\nInstall\npip install awfind\n\nCommands\n awfind\n\nQuick start\n pip install awfind\n\nDocs\nhttps://aitherium.github.io/awfind/",
4
+ "description": "Kind: tool\n\nProblem\nAn agent with no search guesses from training data; an agent handed a raw web API gets ten blue links and burns its context reading them.\n\nInstall\npip install awfind\n\nCommands\n awfind\n\nQuick start\n pip install awfind\n\nIn Claude Code\n mcp awfind mcp\n\nDocs\nhttps://aitherium.github.io/awfind/",
5
5
  "see_also": [
6
6
  "awdk",
7
7
  "awbrowse",
8
8
  "awsh",
9
- "awembed"
9
+ "awembed",
10
+ "awgraph",
11
+ "awm",
12
+ "awgit"
10
13
  ],
11
14
  "status": "public",
12
15
  "synopsis": "A portable search client",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Chain parallel and sequential agent calls with deterministic ordering, a persistent journal, and hard budget enforcement. Replay from the journal at any breakpoint.",
3
3
  "category": "brick",
4
- "description": "Kind: runtime\n\nProblem\nWorkflows need deterministic orchestration with journaled execution so every call, every branch decision, and every result can be captured and replayed from any point. Agents running a workflow need to see the same progression whether they are in the middle of a live run or resuming from an earlier checkpoint.\n\nInstall\npip install aitherium-awflow\n\nCommands\n awflow\n\nQuick start\n python -m AitherOS.lib.orchestration.awflow --self-test\n\nDocs\nhttps://aitherium.github.io/awflow/",
4
+ "description": "Kind: runtime\n\nProblem\nWorkflows need deterministic orchestration with journaled execution so every call, every branch decision, and every result can be captured and replayed from any point. Agents running a workflow need to see the same progression whether they are in the middle of a live run or resuming from an earlier checkpoint.\n\nInstall\npip install aitherium-awflow\n\nCommands\n awflow\n\nQuick start\n python -m AitherOS.lib.orchestration.awflow --self-test\n\nIn Claude Code\n skill /awflow\n\nDocs\nhttps://aitherium.github.io/awflow/",
5
5
  "see_also": [
6
6
  "awdk",
7
7
  "awrun",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "List your live sessions, search their transcripts, and focus or message the one you want.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nEvery session is a tab; nothing answers \"which session is doing what, where did I say X, how do I tell that session to do Y\" without hunting.\n\nInstall\npip install awfocus\n\nCommands\n awfocus\n\nQuick start\n awfocus # list what is running right now\n awfocus what did we decide about the tunnel\n # search every transcript, ranked\n awfocus open 8d191d35 # open that session in a terminal tab\n awfocus ask 8d191d35 \"ship it\"\n # deliver a message into the session\n awfocus remote # sessions seen on the relay (other machines)\n awfocus --self-test # prove the contract, offline\n\nDocs\nhttps://aitherium.github.io/awfocus/",
4
+ "description": "Kind: tool\n\nProblem\nEvery session is a tab; nothing answers \"which session is doing what, where did I say X, how do I tell that session to do Y\" without hunting.\n\nInstall\npip install awfocus\n\nCommands\n awfocus\n\nQuick start\n awfocus # list what is running right now\n awfocus what did we decide about the tunnel\n # search every transcript, ranked\n awfocus open 8d191d35 # open that session in a terminal tab\n awfocus ask 8d191d35 \"ship it\"\n # deliver a message into the session\n awfocus remote # sessions seen on the relay (other machines)\n awfocus --self-test # prove the contract, offline\n\nIn Claude Code\n mcp awfocus mcp\n\nDocs\nhttps://aitherium.github.io/awfocus/",
5
5
  "see_also": [
6
6
  "awrelay",
7
7
  "awgit",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Take a lease on a file before you edit it in a shared checkout.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nSeveral agents editing one worktree silently sweep each other's work; a diff tells you WHAT changed but not who meant it or whether they were mid-edit.\n\nInstall\npip install awgit\n\nCommands\n awgit\n\nQuick start\n pip install awgit\n awgit init # verify the actor, install the capture hooks\n\nDocs\nhttps://aitherium.github.io/awgit/",
4
+ "description": "Kind: tool\n\nProblem\nSeveral agents editing one worktree silently sweep each other's work; a diff tells you WHAT changed but not who meant it or whether they were mid-edit.\n\nInstall\npip install awgit\n\nCommands\n awgit\n\nQuick start\n pip install awgit\n awgit init # verify the actor, install the capture hooks\n\nIn Claude Code\n mcp awgit mcp\n\nDocs\nhttps://aitherium.github.io/awgit/",
5
5
  "see_also": [
6
6
  "awgraph",
7
7
  "awrelay"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Index one repo and ask it who calls one function.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\n\"Who calls this?\" answered by grep is a guess. Agents burn enormous context re-reading files to rebuild a graph the parser already knows.\n\nInstall\npip install awgraph\n\nCommands\n awgraph\n\nQuick start\n pip install awgraph\n\nDocs\nhttps://aitherium.github.io/awgraph/",
4
+ "description": "Kind: tool\n\nProblem\n\"Who calls this?\" answered by grep is a guess. Agents burn enormous context re-reading files to rebuild a graph the parser already knows.\n\nInstall\npip install awgraph\n\nCommands\n awgraph\n\nQuick start\n pip install awgraph\n\nIn Claude Code\n mcp awgraph mcp\n\nDocs\nhttps://aitherium.github.io/awgraph/",
5
5
  "see_also": [
6
6
  "awm",
7
7
  "awdk",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Ask it what a brick does and get the answer with your network cable out.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nThe family is only useful if you can find it. Its registry lives in one yaml in one monorepo and the laws live in a public skills pack, so a stranger with a terminal and no browser can reach neither — which makes \"what exists and what should this talk to\" a question asked of a person instead of a tool.\n\nInstall\npip install awkno\n\nCommands\n awkno\n\nQuick start\n pip install awkno\n\nDocs\nhttps://aitherium.github.io/awkno/",
4
+ "description": "Kind: tool\n\nProblem\nThe family is only useful if you can find it. Its registry lives in one yaml in one monorepo and the laws live in a public skills pack, so a stranger with a terminal and no browser can reach neither — which makes \"what exists and what should this talk to\" a question asked of a person instead of a tool.\n\nInstall\npip install awkno\n\nCommands\n awkno\n\nQuick start\n pip install awkno\n\nIn Claude Code\n skill /awkno\n\nDocs\nhttps://aitherium.github.io/awkno/",
5
5
  "see_also": [
6
6
  "awskills",
7
7
  "awfind",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Read one law and apply it to the next thing you ship.",
3
3
  "category": "brick",
4
- "description": "Kind: corpus\n\nProblem\nEveryone learns the same lessons about agent-written code the same expensive way, and writes none of them down where the next person looks.\n\nInstall\nread it — https://aitherium.github.io/awknowledge/\n\nQuick start\n something breaks\n → you fix it\n → you ask: could a check have caught this?\n → if yes, THE CHECK IS THE WORK. Write it, watch it fail, wire it somewhere\n unattended. Do not write a ticket.\n\nDocs\nhttps://aitherium.github.io/awknowledge/",
4
+ "description": "Kind: corpus\n\nProblem\nEveryone learns the same lessons about agent-written code the same expensive way, and writes none of them down where the next person looks.\n\nInstall\nread it — https://aitherium.github.io/awknowledge/\n\nQuick start\n something breaks\n → you fix it\n → you ask: could a check have caught this?\n → if yes, THE CHECK IS THE WORK. Write it, watch it fail, wire it somewhere\n unattended. Do not write a ticket.\n\nIn Claude Code\n skill /awknowledge\n\nDocs\nhttps://aitherium.github.io/awknowledge/",
5
5
  "see_also": [
6
6
  "awskills",
7
7
  "awkno",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Give one agent a memory scoped to one project and watch it stop re-asking.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nAn agent that forgets everything between sessions re-derives the same facts forever; one that remembers everything globally leaks context across projects.\n\nInstall\npip install awm\n\nCommands\n awm\n\nQuick start\n pip install awm\n \n awm remember --scope acme:alice:orchestrator --key recipe --value \"rank 16, lr 2e-5\"\n awm recall --scope acme:alice:orchestrator\n\nDocs\nhttps://aitherium.github.io/awm/",
4
+ "description": "Kind: tool\n\nProblem\nAn agent that forgets everything between sessions re-derives the same facts forever; one that remembers everything globally leaks context across projects.\n\nInstall\npip install awm\n\nCommands\n awm\n\nQuick start\n pip install awm\n \n awm remember --scope acme:alice:orchestrator --key recipe --value \"rank 16, lr 2e-5\"\n awm recall --scope acme:alice:orchestrator\n\nIn Claude Code\n mcp awm mcp\n hook (SessionStart) awm recall --claude-hook\n\nDocs\nhttps://aitherium.github.io/awm/",
5
5
  "see_also": [
6
6
  "awpredict",
7
7
  "awdk",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "adopt": "Point it at one transcript directory and read back what those sessions learned, with the line each lesson came from.",
3
3
  "category": "brick",
4
- "description": "Kind: tool\n\nProblem\nEvery agent session leaves a transcript, and almost every transcript is thrown away. The correction a human made at turn 40, the retry that finally worked, the six-command sequence three sessions each re-derived -- all of it sits in JSONL nobody reads, while the next session starts from zero.\n\nInstall\npip install git+https://github.com/Aitherium/awmine.git\n\nCommands\n awmine\n\nQuick start\n pip install awmine",
4
+ "description": "Kind: tool\n\nProblem\nEvery agent session leaves a transcript, and almost every transcript is thrown away. The correction a human made at turn 40, the retry that finally worked, the six-command sequence three sessions each re-derived -- all of it sits in JSONL nobody reads, while the next session starts from zero.\n\nInstall\npip install git+https://github.com/Aitherium/awmine.git\n\nCommands\n awmine\n\nQuick start\n pip install awmine\n\nIn Claude Code\n skill /awmine",
5
5
  "see_also": [
6
6
  "awtoll",
7
7
  "awm",
@@ -11,7 +11,8 @@
11
11
  "awgit",
12
12
  "awnet",
13
13
  "awtunnel",
14
- "awdk"
14
+ "awdk",
15
+ "awpermit"
15
16
  ],
16
17
  "status": "public",
17
18
  "synopsis": "Prove there is a human before you let them into the nest.",