awkno 0.2.0__py3-none-any.whl
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.
- awkno/__init__.py +25 -0
- awkno/_doctor.py +114 -0
- awkno/cli.py +497 -0
- awkno/corpus.py +216 -0
- awkno/generate.py +444 -0
- awkno/pages/agent-senses.json +13 -0
- awkno/pages/agent-vm.json +14 -0
- awkno/pages/aitherconnect.json +11 -0
- awkno/pages/aitherkvcache.json +11 -0
- awkno/pages/aitherzero.json +11 -0
- awkno/pages/awarena.json +14 -0
- awkno/pages/awask.json +15 -0
- awkno/pages/awbac.json +11 -0
- awkno/pages/awbrowse.json +13 -0
- awkno/pages/awdit.json +12 -0
- awkno/pages/awdk.json +16 -0
- awkno/pages/awevolve.json +15 -0
- awkno/pages/awfind.json +13 -0
- awkno/pages/awgit.json +12 -0
- awkno/pages/awgraph.json +12 -0
- awkno/pages/awiam.json +12 -0
- awkno/pages/awkit.json +13 -0
- awkno/pages/awkno.json +13 -0
- awkno/pages/awknowledge.json +12 -0
- awkno/pages/awm.json +13 -0
- awkno/pages/awmail.json +18 -0
- awkno/pages/awnboard.json +20 -0
- awkno/pages/awnest.json +19 -0
- awkno/pages/awnet.json +13 -0
- awkno/pages/awnix.json +20 -0
- awkno/pages/awnode.json +12 -0
- awkno/pages/awpack.json +13 -0
- awkno/pages/awpredict.json +11 -0
- awkno/pages/awprism.json +14 -0
- awkno/pages/awreason.json +14 -0
- awkno/pages/awrecover.json +13 -0
- awkno/pages/awrecurse.json +13 -0
- awkno/pages/awrelay.json +12 -0
- awkno/pages/awrepl.json +13 -0
- awkno/pages/awresearch.json +14 -0
- awkno/pages/awrun.json +13 -0
- awkno/pages/awseal.json +12 -0
- awkno/pages/awsh.json +13 -0
- awkno/pages/awshare.json +12 -0
- awkno/pages/awskills.json +12 -0
- awkno/pages/awsync.json +16 -0
- awkno/pages/awtunnel.json +12 -0
- awkno/pages/cited-research.json +14 -0
- awkno/pages/gobbonet-agentic.json +14 -0
- awkno/pages/guide-00.json +16 -0
- awkno/pages/guide-01.json +14 -0
- awkno/pages/guide-02.json +14 -0
- awkno/pages/guide-03.json +14 -0
- awkno/pages/guide-04.json +15 -0
- awkno/pages/guide-05.json +16 -0
- awkno/pages/guide-06.json +15 -0
- awkno/pages/guide-07.json +15 -0
- awkno/pages/guide-08.json +17 -0
- awkno/pages/guide-09.json +13 -0
- awkno/pages/guide.json +22 -0
- awkno/pages/law-01.json +11 -0
- awkno/pages/law-02.json +11 -0
- awkno/pages/law-03.json +11 -0
- awkno/pages/law-04.json +11 -0
- awkno/pages/law-05.json +11 -0
- awkno/pages/law-06.json +11 -0
- awkno/pages/law-07.json +11 -0
- awkno/pages/law-08.json +11 -0
- awkno/pages/law-09.json +11 -0
- awkno/pages/law-10.json +11 -0
- awkno/pages/law-11.json +11 -0
- awkno/pages/law-12.json +11 -0
- awkno/pages/law-13.json +11 -0
- awkno/pages/law-14.json +11 -0
- awkno/pages/law-15.json +11 -0
- awkno/pages/law-16.json +11 -0
- awkno/pages/law-17.json +11 -0
- awkno/pages/law-18.json +11 -0
- awkno/pages/law-19.json +11 -0
- awkno/pages/one-surface.json +15 -0
- awkno/pages/provenance.json +14 -0
- awkno/pages/shared-worktree.json +14 -0
- awkno/pages/the-front-door.json +15 -0
- awkno/pages/the-reasoning-loop.json +14 -0
- awkno/pages/who-what-did.json +13 -0
- awkno-0.2.0.dist-info/METADATA +321 -0
- awkno-0.2.0.dist-info/RECORD +91 -0
- awkno-0.2.0.dist-info/WHEEL +5 -0
- awkno-0.2.0.dist-info/entry_points.txt +2 -0
- awkno-0.2.0.dist-info/licenses/LICENSE +118 -0
- awkno-0.2.0.dist-info/top_level.txt +1 -0
awkno/pages/law-18.json
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adopt": null,
|
|
3
|
+
"body": "*Part V · Trust*\n\n**Fires when:** any code decides *who* someone is, or *what* they may reach.\n\n## The law\n\nDerive identity and scope from the **authenticated** caller — the verified token,\nthe session, the middleware-established context. Then check the request's claimed\ntarget against that.\n\nNever from the request body. Never from a metadata field. Never from a `source=`\nstring, a header the client can set, or an id extracted from the messages.\n\n```python\n# wrong - the caller chose this value\ntenant = payload[\"metadata\"][\"tenant_id\"]\n\n# right - the caller proved this value\ncaller = get_current_caller()\nif payload[\"tenant_id\"] != caller.tenant_id and not caller.is_admin:\n raise Forbidden\n```\n\n## The variant nobody expects: the fabricated caller\n\nMany frameworks synthesise a default context when none is set — a \"system\" or\n\"platform\" caller — so internal code can run without a session. If any gate then\nreads:\n\n```python\nif caller.type == \"platform\":\n return True\n```\n\n…every unauthenticated request that reaches that code **without passing through\nauth middleware** is trusted. The absence of a caller has been converted into\nmaximum privilege.\n\nExempt only *genuine* privilege — a real admin role on a real verified identity.\nAn absent or anonymous caller must deny.\n\n## Content-addressed keys are an authorization decision too\n\nA cache key, a content hash or a derived id **is** a scope decision:\n\n- Key tenant-first — `(tenant, workspace, hash)` — so an identical hash in two\n tenants can never collide into a shared read. Prove it with a live cross-tenant\n lookup that returns nothing.\n- A hash computed from untrusted input can be *forged*. Gate the **use** of the\n key on authenticated ownership, not on possession of the key.\n\n## Where the boundary really is\n\nTwo related mistakes worth naming, because both look like tidying up:\n\n**\"It's an internal call, so it's fine.\"** A route reached by an in-process call\nbypasses its own dependency-injected auth. Three \"obvious\" fixes to undefined\nnames in one audit pointed at real handlers whose authentication would have been\nskipped that way — the mechanical fix would have opened a hole that a crash was\naccidentally closing.\n\n**\"The app already checked.\"** Application permission and platform identity are\ntwo different questions. A user can hold a perfectly valid platform session and\nbe a viewer in the app, or vice versa. Do not let one answer the other.\n\n## The check\n\nStatic rules catch some of it:\n\n```\n an authz decision keyed on a payload-supplied tenant/user/workspace id\n a fabricated/absent caller treated as privileged\n```\n\nThe rest is a review question. On any diff touching auth, tenancy, entitlements,\ncapability tokens or a cross-tenant boundary, state which of these you checked:\n\n1. does every error path deny? ([LAW 17](17-fail-closed-then-prove-the-happy-path.md))\n2. is any decision keyed on caller-supplied input?\n3. is an absent caller treated as privileged?\n4. does every internal call carry an identity, over TLS you actually verify?\n5. is there a positive, live assertion that the happy path returns data?\n6. are cache and content keys scoped tenant-first?\n\nA change that trips any of these is not done.",
|
|
4
|
+
"category": "law",
|
|
5
|
+
"description": "Law #18",
|
|
6
|
+
"see_also": null,
|
|
7
|
+
"slug": "never-trust-the-caller",
|
|
8
|
+
"status": "published",
|
|
9
|
+
"synopsis": "Never trust the caller for an authorization decision — the payload is not evidence",
|
|
10
|
+
"topic": "law-18"
|
|
11
|
+
}
|
awkno/pages/law-19.json
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adopt": null,
|
|
3
|
+
"body": "*Part V · Trust*\n\n**Fires when:** you are deciding whether a file can be lifted out of a codebase\nand shipped on its own — extracting a library, splitting a package, publishing\nan internal tool, or estimating how much work a decoupling is.\n\n## The law\n\nThe number of import lines in a file measures how many edges you can see from\nwhere you are standing. It does not measure what the file needs in order to run\nsomewhere else, and it is wrong in **both** directions:\n\n- **It under-counts reach.** One import of a local module can drag in that\n module's whole subtree. The count says one; the work is the transitive\n closure.\n- **It over-counts cohesion.** Imports between files that travel *together*\n cost nothing on extraction — they become relative imports inside the package\n you are creating. The count says coupled; they are the thing itself.\n\nSo the useful question is never \"how many imports does this file have\". It is\n**\"what does this file need that a stranger's machine will not have?\"** Count\nthat, and count it transitively, with internal edges excluded.\n\n## The measurement that produced this\n\nFive candidates were measured for extraction with a one-line command — imports\nmatching the monorepo's top-level packages, per file. The plan was built on the\nresult. Both of the two most confident readings were wrong, on the same run,\nin opposite directions:\n\n| candidate | lines | one-hop count | what was actually true |\n|---|---|---|---|\n| a client module | 1,020 | **3** | one of the three pulled a 653-line base class that itself pulled the HTTP client, the degradation registry, the port resolver, the TLS config and the request signer |\n| a subpackage | 636 | **14** | **9 of the 14 were internal** — the subpackage importing itself. Real external coupling: 2 |\n| a product engine | 3,867 | **1** | genuinely standalone, and the largest of the five was the easiest to ship |\n\nThe first row is the expensive one. \"Three imports\" was read as \"an afternoon\",\nand the work it described was not decoupling at all: the correct move was to\n**write a new thin client against the wire protocol** and treat the original as\na specification. Those are different tasks with different costs and different\noutputs, and the metric chose the wrong one while looking precise.\n\nThe third row kills the intuition that size predicts portability. The biggest\ncandidate was the most portable. Lines and coupling are independent axes, and\nonly one of them decides whether the thing installs on someone else's laptop.\n\n## The trap in the fix\n\nThe obvious repair is to compute the transitive closure and use that number\ninstead. Do that — but do not let it become the new oracle, because the closure\nhas the same shape of blind spot one level out:\n\n**An import is not the only thing a file needs.** A module with zero internal\nimports still fails on a stranger's machine if it reads a config file that is\nnot in the wheel, resolves a hostname only your network answers, expects an\nenvironment variable your deploy sets, or imports a third-party package you\nhappen to have installed. None of those is an import edge, and none of them\nappears in any count.\n\nWhich is why the number is a filter and never a verdict. The verdict comes from\n**building the artifact and running it somewhere that has nothing** — a clean\ncontainer, a fresh virtualenv, a machine that has never seen your repository. A\npackage is not portable because you counted its imports. It is portable when it\nimported successfully on a machine that could not possibly have helped it.\n\nThe counting is still worth doing. It is cheap, it ranks the work, and it tells\nyou which candidate to start with. It just never gets to be the last word,\nbecause every failure mode it cannot see fails in the same place: on the\nstranger's machine, days after you shipped, where you are not watching.",
|
|
4
|
+
"category": "law",
|
|
5
|
+
"description": "Law #19",
|
|
6
|
+
"see_also": null,
|
|
7
|
+
"slug": "count-the-closure-not-the-edge",
|
|
8
|
+
"status": "published",
|
|
9
|
+
"synopsis": "Count the closure, not the edge — an import count is not a portability measurement",
|
|
10
|
+
"topic": "law-19"
|
|
11
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adopt": null,
|
|
3
|
+
"category": "stack",
|
|
4
|
+
"description": "OWNER DECISION 2026-08-19, recorded because it was made in a transcript and would otherwise be re-litigated: stop hand-maintaining a web UI per app. The Living Desktop is the shell; an \"app\" is a dynamic agent panel rendered from a tool result (awkit), scoped by the identity plane, driven by intent rather than clicking. veil/portal keep serving pages and APIs where genuinely needed -- the UI, widgets and apps are what collapses, not the hosting. WHY, measured that day on ONE tenant: 18 apps listed and 0 deployed; AitherOne showing \"Service Unavailable\" while healthy, because all 11 of its GET routes require a body and answer 422 to every caller alive; 189 catalogue routes against 105 registered panels; and 2 of 6 declared panels were ids with NO component -- rendering nothing, with no error, no boundary and no log line. Every one of those is the same shape: declared in one place, not real in another, and nothing comparing the two. THE TRAP THIS MUST NOT INHERIT, stated here so the stack is judged on it: collapsing six surfaces into one does not fix that shape, it reduces how many places it can happen. A panel spec a renderer cannot honour is a stale component one layer up. The parity gate (-'s shape: producer ids == renderer ids, asserted by something that fails) comes FIRST, or this becomes the seventh island. DONE means: one previously-broken app rebuilt as an agent panel end to end with real scope and real data; the entitlement plane answering once instead of a catalogue and a backend disagreeing; and surfaces retired by the ratchet, one at a time, each with its consumers moved in the same commit -- never by decree.\n\nIncludes: awkit, awdk, awnode, awiam, awbac",
|
|
5
|
+
"see_also": [
|
|
6
|
+
"awkit",
|
|
7
|
+
"awdk",
|
|
8
|
+
"awnode",
|
|
9
|
+
"awiam",
|
|
10
|
+
"awbac"
|
|
11
|
+
],
|
|
12
|
+
"status": "planned",
|
|
13
|
+
"synopsis": "One surface — agent panels, not hand-built UIs",
|
|
14
|
+
"topic": "one-surface"
|
|
15
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adopt": null,
|
|
3
|
+
"category": "stack",
|
|
4
|
+
"description": "Prove what an artifact is, who acted on it, and that nothing was quietly removed from the record.\n\nIncludes: awseal, awshare, awdit, awbac",
|
|
5
|
+
"see_also": [
|
|
6
|
+
"awseal",
|
|
7
|
+
"awshare",
|
|
8
|
+
"awdit",
|
|
9
|
+
"awbac"
|
|
10
|
+
],
|
|
11
|
+
"status": "partial",
|
|
12
|
+
"synopsis": "Provenance",
|
|
13
|
+
"topic": "provenance"
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adopt": null,
|
|
3
|
+
"category": "stack",
|
|
4
|
+
"description": "Several agents editing one codebase without sweeping each other's work or re-deriving what the last one already learned.\n\nIncludes: awgit, awgraph, awrelay, awm",
|
|
5
|
+
"see_also": [
|
|
6
|
+
"awgit",
|
|
7
|
+
"awgraph",
|
|
8
|
+
"awrelay",
|
|
9
|
+
"awm"
|
|
10
|
+
],
|
|
11
|
+
"status": "ready",
|
|
12
|
+
"synopsis": "Many agents, one repo",
|
|
13
|
+
"topic": "shared-worktree"
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adopt": null,
|
|
3
|
+
"category": "stack",
|
|
4
|
+
"description": "Who may come in at all, before anything asks who they are: a human check whose verdict is bound to one door and one use, the identity it names, the authority it feeds, and a record of every refusal. Named because the four already existed as four separate answers to one question a stranger asks first.\n\nIncludes: awnboard, awnest, awiam, awbac, awdit",
|
|
5
|
+
"see_also": [
|
|
6
|
+
"awnboard",
|
|
7
|
+
"awnest",
|
|
8
|
+
"awiam",
|
|
9
|
+
"awbac",
|
|
10
|
+
"awdit"
|
|
11
|
+
],
|
|
12
|
+
"status": "partial",
|
|
13
|
+
"synopsis": "The front door",
|
|
14
|
+
"topic": "the-front-door"
|
|
15
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adopt": null,
|
|
3
|
+
"category": "stack",
|
|
4
|
+
"description": "The thinking core, kept apart from the senses and the hands on purpose. A hard question becomes a session with phases you can inspect (awreason); a failure inside it becomes ranked hypotheses with a falsifying check for each (awprism); and the check is actually RUN against live state rather than recalled (awrepl). Those three are the loop. It composes with `agent-senses` for what is outside the process and with `shared-worktree` for what is in the codebase — which is why neither set is repeated here.\n\nIncludes: awreason, awprism, awrepl, awrecurse",
|
|
5
|
+
"see_also": [
|
|
6
|
+
"awreason",
|
|
7
|
+
"awprism",
|
|
8
|
+
"awrepl",
|
|
9
|
+
"awrecurse"
|
|
10
|
+
],
|
|
11
|
+
"status": "planned",
|
|
12
|
+
"synopsis": "The reasoning loop",
|
|
13
|
+
"topic": "the-reasoning-loop"
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adopt": null,
|
|
3
|
+
"category": "stack",
|
|
4
|
+
"description": "The three questions every access decision needs answered separately: who is this caller, what may they do, and what did they actually do. Kept apart on purpose -- one component that answers all three is one component that can quietly answer all three wrongly.\n\nIncludes: awiam, awbac, awdit",
|
|
5
|
+
"see_also": [
|
|
6
|
+
"awiam",
|
|
7
|
+
"awbac",
|
|
8
|
+
"awdit"
|
|
9
|
+
],
|
|
10
|
+
"status": "partial",
|
|
11
|
+
"synopsis": "Identity, authority, and the record",
|
|
12
|
+
"topic": "who-what-did"
|
|
13
|
+
}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: awkno
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: The man page for the Aither World — every brick, stack and law, in your terminal, offline.
|
|
5
|
+
License: Apache-2.0
|
|
6
|
+
Project-URL: Homepage, https://github.com/Aitherium/awkno
|
|
7
|
+
Project-URL: Documentation, https://github.com/Aitherium/awkno#readme
|
|
8
|
+
Project-URL: Repository, https://github.com/Aitherium/awkno.git
|
|
9
|
+
Project-URL: Issues, https://github.com/Aitherium/awkno/issues
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: PyYAML>=6.0
|
|
14
|
+
Provides-Extra: dev
|
|
15
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
16
|
+
Dynamic: license-file
|
|
17
|
+
|
|
18
|
+
# awkno — The man page for the Aither World
|
|
19
|
+
|
|
20
|
+
**Every brick, stack, and law in your terminal, offline.**
|
|
21
|
+
|
|
22
|
+
awkno is a standalone reference for the Aither World ecosystem — the set of portable, composable tools and principles that make agent automation reproducible and auditable. No browser, no internet connection, no external dependencies needed.
|
|
23
|
+
|
|
24
|
+
## Why
|
|
25
|
+
|
|
26
|
+
Agent systems need documented principles. The Aither World is built on 18 laws derived from real failures on production systems — lessons about gates, silence, atomicity, and delivery that apply to every agent work you build.
|
|
27
|
+
|
|
28
|
+
The ecosystem itself is ~36 portable tools (bricks) organized into thematic stacks. awkno brings them all into your terminal: any brick's purpose and adoption path, any law's principle and reasoning, any stack's composition and status — all offline, all fast, queryable by keyword, and open to reading and redistribution.
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
### Install
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install awkno
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Use
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Show a brick
|
|
42
|
+
awkno awdk
|
|
43
|
+
awkno awsh
|
|
44
|
+
|
|
45
|
+
# Show a law
|
|
46
|
+
awkno law 5
|
|
47
|
+
|
|
48
|
+
# List everything
|
|
49
|
+
awkno list
|
|
50
|
+
|
|
51
|
+
# Search for a term
|
|
52
|
+
awkno search agent
|
|
53
|
+
awkno -k silence
|
|
54
|
+
|
|
55
|
+
# Raw output for piping
|
|
56
|
+
awkno awdk --plain
|
|
57
|
+
awkno --json awdk
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### No Arguments
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
awkno
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Shows the overview: command summary, quick start examples, and how to explore further.
|
|
67
|
+
|
|
68
|
+
## What's Inside
|
|
69
|
+
|
|
70
|
+
### Bricks (36 tools)
|
|
71
|
+
|
|
72
|
+
Portable, single-purpose tools that do one job well and compose with others:
|
|
73
|
+
|
|
74
|
+
- **awdk** — Build AI agent fleets (3 lines, any backend)
|
|
75
|
+
- **awskills** — Portable agent skills (self-contained procedures)
|
|
76
|
+
- **awm** — Scoped agent memory (tenant:user:project boundaries)
|
|
77
|
+
- **awgit** — Semantic version control (edit-ops, leases)
|
|
78
|
+
- **awgraph** — Code graph for agents (AST, call graphs)
|
|
79
|
+
- **awrelay** — Agent messaging (findings, alerts, coordination)
|
|
80
|
+
- **awmail** — Email for agents (send and receive)
|
|
81
|
+
- **And 29 more...**
|
|
82
|
+
|
|
83
|
+
Each has an "adopt" sentence: the smallest useful thing you can do with it alone, without adopting anything else.
|
|
84
|
+
|
|
85
|
+
### Stacks (9 collections)
|
|
86
|
+
|
|
87
|
+
Curated sets of bricks that work together:
|
|
88
|
+
|
|
89
|
+
- **agent-vm** — The bare agent VM
|
|
90
|
+
- **agent-senses** — Perception (search, pages)
|
|
91
|
+
- **shared-worktree** — Many agents, one repo
|
|
92
|
+
- **the-front-door** — Identity, authority, record
|
|
93
|
+
- **And 5 more...**
|
|
94
|
+
|
|
95
|
+
### Laws (18 principles)
|
|
96
|
+
|
|
97
|
+
Lessons learned in production, written down so they don't have to be re-derived:
|
|
98
|
+
|
|
99
|
+
1. A rule nothing asserts is a suggestion
|
|
100
|
+
2. Make it a check, not a ticket
|
|
101
|
+
3. Watch your gate fail
|
|
102
|
+
4. Mutate the test, not just the code
|
|
103
|
+
5. Design for the silence
|
|
104
|
+
6. A check that cannot run must not pass
|
|
105
|
+
7. The symptom names the innocent
|
|
106
|
+
8. A checker in the wrong place found nothing
|
|
107
|
+
9. Detection without delivery is not detection
|
|
108
|
+
10. A gate that floods gets switched off
|
|
109
|
+
11. Open green; ratchet down
|
|
110
|
+
12. Measure it again
|
|
111
|
+
13. Written is not deployed
|
|
112
|
+
14. You wrote it; that does not mean it ships
|
|
113
|
+
15. Generate, never copy
|
|
114
|
+
16. The defect lives in the union
|
|
115
|
+
17. Fail closed, then prove the happy path
|
|
116
|
+
18. Never trust the caller
|
|
117
|
+
|
|
118
|
+
## Architecture
|
|
119
|
+
|
|
120
|
+
### Offline-First Design
|
|
121
|
+
|
|
122
|
+
The corpus is **generated once** from `ecosystem.yaml` and `awknowledge/laws/`, then **committed as JSON data files** under `awkno/pages/`. After install, the package needs no external files or network.
|
|
123
|
+
|
|
124
|
+
This means:
|
|
125
|
+
- No runtime generation (fast startup)
|
|
126
|
+
- No external dependencies beyond stdlib
|
|
127
|
+
- Reproducible across machines and time
|
|
128
|
+
- Auditable: every page is in the repo
|
|
129
|
+
|
|
130
|
+
### CLI Features
|
|
131
|
+
|
|
132
|
+
- **Pager support**: Automatic pagination on TTY (via `$PAGER` or system default)
|
|
133
|
+
- **TTY-aware formatting**: ANSI bold headers only when connected to a terminal
|
|
134
|
+
- **Multiple output modes**:
|
|
135
|
+
- `--plain` — No ANSI codes (safe for piping to other tools)
|
|
136
|
+
- `--json` — Structured output for scripting
|
|
137
|
+
- Default — Man-page-style formatted text
|
|
138
|
+
- **Fuzzy search**: Type something close, get ranked results
|
|
139
|
+
- **Command shortcuts**:
|
|
140
|
+
- `awkno list` — Show all topics grouped by category
|
|
141
|
+
- `awkno law N` — Show law by number
|
|
142
|
+
- `awkno -k TERM` / `awkno --apropos TERM` — Search (like `man -k`)
|
|
143
|
+
|
|
144
|
+
### No Internal Leakage
|
|
145
|
+
|
|
146
|
+
This package is built for public distribution, and the corpus is GENERATED from
|
|
147
|
+
an internal registry -- so the generator strips, and the build then re-checks,
|
|
148
|
+
every category of internal detail: infrastructure hostnames, absolute paths from
|
|
149
|
+
the build machine, issue-tracker and quality-gate identifiers, and imports that
|
|
150
|
+
only resolve inside a private monorepo.
|
|
151
|
+
|
|
152
|
+
The point of scanning the *generated* corpus rather than the generator is that a
|
|
153
|
+
sanitiser is only as good as its last pattern. A page that slips through reads as
|
|
154
|
+
ordinary prose, so nothing downstream would ever notice.
|
|
155
|
+
|
|
156
|
+
## Development
|
|
157
|
+
|
|
158
|
+
### Regenerate the Corpus
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
python awkno/generate.py
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
The generator reads:
|
|
165
|
+
- `ecosystem.yaml` — The brick and stack registry
|
|
166
|
+
- `awknowledge/laws/*.md` — The 18 laws
|
|
167
|
+
|
|
168
|
+
And writes JSON to `awkno/pages/`.
|
|
169
|
+
|
|
170
|
+
### Test Locally
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
pip install -e .
|
|
174
|
+
pytest
|
|
175
|
+
|
|
176
|
+
# Or run the CLI directly
|
|
177
|
+
python -m awkno.cli awdk
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Build and Publish
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
pip install build
|
|
184
|
+
python -m build
|
|
185
|
+
|
|
186
|
+
# Publish to PyPI
|
|
187
|
+
twine upload dist/*
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Integration
|
|
191
|
+
|
|
192
|
+
### In Your Own Code
|
|
193
|
+
|
|
194
|
+
```python
|
|
195
|
+
from awkno import AwknoRegistry
|
|
196
|
+
|
|
197
|
+
registry = AwknoRegistry()
|
|
198
|
+
page = registry.get("awdk")
|
|
199
|
+
print(page.render())
|
|
200
|
+
|
|
201
|
+
# Search
|
|
202
|
+
results = registry.search("agent memory")
|
|
203
|
+
for page, score in results[:5]:
|
|
204
|
+
print(f"{page.topic}: {page.synopsis}")
|
|
205
|
+
|
|
206
|
+
# List by category
|
|
207
|
+
bricks = registry.list_by_category("brick")
|
|
208
|
+
laws = registry.list_by_category("law")
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### As a Dependency
|
|
212
|
+
|
|
213
|
+
awkno has zero runtime dependencies (PyYAML is dev-only, for corpus generation).
|
|
214
|
+
|
|
215
|
+
```toml
|
|
216
|
+
[project]
|
|
217
|
+
dependencies = [
|
|
218
|
+
"awkno",
|
|
219
|
+
]
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Contributing
|
|
223
|
+
|
|
224
|
+
Read a law, apply it, send a pull request. The package itself is small and well-documented.
|
|
225
|
+
|
|
226
|
+
Pages are generated from `ecosystem.yaml` and law files — edits to those files flow into awkno on the next generation.
|
|
227
|
+
|
|
228
|
+
## License
|
|
229
|
+
|
|
230
|
+
Apache 2.0. See [LICENSE](LICENSE).
|
|
231
|
+
|
|
232
|
+
## Further Reading
|
|
233
|
+
|
|
234
|
+
- Ecosystem registry: https://github.com/Aitherium/ecosystem
|
|
235
|
+
- Laws and codex: https://github.com/Aitherium/awskills
|
|
236
|
+
- AitherWorld reference: https://aitherium.com
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
**awkno** — read the principles once, apply them everywhere.
|
|
241
|
+
|
|
242
|
+
<!-- aither-ecosystem:start GENERATED from the ecosystem registry. Edits here are overwritten; change the registry instead. -->
|
|
243
|
+
|
|
244
|
+
## The aw family
|
|
245
|
+
|
|
246
|
+
Standalone tools that share one idea: **replace something you would otherwise have to _trust_ with something you can _check_.**
|
|
247
|
+
|
|
248
|
+
Each installs on its own, works offline, and needs no account.
|
|
249
|
+
|
|
250
|
+
| | instead of trusting | you check |
|
|
251
|
+
|---|---|---|
|
|
252
|
+
| [awdk](https://github.com/Aitherium/awdk) | a framework's idea of how your agents should run | one loop you can read, pointed at a backend you already pay for |
|
|
253
|
+
| [awskills](https://github.com/Aitherium/awskills) | that an agent knows your procedure | the procedure written down, versioned, and loadable by any agent |
|
|
254
|
+
| [awm](https://github.com/Aitherium/awm) | that memory stayed in its lane | tenant:user:project scopes, so a write cannot cross a boundary |
|
|
255
|
+
| [awnode](https://github.com/Aitherium/awnode) | a vendor's cloud with every prompt | a local gateway routing to backends you chose |
|
|
256
|
+
| [awgraph](https://github.com/Aitherium/awgraph) | that grep found everything | an AST + tree-sitter call graph an agent can traverse |
|
|
257
|
+
| [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 |
|
|
258
|
+
| [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 |
|
|
259
|
+
| [awshare](https://github.com/Aitherium/awshare) | that the download is intact | content-addressed bundles, verified on fetch |
|
|
260
|
+
| [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" |
|
|
261
|
+
| [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 |
|
|
262
|
+
| [awnix](https://github.com/Aitherium/awnix) | that the box is what you left it as | an immutable image you built, with atomic rollback |
|
|
263
|
+
| [awrecover](https://github.com/Aitherium/awrecover) | that the restore worked | a restore that fully lands or does not land at all |
|
|
264
|
+
| [awrelay](https://github.com/Aitherium/awrelay) | a SaaS in the middle of your agents | findings, alerts and coordination over your own transport |
|
|
265
|
+
| [awmail](https://github.com/Aitherium/awmail) | a mailbox somebody else can read | mail your agents send and receive over your own server |
|
|
266
|
+
| [awfind](https://github.com/Aitherium/awfind) | one vendor's idea of the web | results from whichever providers you configured |
|
|
267
|
+
| [awbrowse](https://github.com/Aitherium/awbrowse) | that the page said what you were told | the render, the DOM and the requests it made |
|
|
268
|
+
| [aitherkvcache](https://github.com/Aitherium/aitherkvcache) | a vendor's quantisation defaults | sub-byte KV cache kernels you can benchmark yourself |
|
|
269
|
+
| [AitherZero](https://github.com/Aitherium/AitherZero) | a pile of scripts nobody has numbered | numbered, discoverable automation with declarative playbooks |
|
|
270
|
+
| [AitherConnect](https://github.com/Aitherium/AitherConnect) | what a page tells your browser to do | a federated search and desktop bridge you host |
|
|
271
|
+
| [awreason](https://github.com/Aitherium/awreason) | a confident paragraph | the phases it went through, and every tool call it made to get there |
|
|
272
|
+
| [awrecurse](https://github.com/Aitherium/awrecurse) | that everything you pasted in was actually read | which slices it opened, and what it concluded from each |
|
|
273
|
+
| [awprism](https://github.com/Aitherium/awprism) | the first explanation that fits | the ranked alternatives, and the observation that separates them |
|
|
274
|
+
| [awrepl](https://github.com/Aitherium/awrepl) | what the agent believes the value is | the value, printed from the live session |
|
|
275
|
+
| [awresearch](https://github.com/Aitherium/awresearch) | a summary of pages nobody opened | every claim against the source it came from |
|
|
276
|
+
| [awpredict](https://github.com/Aitherium/awpredict) | a model because it trained without erroring | its prediction against a self-updating lookup, on the rows that are actually novel |
|
|
277
|
+
| **awkno** _(you are here)_ | that the docs site is up, or that you remember the family | the whole ecosystem in your terminal, with no network at all |
|
|
278
|
+
|
|
279
|
+
[**awnix**](https://github.com/Aitherium/awnix) is the ground floor — A Linux you can hand to an agent — immutable base, capabilities included.
|
|
280
|
+
|
|
281
|
+
## The Aitherium ecosystem
|
|
282
|
+
|
|
283
|
+
Every repository here is public. Each publishes an `aither-manifest.json` beside its page, so any surface can read every sibling's — the network is browsable from any node in it.
|
|
284
|
+
|
|
285
|
+
| repo | what it is | pages |
|
|
286
|
+
|---|---|---|
|
|
287
|
+
| [awdk](https://github.com/Aitherium/awdk) | Build AI agent fleets — 3 lines, any backend, local or cloud | [docs](https://aitherium.github.io/awdk/) |
|
|
288
|
+
| [awskills](https://github.com/Aitherium/awskills) | Portable agent skills — self-contained procedures an agent loads on demand | [docs](https://aitherium.github.io/awskills/) |
|
|
289
|
+
| [awm](https://github.com/Aitherium/awm) | A portable, scoped agent memory | [docs](https://aitherium.github.io/awm/) |
|
|
290
|
+
| [awnode](https://github.com/Aitherium/awnode) | A lightweight local gateway — bridges your apps to the AI backends you chose | [docs](https://aitherium.github.io/awnode/) |
|
|
291
|
+
| [awrun](https://github.com/Aitherium/awrun) | A priority-aware queue and dispatcher for agentic runs and ad-hoc CI builds | [docs](https://aitherium.github.io/awrun/) |
|
|
292
|
+
| [awgraph](https://github.com/Aitherium/awgraph) | A semantic code graph for agents — AST + tree-sitter, call graphs | [docs](https://aitherium.github.io/awgraph/) |
|
|
293
|
+
| [awgit](https://github.com/Aitherium/awgit) | Semantic version control on top of git — edit-ops and leases | [docs](https://aitherium.github.io/awgit/) |
|
|
294
|
+
| [awseal](https://github.com/Aitherium/awseal) | Sign an artifact so a stranger can verify it | [docs](https://aitherium.github.io/awseal/) |
|
|
295
|
+
| [awshare](https://github.com/Aitherium/awshare) | Publish an artifact and fetch it back verified | [docs](https://aitherium.github.io/awshare/) |
|
|
296
|
+
| [awdit](https://github.com/Aitherium/awdit) | An append-only audit trail whose gaps are DETECTABLE | [docs](https://aitherium.github.io/awdit/) |
|
|
297
|
+
| [awbac](https://github.com/Aitherium/awbac) | Role-based access control that fails closed and explains itself | [docs](https://aitherium.github.io/awbac/) |
|
|
298
|
+
| [awiam](https://github.com/Aitherium/awiam) | Who is this caller? A directory and session store that fails honestly | [docs](https://aitherium.github.io/awiam/) |
|
|
299
|
+
| [awtunnel](https://github.com/Aitherium/awtunnel) | Reach a service that has no public address | [docs](https://aitherium.github.io/awtunnel/) |
|
|
300
|
+
| [awnest](https://github.com/Aitherium/awnest) | Prove there is a human before you let them into the nest | [docs](https://aitherium.github.io/awnest/) |
|
|
301
|
+
| [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/) |
|
|
302
|
+
| [awnix](https://github.com/Aitherium/awnix) | A Linux you can hand to an agent — immutable base, capabilities included | [docs](https://aitherium.github.io/awnix/) |
|
|
303
|
+
| [awrecover](https://github.com/Aitherium/awrecover) | Labelled snapshots with an all-or-nothing restore | [docs](https://aitherium.github.io/awrecover/) |
|
|
304
|
+
| [awrelay](https://github.com/Aitherium/awrelay) | Portable agent messaging — findings, alerts, coordination | [docs](https://aitherium.github.io/awrelay/) |
|
|
305
|
+
| [awmail](https://github.com/Aitherium/awmail) | Give an agent an email address — send, and actually receive | [docs](https://aitherium.github.io/awmail/) |
|
|
306
|
+
| [awnet](https://github.com/Aitherium/awnet) | The agentic web — agents host a mesh, and agents join one | [docs](https://aitherium.github.io/awnet/) |
|
|
307
|
+
| [awfind](https://github.com/Aitherium/awfind) | A portable search client — query, results, ranking | [docs](https://aitherium.github.io/awfind/) |
|
|
308
|
+
| [awbrowse](https://github.com/Aitherium/awbrowse) | A portable browser client — navigate, console, network, DOM, screenshot | [docs](https://aitherium.github.io/awbrowse/) |
|
|
309
|
+
| [awknowledge](https://github.com/Aitherium/awknowledge) | How to run a coding agent so the result survives — the laws, with evidence | [docs](https://aitherium.github.io/awknowledge/) |
|
|
310
|
+
| [aitherkvcache](https://github.com/Aitherium/aitherkvcache) | Near-optimal KV cache quantization for LLM inference — sub-byte compression | [docs](https://aitherium.github.io/aitherkvcache/) |
|
|
311
|
+
| [AitherZero](https://github.com/Aitherium/AitherZero) | PowerShell 7+ automation framework — numbered, self-describing scripts | [docs](https://aitherium.github.io/AitherZero/) |
|
|
312
|
+
| [AitherConnect](https://github.com/Aitherium/AitherConnect) | Browser extension — federated AI search, page context, and the Living OS overlay | [docs](https://aitherium.github.io/AitherConnect/) |
|
|
313
|
+
| [awreason](https://github.com/Aitherium/awreason) | A portable reasoning client — sessions, phases, thoughts, and the chain that produced the answer | [docs](https://aitherium.github.io/awreason/) |
|
|
314
|
+
| [awrecurse](https://github.com/Aitherium/awrecurse) | Answer a question over a context far larger than the window — recursively, with the trace kept | [docs](https://aitherium.github.io/awrecurse/) |
|
|
315
|
+
| [awprism](https://github.com/Aitherium/awprism) | Turn a failure into ranked hypotheses — and say what would confirm each one | [docs](https://aitherium.github.io/awprism/) |
|
|
316
|
+
| [awrepl](https://github.com/Aitherium/awrepl) | A REPL an agent can actually use — state that survives between turns | [docs](https://aitherium.github.io/awrepl/) |
|
|
317
|
+
| [awresearch](https://github.com/Aitherium/awresearch) | Ask a research question, get a cited report you can check | [docs](https://aitherium.github.io/awresearch/) |
|
|
318
|
+
| [awpredict](https://github.com/Aitherium/awpredict) | Predict what your environment does next, and how surprised you were | [docs](https://aitherium.github.io/awpredict/) |
|
|
319
|
+
| **awkno** _(you are here)_ | The man page for the Aither World — every brick, stack and law, offline | [docs](https://aitherium.github.io/awkno/) |
|
|
320
|
+
|
|
321
|
+
<!-- aither-ecosystem:end -->
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
awkno/__init__.py,sha256=WQ9FhfAyYBUFxGvZ5MVBlyYP9s6owCbxcVBNIQoOTTI,584
|
|
2
|
+
awkno/_doctor.py,sha256=Iw1M2fs57W9LF1BjgKsC0wu0bTG5EcBcrRN1cLTdbLU,4256
|
|
3
|
+
awkno/cli.py,sha256=gpoSfOWgC5pUEK8nxPJTXpgt1QAuDTeHqWYkv7P-4E8,18249
|
|
4
|
+
awkno/corpus.py,sha256=7hGIRsttruTCl7ZYNxky8mlzz_199ioK_lKz74uzlVw,6415
|
|
5
|
+
awkno/generate.py,sha256=_84SiSjkERZ5GIM9Zjm7StpPVHt-QUXm7jyGsAJnkm8,18805
|
|
6
|
+
awkno/pages/agent-senses.json,sha256=Vk-0BSgrUfOItqXFxV0GL_CAKctLPWYuK77SEw0Av7M,331
|
|
7
|
+
awkno/pages/agent-vm.json,sha256=Je4OOQ-jTro3DdS98XJp3zHAagr9BCateDBU34xoV1U,512
|
|
8
|
+
awkno/pages/aitherconnect.json,sha256=cj8wzW1sz9-3pRhLZj1a-rnmroxD2UOwQZFMJLPoonQ,385
|
|
9
|
+
awkno/pages/aitherkvcache.json,sha256=mh7vvepk7IY-eAUHBBHvD-TN4JJlBsK0EsST6pv4-sA,495
|
|
10
|
+
awkno/pages/aitherzero.json,sha256=k8gkuNOw3vnSSIMwNPk2grwBlKAkG0YBp2MX63K9ugk,467
|
|
11
|
+
awkno/pages/awarena.json,sha256=RP_mJZos-g2_gmxJYqpOCzOlswZCKFOJ6fZmwj1A2CU,903
|
|
12
|
+
awkno/pages/awask.json,sha256=n63cVxDVLv1UkfRBEjdZFOCk35qF7CDh5ltalmqQ_G0,750
|
|
13
|
+
awkno/pages/awbac.json,sha256=GSC18jjlE-t0Fo4CqWvuXbGt7V9d0P5tTvniWlnlv7c,501
|
|
14
|
+
awkno/pages/awbrowse.json,sha256=yb9CZCBKqSlRWkWsnFyxsQEvEFt29TSK-uadGSOb6ls,496
|
|
15
|
+
awkno/pages/awdit.json,sha256=65h_cjESxB9AgeESGUP_5v--WZXwNV0vyR4nBMCL_v8,503
|
|
16
|
+
awkno/pages/awdk.json,sha256=qAvjGss549MaeDTcTAoi19K5X1cUsh52I_B3RQrb5pA,555
|
|
17
|
+
awkno/pages/awevolve.json,sha256=xwobhrd4l4iZT9XRiBx7e5sTKdwFrvAsNiNwvIsKT4Y,1046
|
|
18
|
+
awkno/pages/awfind.json,sha256=ygHdON-C3GGEcQlcegJS2S8gT4USrhzqk7kdLxXOKHo,483
|
|
19
|
+
awkno/pages/awgit.json,sha256=RqWPnZso7rK8sxN4ZrQ2w0sYoLZHY6pFk1bNvF7Vpc0,487
|
|
20
|
+
awkno/pages/awgraph.json,sha256=O6-JqrauelcCfddPLkrG6pqv4Q1Wj3diQJpsqOtkVjU,452
|
|
21
|
+
awkno/pages/awiam.json,sha256=62k9jMecHJzyi41G1ezrVsYfY4tlNHmuX4oeoxHcbuE,594
|
|
22
|
+
awkno/pages/awkit.json,sha256=9zURcrbW0MjirtPHt7mCOP0JzhZMpEKAV9onYxcvdnQ,837
|
|
23
|
+
awkno/pages/awkno.json,sha256=7HoDI-4MGESO8FSPSrAhB-jcO3Gx3-hWS67LGymzRMw,659
|
|
24
|
+
awkno/pages/awknowledge.json,sha256=XqZPCnK565hSrB9BsApbyxIlnJdREMIKSDE4FAQ8rqE,517
|
|
25
|
+
awkno/pages/awm.json,sha256=u3BaswAqDX0HsuPRQJQAOofYKbtxfMtdhrhxsL_Vvnc,506
|
|
26
|
+
awkno/pages/awmail.json,sha256=ERBslbDtIvlUvEbeBK9WTHEaJcHATAcr4-c1g-2UI7k,967
|
|
27
|
+
awkno/pages/awnboard.json,sha256=xUaKaogWO-LaFD3mTqIBoTE-7iQvOhBx9sqwC9FjFPE,854
|
|
28
|
+
awkno/pages/awnest.json,sha256=n6hj74FcPhTmJMCE5l6rSUld3DASPsF4TRzDWelJwZ8,810
|
|
29
|
+
awkno/pages/awnet.json,sha256=uBZSk4O6dJrsUEk5qZbBa6lchRzKS8PgWLm4hSVVJ2E,614
|
|
30
|
+
awkno/pages/awnix.json,sha256=YUXzaElCzXdHcpFbtvOgQHt5-eDuqxzdAyxYmu4dEys,558
|
|
31
|
+
awkno/pages/awnode.json,sha256=Eda6VjVZXFlVh-JZxzXn4EY8mcwzNGR_zMgWPdFZYM8,422
|
|
32
|
+
awkno/pages/awpack.json,sha256=1_jdbhfTrHhbx7h0W7V7vz2Tvss7qJ1fgiDewbHQbNc,808
|
|
33
|
+
awkno/pages/awpredict.json,sha256=OJJLF70JPhZs4D2DBYrhL-gfPixgZoy5p6ut2XIwvsk,571
|
|
34
|
+
awkno/pages/awprism.json,sha256=HeRGIH7VKoIZ2Ry8ujp2sfXC9sSq6Qj1-c8FnES4k9M,842
|
|
35
|
+
awkno/pages/awreason.json,sha256=BIYs78uYw_oJjzURQks0GmvIAgIgvFxg9ByCUaAuqFg,818
|
|
36
|
+
awkno/pages/awrecover.json,sha256=HltixRd6xaBHJu6OZ-bElEl9hS7nP1qtjlWniGBgtqQ,471
|
|
37
|
+
awkno/pages/awrecurse.json,sha256=TLEGHbXj-2kjy6EVcI-8YQRQIqXUyzEB4108IRh_9Mk,785
|
|
38
|
+
awkno/pages/awrelay.json,sha256=Wva8E-Qyc_xPV1NvBpCBQomMEXrTIuj6JSgtg_8b2JI,473
|
|
39
|
+
awkno/pages/awrepl.json,sha256=QNQnG5NIIR6Q6gcvlt4dG0WFrXBwqTxDhfbPi8gyJTI,707
|
|
40
|
+
awkno/pages/awresearch.json,sha256=nGpGjg9gfh-BotDjELkz7M-Abe4COlZOi5TEWzULNng,693
|
|
41
|
+
awkno/pages/awrun.json,sha256=fY-J1PQjDrMz8PRX6aEyGqNWi5W1EitiZLwG2KZT148,584
|
|
42
|
+
awkno/pages/awseal.json,sha256=kjD0FsMdXQHF8D1ZgeVmwMO2bs6NfM11r2U3A080W-0,413
|
|
43
|
+
awkno/pages/awsh.json,sha256=lU5hWGaiuB0paoxO7hYjQqQRoIregKCjml63CF8uGv4,714
|
|
44
|
+
awkno/pages/awshare.json,sha256=S8nY0uoeAhI14-uS0LwzsV72-C1-XzkG9Hkh9ChY6f0,458
|
|
45
|
+
awkno/pages/awskills.json,sha256=gQtkVa-DgkS98jCe3TSfSaVe1C9apbDktq8UiUsukzo,506
|
|
46
|
+
awkno/pages/awsync.json,sha256=WB4I_JImrlhypsdzngJrjzZEZKAR6en_4pbdKJ_9sbo,685
|
|
47
|
+
awkno/pages/awtunnel.json,sha256=hkM01T0sIKJpLKlrr5CydkEWatIk4zpV-GQ9x_mID-0,506
|
|
48
|
+
awkno/pages/cited-research.json,sha256=9uA1nY0JrmnNR2j_ixIweSYIBiRI005S3HECJKV5Fps,643
|
|
49
|
+
awkno/pages/gobbonet-agentic.json,sha256=gyh4bt1lDQgI2lGgNMcptdEAklcgx8aIzirZ50iv-r8,613
|
|
50
|
+
awkno/pages/guide-00.json,sha256=qrsj_bWmKWJguFGZfkJkDHD9JxVUtNS_KU0mqneA_jo,3249
|
|
51
|
+
awkno/pages/guide-01.json,sha256=L_FN22OqjDONuoKVV8ir0KdU-klnPAZoIlaT0Cv-iSY,3597
|
|
52
|
+
awkno/pages/guide-02.json,sha256=EG2jjJJoutk5PJR-HWkWhONU4_FZeeR7BNYi7QPBgbw,4326
|
|
53
|
+
awkno/pages/guide-03.json,sha256=iqAoCFKknb_jIlUQoWyGmo9SWpyabPNqE4AD7PCmiuY,3898
|
|
54
|
+
awkno/pages/guide-04.json,sha256=ccmNSbyjklvfKSXkDT2gUsEsouNfczkWC_mFhojKeiw,3994
|
|
55
|
+
awkno/pages/guide-05.json,sha256=41-q9zrdKsRrkuTuAvYJ6wR_FCo-BKQSOLWtfZA4jlE,3402
|
|
56
|
+
awkno/pages/guide-06.json,sha256=OM8nUtrC9K5UAiyjSLGIcddNeHHY5JoLWSI5JA34kJE,3279
|
|
57
|
+
awkno/pages/guide-07.json,sha256=Hm7bt31Q5ezRbi3xjnmnbM_u9yltBjnHETYMM0ppJxo,4866
|
|
58
|
+
awkno/pages/guide-08.json,sha256=LX4njtT8Y13PazipicB-wwMYjDq1Oz2w4wqimUprFdI,3697
|
|
59
|
+
awkno/pages/guide-09.json,sha256=Rle6oVGlZda7ccteLbYn0umlE11QvpqAeNsJcKQfljo,2964
|
|
60
|
+
awkno/pages/guide.json,sha256=zv85uqmc5F6i4G-R9S1yQxOWJa_xXIM7kWzvVBh4mRg,988
|
|
61
|
+
awkno/pages/law-01.json,sha256=QtzPnpqGOIbgtQFKxkZMuCQ_gZVpGmCmtyGDPnRmAkE,3258
|
|
62
|
+
awkno/pages/law-02.json,sha256=n3AvLpAcrAA293Fc8MhbyJrlFyGs5aL4b6j0zrTjUgA,3020
|
|
63
|
+
awkno/pages/law-03.json,sha256=AA7o-7BvG-pbdg2fmWKkUj5UHIUWpHctFC2st97oWFo,3029
|
|
64
|
+
awkno/pages/law-04.json,sha256=QHkHnPgLIfn1PoMtVEpzYP4GwYDz09fJjBisBfCWf4s,3226
|
|
65
|
+
awkno/pages/law-05.json,sha256=tp8aT73vMsh4GkCKMHwbQV72efaVByZlxBftVsWmL6g,3785
|
|
66
|
+
awkno/pages/law-06.json,sha256=P5ydXg-YgwlmWG8IxZ0dsA6D-wOl1HCYfVELDrkKOSA,3152
|
|
67
|
+
awkno/pages/law-07.json,sha256=bOaJzoD-zUWOUF4IkzvgCNIUEURQrNGQFSt1lC2NZ5o,3513
|
|
68
|
+
awkno/pages/law-08.json,sha256=8-SN3U1LF8yPyS-P_1AaFcnolsnp7SJEBB3UypH7uXk,3180
|
|
69
|
+
awkno/pages/law-09.json,sha256=PeGJ2n830BZOF-OTCujqEKH6O-9Ry-KgT08OMbgWtz4,3429
|
|
70
|
+
awkno/pages/law-10.json,sha256=RrTzB8LyKVxTijTEDXw2jodpKKnX4OeOu13cb0lopoU,3505
|
|
71
|
+
awkno/pages/law-11.json,sha256=i6-9gK6Us42HeHRZhn_PWECmlewLvZ1Tzh9H-3Lk_Io,3362
|
|
72
|
+
awkno/pages/law-12.json,sha256=JqgU61brQh78Q8rLOUcs3N4aBUauckrnYrZ5W_aUMDs,3427
|
|
73
|
+
awkno/pages/law-13.json,sha256=tBKEVmdnn6KQSCnkBGO149rhoAVT05enlTkETN67Wc0,3756
|
|
74
|
+
awkno/pages/law-14.json,sha256=sRj-7B6YbG_TCxMcDWHUAUmHz6hU7F60wy3YAc6IMiI,3795
|
|
75
|
+
awkno/pages/law-15.json,sha256=e-8bpbL7XekySlotiSrSgu9EjM_2PpFFIjgsbUEO3Jc,3733
|
|
76
|
+
awkno/pages/law-16.json,sha256=FXdRsz6E3CALxvaSg5o0kkx_GWilH1y7X0Y04gRvySs,3913
|
|
77
|
+
awkno/pages/law-17.json,sha256=WIRFlyMOtJlbbcpa9-a-yHMTGEiuZ8QMxU37UAg_q5A,3941
|
|
78
|
+
awkno/pages/law-18.json,sha256=Ghf_nBIMRokvyCY8RQxF14ffGJjIS4et8jJn_PZXf5M,3612
|
|
79
|
+
awkno/pages/law-19.json,sha256=8KWBw6pdFXirZ58smVnB1Wsl_nG5ZKddFzJPqZAjjBo,4233
|
|
80
|
+
awkno/pages/one-surface.json,sha256=OOsb8qUOBxCxESR7WuNMnfc1UzSZF_YoCS9qRv8S-kI,1974
|
|
81
|
+
awkno/pages/provenance.json,sha256=wB1i73zMcjNGpiuESgVSrKlxnyJYv0_WxJFA8wPlE9c,367
|
|
82
|
+
awkno/pages/shared-worktree.json,sha256=zDTNaHpF5Zp1PixmiEYRP5R3VnW_M1AggXzuM2UMMr4,402
|
|
83
|
+
awkno/pages/the-front-door.json,sha256=rpkaVw4_zfRUbJkNFnd06uZcq4_SnP_hBPrtV2xV2KA,602
|
|
84
|
+
awkno/pages/the-reasoning-loop.json,sha256=t_qMYF7DvnkifaZlROis4Qo93KalEdSyoaHmClC3rdM,807
|
|
85
|
+
awkno/pages/who-what-did.json,sha256=j9P0h-t6KKy2G7Q5-Ld0YyVxjOGJTJoDE7ibxENd6YE,529
|
|
86
|
+
awkno-0.2.0.dist-info/licenses/LICENSE,sha256=vUDTWBRP7Wp9y6uUHHO3Pq8TmODgUQ8AKfobbOKGDN0,5613
|
|
87
|
+
awkno-0.2.0.dist-info/METADATA,sha256=6ezAVV3LLxeZKHM9U6LXcOsxy-l_ES7gE14rdABd5Gk,17405
|
|
88
|
+
awkno-0.2.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
89
|
+
awkno-0.2.0.dist-info/entry_points.txt,sha256=7u8Q6vsNuP_R3owgns6RH5RwJKPG7MIN2uz-acloDFU,41
|
|
90
|
+
awkno-0.2.0.dist-info/top_level.txt,sha256=2VYMJUddiRkYYoNsdeMlX8gc_f0xRXWF6eihBgmQ-n8,6
|
|
91
|
+
awkno-0.2.0.dist-info/RECORD,,
|