@aacombarro89/praxis 0.1.7 → 0.1.9

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 (48) hide show
  1. package/README.md +34 -20
  2. package/dist/codex-marketplace.d.ts +19 -0
  3. package/dist/codex-marketplace.js +113 -0
  4. package/dist/codex-marketplace.js.map +1 -0
  5. package/dist/codex-security.d.ts +11 -0
  6. package/dist/codex-security.js +144 -0
  7. package/dist/codex-security.js.map +1 -0
  8. package/dist/emit.d.ts +38 -2
  9. package/dist/emit.js +167 -13
  10. package/dist/emit.js.map +1 -1
  11. package/dist/init.d.ts +16 -6
  12. package/dist/init.js +47 -10
  13. package/dist/init.js.map +1 -1
  14. package/dist/manifest.d.ts +2 -2
  15. package/dist/manifest.js +1 -1
  16. package/dist/manifest.js.map +1 -1
  17. package/dist/packages.d.ts +1 -1
  18. package/dist/plugins.d.ts +14 -0
  19. package/dist/plugins.js +9 -0
  20. package/dist/plugins.js.map +1 -1
  21. package/dist/program.d.ts +8 -0
  22. package/dist/program.js +93 -30
  23. package/dist/program.js.map +1 -1
  24. package/dist/shared-instructions.d.ts +21 -0
  25. package/dist/shared-instructions.js +63 -0
  26. package/dist/shared-instructions.js.map +1 -0
  27. package/dist/sync.d.ts +8 -1
  28. package/dist/sync.js +210 -7
  29. package/dist/sync.js.map +1 -1
  30. package/package.json +1 -1
  31. package/packages/external/ponytail/plugins.yaml +4 -1
  32. package/packages/layer1/instruction-upkeep/commands/instructions.md +14 -5
  33. package/packages/layer1/instruction-upkeep/rules.md +11 -23
  34. package/packages/layer1/onboarding/commands/onboard.md +42 -24
  35. package/packages/layer1/onboarding/rules.md +6 -10
  36. package/packages/layer1/safe-permissions/permissions.yaml +2 -2
  37. package/packages/layer1/session-handoff/commands/handoff.md +5 -5
  38. package/packages/layer1/session-handoff/rules.md +10 -57
  39. package/packages/layer1/upkeep/commands/upkeep.md +8 -5
  40. package/packages/layer1/upkeep/rules.md +12 -15
  41. package/packages/layer1/wiki-memory/commands/wiki.md +6 -6
  42. package/packages/layer1/wiki-memory/rules.md +11 -49
  43. package/packages/layer2/node-recipes/rules.md +4 -3
  44. package/packages/layer2/node-testing/rules.md +4 -0
  45. package/packages/layer2/python-backend-recipes/rules.md +4 -4
  46. package/packages/layer2/python-testing/rules.md +4 -0
  47. package/packages/layer2/react-components/rules.md +4 -0
  48. package/packages/layer2/react-testing/rules.md +4 -0
@@ -4,18 +4,21 @@ argument-hint: [optional-area-to-focus]
4
4
  allowed-tools: Bash(npx @aacombarro89/praxis@latest check:*), Bash(npx @aacombarro89/praxis@latest sync:*), Bash(npx @aacombarro89/praxis check:*), Bash(npx @aacombarro89/praxis sync:*), Bash(praxis check:*), Bash(praxis sync:*)
5
5
  ---
6
6
 
7
- Focus: $ARGUMENTS — if empty, cover all three passes at a high level.
7
+ Focus: {{arguments}} — if empty, cover all three passes at a high level.
8
8
 
9
9
  This is the single entry point for "is my methodology layer still current
10
10
  with reality?" It sequences three existing checks rather than re-implementing
11
11
  them — restating their logic here would duplicate content that drifts
12
12
  independently of its canonical home.
13
13
 
14
- 1. **Deterministic drift.** Run `praxis check` if the CLI is on PATH; otherwise
14
+ 1. **Deterministic drift.** Run `praxis check` if the CLI is on PATH. Otherwise
15
15
  fall back to `npx @aacombarro89/praxis@latest check` (pin `@latest` — a bare
16
16
  `npx @aacombarro89/praxis` can silently reuse a stale cached build). If it
