@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.
- package/README.md +34 -20
- package/dist/codex-marketplace.d.ts +19 -0
- package/dist/codex-marketplace.js +113 -0
- package/dist/codex-marketplace.js.map +1 -0
- package/dist/codex-security.d.ts +11 -0
- package/dist/codex-security.js +144 -0
- package/dist/codex-security.js.map +1 -0
- package/dist/emit.d.ts +38 -2
- package/dist/emit.js +167 -13
- package/dist/emit.js.map +1 -1
- package/dist/init.d.ts +16 -6
- package/dist/init.js +47 -10
- package/dist/init.js.map +1 -1
- package/dist/manifest.d.ts +2 -2
- package/dist/manifest.js +1 -1
- package/dist/manifest.js.map +1 -1
- package/dist/packages.d.ts +1 -1
- package/dist/plugins.d.ts +14 -0
- package/dist/plugins.js +9 -0
- package/dist/plugins.js.map +1 -1
- package/dist/program.d.ts +8 -0
- package/dist/program.js +93 -30
- package/dist/program.js.map +1 -1
- package/dist/shared-instructions.d.ts +21 -0
- package/dist/shared-instructions.js +63 -0
- package/dist/shared-instructions.js.map +1 -0
- package/dist/sync.d.ts +8 -1
- package/dist/sync.js +210 -7
- package/dist/sync.js.map +1 -1
- package/package.json +1 -1
- package/packages/external/ponytail/plugins.yaml +4 -1
- package/packages/layer1/instruction-upkeep/commands/instructions.md +14 -5
- package/packages/layer1/instruction-upkeep/rules.md +11 -23
- package/packages/layer1/onboarding/commands/onboard.md +42 -24
- package/packages/layer1/onboarding/rules.md +6 -10
- package/packages/layer1/safe-permissions/permissions.yaml +2 -2
- package/packages/layer1/session-handoff/commands/handoff.md +5 -5
- package/packages/layer1/session-handoff/rules.md +10 -57
- package/packages/layer1/upkeep/commands/upkeep.md +8 -5
- package/packages/layer1/upkeep/rules.md +12 -15
- package/packages/layer1/wiki-memory/commands/wiki.md +6 -6
- package/packages/layer1/wiki-memory/rules.md +11 -49
- package/packages/layer2/node-recipes/rules.md +4 -3
- package/packages/layer2/node-testing/rules.md +4 -0
- package/packages/layer2/python-backend-recipes/rules.md +4 -4
- package/packages/layer2/python-testing/rules.md +4 -0
- package/packages/layer2/react-components/rules.md +4 -0
- 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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 (
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
14
|
-
|
|
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:
|
|
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:
|
|
35
|
-
- Today (for log entries, do not guess):
|
|
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
|
|
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.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|