17
17
  reports file drift, run `praxis sync` (or `npx @aacombarro89/praxis@latest
18
- sync`) to fix it. Surface managed-block conflicts or broken anchors as-is.
18
+ sync`) to fix it. Surface managed-block conflicts, shared-project parity
19
+ drift, or broken anchors as-is. `sync` fixes generated artifacts but must
20
+ never choose a winner between project-owned `CLAUDE.md` and `AGENTS.md`
21
+ blocks; route that drift to the instruction pass below.
19
22
  This step needs no LLM judgment — do it first so the semantic passes below
20
23
  build on a known-good baseline. **If the CLI is unavailable even via npx,
21
24
  skip only this step and proceed with steps 2 and 3 — do not skip the entire
@@ -27,10 +30,10 @@ independently of its canonical home.
27
30
  invalid-manifest message), the check did not fully run — report that as a
28
31
  failure, never as "0 checked, all fine".** A stale npx-cached CLI is the usual
29
32
  cause; re-run pinned to `@latest`, and note the version if it still lags.
30
- 2. **Instruction layer.** Perform the update defined by `/praxis-instructions`,
33
+ 2. **Instruction layer.** Perform the update defined by `{{workflow:praxis-instructions}}`,
31
34
  scoped to the focus above. Follow that command's own steps; do not
32
35
  re-derive them here.
33
- 3. **Wiki.** Perform the wiki maintenance defined by `/praxis-wiki`, scoped to
36
+ 3. **Wiki.** Perform the wiki maintenance defined by `{{workflow:praxis-wiki}}`, scoped to
34
37
  the focus above — it files newly-authored knowledge and lints existing pages,
35
38
  and no-ops when there is nothing to do. Follow that command's own steps; do
36
39
  not re-derive them here. (Full delegation, symmetric with the audit pass —
@@ -1,18 +1,15 @@
1
1
  ## Upkeep
2
2
 
3
- The methodology layer (instruction files, the knowledge wiki, the emitted
4
- `.claude/` files) drifts from project reality the same way code drifts from
5
- docs. When work reveals that drift — a stale instruction, a wiki page that no
6
- longer matches the code, an unsynced emit — or when work produces new durable
7
- knowledge to file (a decision, a new package), run `/praxis-upkeep` rather than
8
- letting the gap persist, fixing it ad hoc, or invoking the sub-skills piecemeal.
9
- It is the single front gate: it sequences `praxis check` and fully delegates to
10
- `/praxis-instructions` (instruction layer) and `/praxis-wiki` (knowledge wiki). The
11
- command itself only sequences and reports; the sub-skills make any edits, each
12
- behind its own confirmation gate.
3
+ The methodology layer (instructions, wiki, emitted agent files) drifts
4
+ from project reality like code drifts from docs. When work reveals drift, or
5
+ produces new durable knowledge to file, run `{{workflow:praxis-upkeep}}` the single
6
+ front gate sequencing `praxis check`, `{{workflow:praxis-instructions}}`, and
7
+ `{{workflow:praxis-wiki}}` rather than fixing it ad hoc or piecemeal.
13
8
 
14
- Run all three passes through the gate even when only one looks like it has work.
15
- The gate exists so you do not pre-decide which passes are needed — the irrelevant
16
- ones no-op cheaply, and skipping straight to a sub-skill because the others "look
17
- like no-ops" is exactly the piecemeal use this rule prevents (it is how a pass
18
- that did have work gets silently skipped).
9
+ When Claude Code and Codex coexist, this gate covers both native instruction
10
+ surfaces. Keep their project-owned shared sections synchronized while preserving
11
+ target-specific guidance; never make one surface import or replace the other.
12
+
13
+ Run all three passes through the gate even when only one looks like it has
14
+ work — skipping straight to a sub-skill is the piecemeal use this rule
15
+ prevents.
@@ -10,8 +10,8 @@ You are curating a durable knowledge wiki for this project: linked markdown page
10
10
  of long-lived knowledge that a future session reads instead of re-deriving. This
11
11
  is the agent's cross-session memory **of the project** — version-controlled and
12
12
  shared with the team. It is NOT a per-session handoff (transient — that is
13
- `/praxis-handoff`) and NOT the authored instruction layer (`CLAUDE.md`,
14
- `.claude/rules` — that is `/praxis-instructions`).
13
+ `{{workflow:praxis-handoff}}`) and NOT the authored agent instruction layer
14
+ (that is `{{workflow:praxis-instructions}}`).
15
15
 
16
16
  The wiki has two kinds of durable knowledge:
17
17
  - **Derived summaries** compress code, config, and canonical docs. The underlying
@@ -21,7 +21,7 @@ The wiki has two kinds of durable knowledge:
21
21
  diverge, surface the drift for human judgment instead of silently overwriting
22
22
  one with the other.
23
23
 
24
- Focus: $ARGUMENTS — if empty, refresh and lint the whole wiki at a high level.
24
+ Focus: {{arguments}} — if empty, refresh and lint the whole wiki at a high level.
25
25
 
26
26
  ## Phase 1 — Locate or create the wiki
27
27
 
@@ -31,8 +31,8 @@ Use the first of these that already exists; otherwise create the first one
31
31
  2. `wiki/`
32
32
  3. `.praxis/wiki/`
33
33
 
34
- - Existing entries: !`ls -R docs/wiki wiki .praxis/wiki 2>/dev/null || true`
35
- - Today (for log entries, do not guess): !`date +%Y-%m-%d`
34
+ - Existing entries: {{shell:ls -R docs/wiki wiki .praxis/wiki 2>/dev/null || true}}
35
+ - Today (for log entries, do not guess): {{shell:date +%Y-%m-%d}}
36
36
 
37
37
  Front the wiki with two entry-point files; create them if missing:
38
38
  - `index.md` — a catalog of every page: a link and a one-line summary each.
@@ -81,7 +81,7 @@ Health-check the wiki and fix what you can (ask before large deletions):
81
81
  - **Contradictions** — derived summaries that disagree with current code/config
82
82
  lose to the source; fix the wiki. Canonical-intent entries are different: if
83
83
  code and intent diverge, report the drift and route it to a decision/update
84
- step (or `/praxis-instructions` for instruction-layer changes) instead of deciding
84
+ step (or `{{workflow:praxis-instructions}}` for instruction-layer changes) instead of deciding
85
85
  automatically. Two wiki entries that disagree resolve to the more recent /
86
86
  authoritative / better-supported claim, with the resolution noted.
87
87
  - **Stale claims** — derived facts the current code has invalidated: fix or
@@ -1,52 +1,14 @@
1
1
  ## Wiki memory
2
2
 
3
- Knowledge outlives a single conversation. An agent that re-derives the same
4
- project facts every session wastes effort and drifts. Keep a durable, in-repo
5
- **knowledge wiki** linked markdown pages of long-lived knowledge that a fresh
6
- session reads instead of rediscovering (the Karpathy "LLM wiki" pattern). Because
7
- it lives in the repo, it is version-controlled and shared with the whole team,
8
- unlike a tool's machine-local native memory.
3
+ Knowledge outlives a single conversation. Keep a durable, in-repo knowledge
4
+ wiki linked markdown pages a future session reads instead of re-deriving —
5
+ distinct from a handoff (transient) and from authored agent instructions
6
+ (the instruction layer). At the start of a task, read the wiki's `index.md`
7
+ and follow the links that bear on the work.
9
8
 
10
- - **Two entry points.** Front the wiki with an `index.md` that lists every page
11
- with a one-line summary and a link, and a `log.md` that records — append-only —
12
- what changed in the wiki and when. Read the index first; it is the map.
13
- - **Add a glossary when terms collide.** When a project reuses a common word for
14
- a project-specific meaning, or coins its own vocabulary, keep a `glossary.md`
15
- of short term definitions — each pointing to the canonical source that owns
16
- it. The signal you already needed the page is one ambiguous term re-explained
17
- in scattered prose. Define what a term *is* and, where the word misleads, what
18
- it is *not*.
19
- - **Know which kind of entry you are editing.** Derived summaries compress code,
20
- config, and canonical docs; the underlying source wins on conflict. Canonical
21
- intent entries record decisions, rationale, scope, and design intent; when code
22
- and intent diverge, surface the drift for human judgment instead of silently
23
- overwriting one with the other.
24
- - **Keep decisions in one ledger when they are numbered or cited.** Use a single
25
- canonical `decisions.md`, append new `D<N>` rows, never renumber, and never
26
- scatter numbered decisions across topic pages.
27
- - An entry captures *durable* knowledge: architecture and how the parts fit, a
28
- hard-won gotcha and its cause, a workflow, a decision and its why. Not transient
29
- session state (that is a handoff) and not the authored instruction rules (those
30
- are `CLAUDE.md`/`.claude/rules`).
31
- - At the start of a task, read the index and follow the links that bear on the
32
- work — act on what is already known rather than re-deriving it.
33
- - When you learn something durable — including a useful answer or analysis you
34
- derived mid-session — add or update an entry, link it from the index, and note
35
- the change in the log. Prefer one topic per page, cross-linked, over a sprawling
36
- document; update the canonical page rather than create a near-duplicate.
37
- - Add machine-checkable `praxisAnchors` frontmatter for canonical sources when a
38
- page depends on them: `path`, `command`, and `section` anchors are hard-checked
39
- by `praxis check`; staleness/hash tripwires remain advisory future work.
40
- - Keep it true. Periodically **lint** the wiki (via `/praxis-wiki`): flag and fix
41
- contradictions, stale claims, orphan pages, and missing cross-references. A
42
- stale wiki misleads worse than none. Link the canonical source rather than
43
- restating it; restated facts drift independently of their source.
44
- - Never record a fact that isn't backed by the code, config, a canonical doc, or
45
- the user — the wiki is curated knowledge, not speculation.
46
- - Do wiki work by running `/praxis-wiki`, not by hand — bootstrapping, filing new
47
- knowledge, and linting all run the skill rather than hand-authoring pages and
48
- hand-editing `index.md`/`log.md` around it. It keeps the index, log, and anchors
49
- consistent. When the wiki pass is part of reconciling the methodology layer
50
- after a change, enter through the `/praxis-upkeep` front gate (which delegates
51
- here) instead of running it alone; call `/praxis-wiki` directly only for a
52
- deliberate single pass, e.g. first-run bootstrap.
9
+ When you learn something durable an architecture fact, a gotcha, a decision,
10
+ a workflow file or update it, and periodically lint the wiki for
11
+ contradictions and staleness. Do this by running `{{workflow:praxis-wiki}}`, not by hand.
12
+ When reconciling the methodology layer after a change, enter through
13
+ `{{workflow:praxis-upkeep}}`; call `{{workflow:praxis-wiki}}` directly only for a deliberate single
14
+ pass (e.g. first-run bootstrap).
@@ -8,6 +8,10 @@ Stack-specific craft for TypeScript/Node code. These say *how to add something
8
8
  well in this stack*; the concrete shape lives in this repo's own prior art, not
9
9
  here. Find the nearest existing example and mirror it.
10
10
 
11
+ Layer 1 rules (think before coding, simplicity first, surgical changes,
12
+ goal-driven execution) apply unchanged — this file adds only what is
13
+ Node-specific.
14
+
11
15
  - **Mirror the nearest module.** Before adding a feature, open the closest
12
16
  existing file that already does the same kind of thing (a sibling in the same
13
17
  directory, an adjacent route/command/service). Copy its structure — imports,
@@ -25,9 +29,6 @@ here. Find the nearest existing example and mirror it.
25
29
  validate external/untrusted input where it enters (a schema validator if the
26
30
  repo already uses one, e.g. zod). Don't re-validate data already typed and
27
31
  checked upstream.
28
- - **Surgical change.** Touch only what the task needs; match the surrounding
29
- style and the repo's lint/format config. Don't reformat or "improve" adjacent
30
- code. Every changed line should trace to the task.
31
32
  - **ESM vs CJS, follow the repo.** Match the module system, import extensions
32
33
  (`.js` specifiers under `"type": "module"`), and `tsconfig` target already in
33
34
  use — don't introduce a second convention.
@@ -8,6 +8,10 @@ Choosing *where* a test belongs matters as much as writing it. Pick the layer
8
8
  that fails for the right reason, and mirror the repo's existing tests of that
9
9
  kind for structure and fixtures.
10
10
 
11
+ Layer 1 rules (think before coding, simplicity first, surgical changes,
12
+ goal-driven execution) apply unchanged — this file adds only what is
13
+ Node-testing-specific.
14
+
11
15
  - **Harness before features.** A rule that matters has a test. Write (or extend)
12
16
  the test that pins the new behaviour *before or with* the code that satisfies
13
17
  it — never land logic whose only check is "it looked right". Make the failing
@@ -8,6 +8,10 @@ Stack-specific craft for Python backend code. These say *how to add something
8
8
  well in this stack*; the concrete shape lives in this repo's own prior art, not
9
9
  here. Find the nearest existing module and mirror it.
10
10
 
11
+ Layer 1 rules (think before coding, simplicity first, surgical changes,
12
+ goal-driven execution) apply unchanged — this file adds only what is
13
+ Python-specific.
14
+
11
15
  - **Mirror the nearest module.** Before adding a feature, open the closest
12
16
  existing file that already does the same kind of thing (a sibling in the same
13
17
  directory, an adjacent route/handler/service). Copy its structure — imports,
@@ -27,10 +31,6 @@ here. Find the nearest existing module and mirror it.
27
31
  boundaries; validate external/untrusted input where it enters (a schema
28
32
  validator if the repo already uses one, e.g. pydantic). Don't re-validate data
29
33
  already typed and checked upstream.
30
- - **Surgical change.** Touch only what the task needs; match the surrounding
31
- style and the repo's lint/format config (`black`/`ruff` if present). Don't
32
- reformat or "improve" adjacent code. Every changed line should trace to the
33
- task.
34
34
  - **Follow the repo's packaging conventions.** Match the module layout, import
35
35
  style (absolute vs relative), and packaging already in use — don't introduce a
36
36
  second convention. If the project uses `src/` layout, honour it; if it uses
@@ -8,6 +8,10 @@ Choosing *where* a test belongs matters as much as writing it. Pick the layer
8
8
  that fails for the right reason, and mirror the repo's existing tests of that
9
9
  kind for structure and fixtures.
10
10
 
11
+ Layer 1 rules (think before coding, simplicity first, surgical changes,
12
+ goal-driven execution) apply unchanged — this file adds only what is
13
+ Python-testing-specific.
14
+
11
15
  - **Harness before features.** A rule that matters has a test. Write (or extend)
12
16
  the test that pins the new behaviour *before or with* the code that satisfies
13
17
  it — never land logic whose only check is "it looked right". Make the failing
@@ -9,6 +9,10 @@ module shape, surgical change) lives in `node-recipes` — this file covers only
9
9
  what is React-specific. The concrete shape lives in this repo's own prior art,
10
10
  not here. Find the nearest existing component and mirror it.
11
11
 
12
+ Layer 1 rules (think before coding, simplicity first, surgical changes,
13
+ goal-driven execution) apply unchanged — this file adds only what is
14
+ React-specific.
15
+
12
16
  - **Mirror the nearest component.** Before adding a component, open the closest
13
17
  existing one that does the same kind of thing (a sibling in the same directory
14
18
  or feature folder). Copy its structure — file layout, how it exports, how it
@@ -8,6 +8,10 @@ Choosing *where* a test belongs matters as much as writing it. Pick the layer
8
8
  that fails for the right reason, and mirror the repo's existing tests of that
9
9
  kind for structure and setup.
10
10
 
11
+ Layer 1 rules (think before coding, simplicity first, surgical changes,
12
+ goal-driven execution) apply unchanged — this file adds only what is
13
+ React-testing-specific.
14
+
11
15
  - **Test behaviour, not implementation.** Query by roles and user-visible text
12
16
  (`getByRole`, `getByLabelText`, `getByText`) — not by CSS class, component
13
17
  display name, or internal state. A test that breaks on a classname rename