packwright 0.1.0__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 (121) hide show
  1. packwright-0.1.0/.github/ISSUE_TEMPLATE/adapter_request.yml +45 -0
  2. packwright-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +31 -0
  3. packwright-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  4. packwright-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +17 -0
  5. packwright-0.1.0/.github/pull_request_template.md +10 -0
  6. packwright-0.1.0/.github/workflows/ci.yml +53 -0
  7. packwright-0.1.0/.github/workflows/pages.yml +51 -0
  8. packwright-0.1.0/.github/workflows/release.yml +50 -0
  9. packwright-0.1.0/CHANGELOG.md +37 -0
  10. packwright-0.1.0/CONTRIBUTING.md +48 -0
  11. packwright-0.1.0/LICENSE +21 -0
  12. packwright-0.1.0/MANIFEST.in +16 -0
  13. packwright-0.1.0/PKG-INFO +213 -0
  14. packwright-0.1.0/README.md +179 -0
  15. packwright-0.1.0/README.zh-CN.md +179 -0
  16. packwright-0.1.0/SECURITY.md +11 -0
  17. packwright-0.1.0/assets/fonts/OFL-Fraunces.txt +93 -0
  18. packwright-0.1.0/assets/fonts/OFL-IBM-Plex-Mono.txt +93 -0
  19. packwright-0.1.0/assets/fonts/OFL-Inter.txt +93 -0
  20. packwright-0.1.0/assets/fonts/OFL-Packwright-Han-Serif.txt +96 -0
  21. packwright-0.1.0/assets/fonts/fraunces-latin-600.woff2 +0 -0
  22. packwright-0.1.0/assets/fonts/ibm-plex-mono-latin-400.woff2 +0 -0
  23. packwright-0.1.0/assets/fonts/ibm-plex-mono-latin-500.woff2 +0 -0
  24. packwright-0.1.0/assets/fonts/inter-latin-400-600.woff2 +0 -0
  25. packwright-0.1.0/assets/fonts/packwright-han-serif-600.otf +0 -0
  26. packwright-0.1.0/assets/mark-dark.svg +1 -0
  27. packwright-0.1.0/assets/mark-light.svg +1 -0
  28. packwright-0.1.0/assets/social-preview.png +0 -0
  29. packwright-0.1.0/assets/social-preview.svg +34 -0
  30. packwright-0.1.0/assets/tokens.css +41 -0
  31. packwright-0.1.0/docs/AGENT_ARCHETYPES.md +115 -0
  32. packwright-0.1.0/docs/CHARACTER_DRAFTING.md +99 -0
  33. packwright-0.1.0/docs/CLI.md +108 -0
  34. packwright-0.1.0/docs/CODEX_CHARACTER_WORKFLOW.md +102 -0
  35. packwright-0.1.0/docs/EMOTION_ENGINE.md +51 -0
  36. packwright-0.1.0/docs/USE_WITH_YOUR_AGENT.md +44 -0
  37. packwright-0.1.0/docs/releases/0.1.0.md +50 -0
  38. packwright-0.1.0/docs/releases/0.1.0rc1.md +48 -0
  39. packwright-0.1.0/examples/atlas-work/emotion/memory-events.yaml +17 -0
  40. packwright-0.1.0/examples/atlas-work/emotion/model.yaml +31 -0
  41. packwright-0.1.0/examples/atlas-work/emotion/state-schema.yaml +22 -0
  42. packwright-0.1.0/examples/atlas-work/emotion/update-policy.yaml +53 -0
  43. packwright-0.1.0/examples/atlas-work/emotion/voice-modulation.yaml +15 -0
  44. packwright-0.1.0/examples/atlas-work/identity/persona.md +39 -0
  45. packwright-0.1.0/examples/atlas-work/identity/relationship.md +15 -0
  46. packwright-0.1.0/examples/atlas-work/identity/voice.md +32 -0
  47. packwright-0.1.0/examples/atlas-work/mechanism/context-loading.yaml +39 -0
  48. packwright-0.1.0/examples/atlas-work/mechanism/memory-policy.yaml +84 -0
  49. packwright-0.1.0/examples/atlas-work/mechanism/session-guards.yaml +18 -0
  50. packwright-0.1.0/examples/atlas-work/mechanism.yaml +542 -0
  51. packwright-0.1.0/examples/atlas-work/memory/collaboration.md +16 -0
  52. packwright-0.1.0/examples/atlas-work/memory/emotion-state.json.example +25 -0
  53. packwright-0.1.0/examples/atlas-work/memory/index.md +33 -0
  54. packwright-0.1.0/examples/atlas-work/memory/knowledge_map.md +10 -0
  55. packwright-0.1.0/examples/atlas-work/memory/pinned.md +11 -0
  56. packwright-0.1.0/examples/atlas-work/memory/profile.md +24 -0
  57. packwright-0.1.0/examples/atlas-work/memory/projects/_template.md +25 -0
  58. packwright-0.1.0/examples/atlas-work/memory/recent-activity.md +9 -0
  59. packwright-0.1.0/examples/atlas-work/memory/relationship-state.md +17 -0
  60. packwright-0.1.0/examples/atlas-work/memory/session-index.md +11 -0
  61. packwright-0.1.0/examples/atlas-work/memory/source-map.md +18 -0
  62. packwright-0.1.0/examples/atlas-work/memory/todos.md +9 -0
  63. packwright-0.1.0/examples/atlas-work/memory/workstreams/_template.md +35 -0
  64. packwright-0.1.0/examples/atlas-work/memory/workstreams.md +43 -0
  65. packwright-0.1.0/examples/atlas-work/operating/boundaries.md +23 -0
  66. packwright-0.1.0/examples/atlas-work/operating/principles.md +21 -0
  67. packwright-0.1.0/examples/atlas-work/projection/ownership-contract.yaml +69 -0
  68. packwright-0.1.0/examples/atlas-work/projection/platform-capabilities.yaml +42 -0
  69. packwright-0.1.0/examples/atlas-work/skills/save-context/SKILL.md +22 -0
  70. packwright-0.1.0/examples/atlas-work/workspace/README.md +19 -0
  71. packwright-0.1.0/examples/atlas-work/workspace/_template/archive/.gitkeep +1 -0
  72. packwright-0.1.0/examples/atlas-work/workspace/_template/artifacts/.gitkeep +1 -0
  73. packwright-0.1.0/examples/atlas-work/workspace/_template/drafts/.gitkeep +1 -0
  74. packwright-0.1.0/examples/atlas-work/workspace/shared/.gitkeep +1 -0
  75. packwright-0.1.0/examples/character_intake.relationship.yaml +35 -0
  76. packwright-0.1.0/examples/character_intake.yaml +15 -0
  77. packwright-0.1.0/pyproject.toml +49 -0
  78. packwright-0.1.0/scripts/audit_public_tree.py +113 -0
  79. packwright-0.1.0/scripts/audit_zero_network.py +294 -0
  80. packwright-0.1.0/scripts/release-gate.sh +96 -0
  81. packwright-0.1.0/setup.cfg +4 -0
  82. packwright-0.1.0/site/demo.js +199 -0
  83. packwright-0.1.0/site/index.html +344 -0
  84. packwright-0.1.0/site/zh-CN.html +347 -0
  85. packwright-0.1.0/specs/reserved/emotion-engine.yaml +21 -0
  86. packwright-0.1.0/specs/reserved/runtime-surface.yaml +16 -0
  87. packwright-0.1.0/src/packwright/__init__.py +3 -0
  88. packwright-0.1.0/src/packwright/__main__.py +5 -0
  89. packwright-0.1.0/src/packwright/adapters/__init__.py +10 -0
  90. packwright-0.1.0/src/packwright/adapters/claude_code.py +377 -0
  91. packwright-0.1.0/src/packwright/adapters/codex.py +311 -0
  92. packwright-0.1.0/src/packwright/adapters/cursor.py +375 -0
  93. packwright-0.1.0/src/packwright/checker/__init__.py +3 -0
  94. packwright-0.1.0/src/packwright/checker/scoring.py +924 -0
  95. packwright-0.1.0/src/packwright/cli.py +971 -0
  96. packwright-0.1.0/src/packwright/core/__init__.py +57 -0
  97. packwright-0.1.0/src/packwright/core/adapter_layout.py +35 -0
  98. packwright-0.1.0/src/packwright/core/adopt.py +199 -0
  99. packwright-0.1.0/src/packwright/core/character_intake.py +1649 -0
  100. packwright-0.1.0/src/packwright/core/emotion_engine_contract.py +147 -0
  101. packwright-0.1.0/src/packwright/core/errors.py +13 -0
  102. packwright-0.1.0/src/packwright/core/handoff.py +531 -0
  103. packwright-0.1.0/src/packwright/core/install.py +2114 -0
  104. packwright-0.1.0/src/packwright/core/intake_contract.py +105 -0
  105. packwright-0.1.0/src/packwright/core/knowledge_contract.py +212 -0
  106. packwright-0.1.0/src/packwright/core/loader.py +35 -0
  107. packwright-0.1.0/src/packwright/core/memory_projection.py +126 -0
  108. packwright-0.1.0/src/packwright/core/naming.py +98 -0
  109. packwright-0.1.0/src/packwright/core/pack_metadata.py +100 -0
  110. packwright-0.1.0/src/packwright/core/path_safety.py +70 -0
  111. packwright-0.1.0/src/packwright/core/resolver.py +66 -0
  112. packwright-0.1.0/src/packwright/core/validation.py +645 -0
  113. packwright-0.1.0/src/packwright/core/workspace_contract.py +102 -0
  114. packwright-0.1.0/src/packwright.egg-info/PKG-INFO +213 -0
  115. packwright-0.1.0/src/packwright.egg-info/SOURCES.txt +119 -0
  116. packwright-0.1.0/src/packwright.egg-info/dependency_links.txt +1 -0
  117. packwright-0.1.0/src/packwright.egg-info/entry_points.txt +2 -0
  118. packwright-0.1.0/src/packwright.egg-info/requires.txt +9 -0
  119. packwright-0.1.0/src/packwright.egg-info/top_level.txt +1 -0
  120. packwright-0.1.0/tests/test_mvp_chain.py +2445 -0
  121. packwright-0.1.0/tests/test_release_audits.py +396 -0
@@ -0,0 +1,45 @@
1
+ name: Adapter request
2
+ description: Propose a runtime after checking its official file and extension contracts.
3
+ title: "[adapter] "
4
+ labels: [adapter]
5
+ body:
6
+ - type: input
7
+ id: runtime
8
+ attributes:
9
+ label: Runtime
10
+ placeholder: Runtime and current version
11
+ validations:
12
+ required: true
13
+ - type: textarea
14
+ id: documentation
15
+ attributes:
16
+ label: Official documentation
17
+ description: Link the runtime's official instructions, rules, skills, or extension documentation.
18
+ placeholder: One URL per line
19
+ validations:
20
+ required: true
21
+ - type: textarea
22
+ id: layout
23
+ attributes:
24
+ label: Native file layout
25
+ description: Where does this runtime expect instructions, reusable skills, memory routing, and project rules?
26
+ validations:
27
+ required: true
28
+ - type: textarea
29
+ id: boundaries
30
+ attributes:
31
+ label: Known projection boundaries
32
+ description: What Packwright state or behavior cannot be represented in this runtime?
33
+ validations:
34
+ required: true
35
+ - type: dropdown
36
+ id: testing
37
+ attributes:
38
+ label: Real-runtime testing
39
+ description: Can you test generated packs in an actual installation?
40
+ options:
41
+ - Yes, I can test locally
42
+ - I can help review but not run it
43
+ - No
44
+ validations:
45
+ required: true
@@ -0,0 +1,31 @@
1
+ name: Bug report
2
+ description: Report a reproducible Packwright defect using synthetic data.
3
+ title: "[bug] "
4
+ body:
5
+ - type: input
6
+ id: version
7
+ attributes:
8
+ label: Packwright version
9
+ placeholder: Output of packwright --version
10
+ validations:
11
+ required: true
12
+ - type: dropdown
13
+ id: adapter
14
+ attributes:
15
+ label: Adapter
16
+ options: [codex, claude-code, cursor, not adapter-specific]
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: reproduce
21
+ attributes:
22
+ label: Reproduction
23
+ description: Include commands and sanitized output. Never attach real memory or credentials.
24
+ validations:
25
+ required: true
26
+ - type: textarea
27
+ id: expected
28
+ attributes:
29
+ label: Expected behavior
30
+ validations:
31
+ required: true
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Questions and usage help
4
+ url: https://github.com/pioneerjeff-labs/packwright/discussions/categories/q-a
5
+ about: Ask how to build, install, migrate, diagnose, or score a Packwright target.
@@ -0,0 +1,17 @@
1
+ name: Feature request
2
+ description: Propose a focused improvement to the public v0.1 workflow.
3
+ title: "[feature] "
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: Problem
9
+ description: What user problem should Packwright solve?
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: outcome
14
+ attributes:
15
+ label: Desired outcome
16
+ validations:
17
+ required: true
@@ -0,0 +1,10 @@
1
+ ## Summary
2
+
3
+ Describe the user-visible change and its v0.1 scope.
4
+
5
+ ## Verification
6
+
7
+ - [ ] `scripts/release-gate.sh --quick`
8
+ - [ ] Tests cover the changed behavior
9
+ - [ ] No real memory, credentials, private paths, or build artifacts are included
10
+ - [ ] Migration changes preserve dry-run, confirmation, and receipt semantics
@@ -0,0 +1,53 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ env:
11
+ PACKWRIGHT_PUBLIC_AUDIT_REVISION: ${{ github.event.pull_request.head.sha }}
12
+
13
+ jobs:
14
+ test:
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ python: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
20
+ steps:
21
+ - uses: actions/checkout@v6
22
+ with:
23
+ fetch-depth: 0
24
+ - name: Fetch pull request head for public audit
25
+ if: github.event_name == 'pull_request'
26
+ run: git fetch --no-tags origin "pull/${{ github.event.number }}/head"
27
+ - uses: actions/setup-python@v6
28
+ with:
29
+ python-version: ${{ matrix.python }}
30
+ - run: python -m pip install -e '.[test]'
31
+ - run: scripts/release-gate.sh --quick
32
+
33
+ package:
34
+ runs-on: ubuntu-latest
35
+ steps:
36
+ - uses: actions/checkout@v6
37
+ with:
38
+ fetch-depth: 0
39
+ - name: Fetch pull request head for public audit
40
+ if: github.event_name == 'pull_request'
41
+ run: git fetch --no-tags origin "pull/${{ github.event.number }}/head"
42
+ - uses: actions/setup-python@v6
43
+ with:
44
+ python-version: "3.14"
45
+ - run: python -m pip install -e '.[test]'
46
+ - run: scripts/release-gate.sh --output-dir "$RUNNER_TEMP/packwright-dist"
47
+ - uses: actions/upload-artifact@v4
48
+ with:
49
+ name: packwright-0.1.0
50
+ path: |
51
+ ${{ runner.temp }}/packwright-dist/*.whl
52
+ ${{ runner.temp }}/packwright-dist/*.tar.gz
53
+ ${{ runner.temp }}/packwright-dist/release-artifacts.json
@@ -0,0 +1,51 @@
1
+ name: Deploy Pages
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - ".github/workflows/pages.yml"
8
+ - "site/**"
9
+ - "assets/fonts/**"
10
+ - "assets/social-preview.png"
11
+ workflow_dispatch:
12
+
13
+ permissions:
14
+ contents: read
15
+ pages: write
16
+ id-token: write
17
+
18
+ concurrency:
19
+ group: pages
20
+ cancel-in-progress: false
21
+
22
+ jobs:
23
+ build:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - name: Checkout
27
+ uses: actions/checkout@v6
28
+ - name: Configure Pages
29
+ uses: actions/configure-pages@v6
30
+ - name: Stage static site
31
+ run: |
32
+ mkdir -p _site/assets/fonts
33
+ cp -R site/. _site/
34
+ cp -R assets/fonts/. _site/assets/fonts/
35
+ cp assets/social-preview.png _site/assets/social-preview.png
36
+ sed -i 's#../assets/fonts/#assets/fonts/#g' _site/*.html
37
+ - name: Upload Pages artifact
38
+ uses: actions/upload-pages-artifact@v5
39
+ with:
40
+ path: _site
41
+
42
+ deploy:
43
+ needs: build
44
+ runs-on: ubuntu-latest
45
+ environment:
46
+ name: github-pages
47
+ url: ${{ steps.deployment.outputs.page_url }}
48
+ steps:
49
+ - name: Deploy to GitHub Pages
50
+ id: deployment
51
+ uses: actions/deploy-pages@v5
@@ -0,0 +1,50 @@
1
+ name: Publish
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ build:
12
+ name: Build and verify distributions
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v6
16
+ with:
17
+ fetch-depth: 0
18
+ - uses: actions/setup-python@v6
19
+ with:
20
+ python-version: "3.14"
21
+ - name: Verify release tag matches package version
22
+ run: |
23
+ PACKAGE_VERSION="$(python -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')"
24
+ test "$GITHUB_REF_NAME" = "v$PACKAGE_VERSION"
25
+ - run: python -m pip install -e '.[test]'
26
+ - run: scripts/release-gate.sh --output-dir "$RUNNER_TEMP/packwright-dist"
27
+ - uses: actions/upload-artifact@v4
28
+ with:
29
+ name: python-package-distributions
30
+ path: |
31
+ ${{ runner.temp }}/packwright-dist/*.whl
32
+ ${{ runner.temp }}/packwright-dist/*.tar.gz
33
+ if-no-files-found: error
34
+
35
+ publish:
36
+ name: Publish distributions to PyPI
37
+ needs: build
38
+ runs-on: ubuntu-latest
39
+ environment:
40
+ name: pypi
41
+ url: https://pypi.org/p/packwright
42
+ permissions:
43
+ id-token: write
44
+ steps:
45
+ - uses: actions/download-artifact@v5
46
+ with:
47
+ name: python-package-distributions
48
+ path: dist
49
+ - name: Publish distributions to PyPI
50
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,37 @@
1
+ # Changelog
2
+
3
+ All notable changes are documented here. Packwright follows Semantic Versioning.
4
+
5
+ ## [0.1.0] - 2026-07-14
6
+
7
+ ### Added
8
+
9
+ - Stable public release for Codex, Claude Code, and Cursor pack generation, installation, migration, diagnosis, and scoring.
10
+ - Artifact-lock verification and deterministic repair for Packwright-managed projections.
11
+ - First-class `draft-character` and `adopt` creation paths for custom and existing agents.
12
+
13
+ ### Changed
14
+
15
+ - `build` now refuses to overwrite existing pack artifacts unless `--force` is explicit.
16
+ - `install --force` preserves portable user state under `memory/`, `workspace/`, `knowledge/`, and `sources/`.
17
+ - Emotion Engine sidecar installation is explicit instead of being implied by the default light mode.
18
+ - Distributable metadata no longer records build-machine absolute source paths.
19
+ - Public starter presets are now nameless `code`, `work`, and `companion` starting roles; users supply the character name with `--name` and can customize responsibilities, capabilities, voice, boundaries, and emotional feedback.
20
+
21
+ ### Security
22
+
23
+ - Reject path traversal, absolute paths, source-root escapes, and destination symlink escapes across build, install, migration, doctor, and scoring paths.
24
+ - Keep `doctor --fix` limited to reproducible managed artifacts while excluding portable and live state.
25
+
26
+ ## [0.1.0rc1] - 2026-07-11
27
+
28
+ ### Added
29
+
30
+ - Six-command public CLI: `init`, `build`, `install`, `migrate`, `doctor`, and `score`.
31
+ - Native projections for Codex, Claude Code, and Cursor.
32
+ - Read-only migration plans with path-level generated, carried, rewritten, and excluded receipts.
33
+ - Self-contained installed-target metadata and pre/post-install scoring.
34
+ - Static zero-network audit, local release gate, packaging checks, and CI.
35
+
36
+ [0.1.0]: https://github.com/pioneerjeff-labs/packwright/releases/tag/v0.1.0
37
+ [0.1.0rc1]: https://github.com/pioneerjeff-labs/packwright/releases/tag/v0.1.0rc1
@@ -0,0 +1,48 @@
1
+ # Contributing
2
+
3
+ Packwright welcomes focused bug fixes, tests, documentation corrections, and adapter improvements. The project values receipts over broad claims: show the behavior, the command, and the verification.
4
+
5
+ ## Development setup
6
+
7
+ ```bash
8
+ git clone https://github.com/pioneerjeff-labs/packwright.git
9
+ cd packwright
10
+ python3 -m venv .venv
11
+ source .venv/bin/activate
12
+ python -m pip install -e '.[dev]'
13
+ ```
14
+
15
+ ## Verification
16
+
17
+ Run the quick gate while iterating:
18
+
19
+ ```bash
20
+ scripts/release-gate.sh --quick
21
+ ```
22
+
23
+ Before opening a pull request, run the complete gate:
24
+
25
+ ```bash
26
+ scripts/release-gate.sh
27
+ ```
28
+
29
+ Every user-visible behavior change needs a test or a concise explanation of why automated coverage is not practical.
30
+
31
+ ## Adapter work
32
+
33
+ New adapters land when they pass the checker. Open an [adapter request](https://github.com/pioneerjeff-labs/packwright/issues/new?template=adapter_request.yml) first and include:
34
+
35
+ - the runtime's official instructions, rules, or skills documentation;
36
+ - the native file locations and formats;
37
+ - whether you can test a real local installation;
38
+ - known features that cannot be projected.
39
+
40
+ An adapter is not complete when it renders files. It must build, install, migrate in both directions where applicable, expose exclusions honestly, and pass the checker.
41
+
42
+ ## Public-data rule
43
+
44
+ Use synthetic fixtures. Never include real agent memory, credentials, private paths, private launch material, or generated build artifacts. Migration changes must preserve the dry-run-before-write contract and report every generated, carried, rewritten, and excluded path.
45
+
46
+ ## Documentation voice
47
+
48
+ State what Packwright does and what was tested. Avoid claims such as “seamless,” “magical,” or support for runtimes that do not have a passing adapter. A `100.0` structure score is not a runtime guarantee.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 pioneerjeff-labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,16 @@
1
+ include LICENSE
2
+ include CHANGELOG.md
3
+ include CONTRIBUTING.md
4
+ include README.md
5
+ include README.zh-CN.md
6
+ include SECURITY.md
7
+ recursive-include docs *.md
8
+ recursive-include examples *
9
+ recursive-include assets *.css *.svg *.png *.woff2 *.otf *.txt
10
+ recursive-include site *.html *.css *.svg *.js
11
+ recursive-include specs *.yaml
12
+ recursive-include tests *.py
13
+ recursive-include scripts *.py *.sh
14
+ recursive-include .github *.yml *.yaml *.md
15
+ global-exclude *.py[cod]
16
+ global-exclude .DS_Store
@@ -0,0 +1,213 @@
1
+ Metadata-Version: 2.4
2
+ Name: packwright
3
+ Version: 0.1.0
4
+ Summary: Build, install, and migrate portable agent packs across Codex, Claude Code, and Cursor.
5
+ Author: pioneerjeff-labs
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://pioneerjeff-labs.github.io/packwright/
8
+ Project-URL: Documentation, https://github.com/pioneerjeff-labs/packwright#readme
9
+ Project-URL: Issues, https://github.com/pioneerjeff-labs/packwright/issues
10
+ Project-URL: Changelog, https://github.com/pioneerjeff-labs/packwright/blob/main/CHANGELOG.md
11
+ Keywords: agents,codex,claude-code,cursor,migration
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Topic :: Software Development :: Build Tools
23
+ Requires-Python: >=3.9
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: PyYAML>=6.0
27
+ Provides-Extra: test
28
+ Requires-Dist: build>=1.2; extra == "test"
29
+ Requires-Dist: twine>=5.1; extra == "test"
30
+ Provides-Extra: dev
31
+ Requires-Dist: build>=1.2; extra == "dev"
32
+ Requires-Dist: twine>=5.1; extra == "dev"
33
+ Dynamic: license-file
34
+
35
+ <p align="center">
36
+ <picture>
37
+ <source media="(prefers-color-scheme: dark)" srcset="assets/mark-dark.svg">
38
+ <source media="(prefers-color-scheme: light)" srcset="assets/mark-light.svg">
39
+ <img alt="Packwright dovetail mark" src="assets/mark-light.svg" width="88" height="88">
40
+ </picture>
41
+ </p>
42
+
43
+ <h1 align="center">Packwright</h1>
44
+
45
+ <p align="center"><strong>Build your agent once. Carry it everywhere.</strong></p>
46
+
47
+ <p align="center">
48
+ Compile one agent definition—rules, memory, skills, and workspace—into native packs<br>
49
+ for Codex, Claude Code, and Cursor. Build, install, migrate, and verify with plain files.
50
+ </p>
51
+
52
+ <p align="center">
53
+ <strong><a href="https://pioneerjeff-labs.github.io/packwright/">Explore the live product website →</a></strong><br>
54
+ Watch the animated CLI, follow a Claude Code → Codex migration, and switch the Quickstart between Claude Code, Codex, and Cursor.<br>
55
+ <a href="https://pioneerjeff-labs.github.io/packwright/">English</a> · <a href="https://pioneerjeff-labs.github.io/packwright/zh-CN.html">简体中文</a>
56
+ </p>
57
+
58
+ <p align="center">
59
+ <a href="https://pioneerjeff-labs.github.io/packwright/">
60
+ <img alt="Open the Packwright live product website" src="assets/social-preview.png" width="800">
61
+ </a>
62
+ </p>
63
+
64
+ <p align="center">
65
+ <a href="https://pioneerjeff-labs.github.io/packwright/"><img alt="Packwright website" src="https://img.shields.io/badge/website-live-9C4F16?style=flat-square"></a>
66
+ <a href="https://github.com/pioneerjeff-labs/packwright/actions/workflows/ci.yml"><img alt="CI status" src="https://github.com/pioneerjeff-labs/packwright/actions/workflows/ci.yml/badge.svg"></a>
67
+ <a href="LICENSE"><img alt="MIT license" src="https://img.shields.io/badge/license-MIT-5C5245?style=flat-square"></a>
68
+ <a href="README.zh-CN.md"><img alt="中文 README" src="https://img.shields.io/badge/README-中文-B87333?style=flat-square"></a>
69
+ </p>
70
+
71
+ <p align="center"><strong>Native packs. Portable state. Preview every migration before any files are written.</strong></p>
72
+
73
+ > [!NOTE]
74
+ > Packwright itself makes no network requests and sends no telemetry. Your coding runtime may still send files it reads to its own model provider; its data policy continues to apply.
75
+
76
+ ## Start with your coding agent
77
+
78
+ The shortest interface is a conversation. Install Packwright, then paste the operating prompt into Codex, Claude Code, or Cursor:
79
+
80
+ ```bash
81
+ python -m pip install packwright==0.1.0
82
+ ```
83
+
84
+ **[Open the paste-ready agent prompt →](docs/USE_WITH_YOUR_AGENT.md)**
85
+
86
+ For a new agent, describe what it should do and choose its name. The prompt makes your coding agent draft a canonical intake, confirm it with you, build the pack, and verify the installed target. For migration, it previews the receipt and waits for approval before writing.
87
+
88
+ ## Create your own
89
+
90
+ Generate Packwright's interviewer contract, then let your coding agent turn the conversation into a confirmed `character_intake.yaml`:
91
+
92
+ ```bash
93
+ packwright draft-character \
94
+ --user-name Morgan \
95
+ --prompt-out work/character-interviewer.md
96
+ ```
97
+
98
+ After the agent saves the confirmed intake, create editable source and build it:
99
+
100
+ ```bash
101
+ packwright init work/nova-intake.yaml -o work/nova
102
+ packwright build work/nova --adapter claude-code -o pack/nova-claude
103
+ packwright install pack/nova-claude --adapter claude-code --target project/nova-claude
104
+ ```
105
+
106
+ Already have an agent or workspace? Inventory it before importing anything:
107
+
108
+ ```bash
109
+ packwright adopt --from existing-agent --dry-run
110
+ ```
111
+
112
+ ## Or use a nameless starter
113
+
114
+ Three presets cover common starting points. Customize responsibilities, capabilities, voice, boundaries, and emotional feedback; the preset shapes how the agent works, while you always choose its name.
115
+
116
+ | Preset | Starting role |
117
+ |---|---|
118
+ | `code` | Expert engineer — builds, reviews, debugs, tests, and ships technical work |
119
+ | `work` | Versatile assistant — plans projects, drafts deliverables, clarifies decisions, and keeps execution moving |
120
+ | `companion` | Personal secretary — supports daily routines, life decisions, travel planning, and emotional support |
121
+
122
+ Choose a preset, answer a few simple questions, and supply the character name yourself.
123
+
124
+ ```bash
125
+ packwright init --template code --name Nova --user-name Morgan -o work/nova
126
+ packwright build work/nova --adapter claude-code -o pack/nova-claude
127
+ packwright install pack/nova-claude --adapter claude-code --target project/nova-claude
128
+ ```
129
+
130
+ `Nova` is only an example of a user-chosen name. Edit the generated name, relationship, voice, and boundaries whenever you need.
131
+
132
+ Preview a move from Claude Code to Codex. The destination is not created during this step:
133
+
134
+ ```bash
135
+ packwright migrate project/nova-claude \
136
+ --to codex \
137
+ --target project/nova-codex --dry-run
138
+ ```
139
+
140
+ The plan names four kinds of paths:
141
+
142
+ | Receipt section | Meaning |
143
+ |---|---|
144
+ | `generated` | Files compiled for the destination runtime |
145
+ | `carried` | Portable user files copied and SHA-256 verified |
146
+ | `rewritten` | Packwright-managed routing lines changed for the destination |
147
+ | `excluded` | Runtime-specific files deliberately left behind |
148
+
149
+ After reviewing the receipt, apply that exact move and verify the result:
150
+
151
+ ```bash
152
+ packwright migrate project/nova-claude \
153
+ --to codex \
154
+ --target project/nova-codex --yes
155
+ packwright doctor project/nova-codex
156
+ packwright score project/nova-codex
157
+ ```
158
+
159
+ Add `--json` to the dry run and confirmed run for a machine-readable `packwright-migration/v1` receipt. Packwright refuses to overwrite an existing target unless you separately opt into `--force`.
160
+
161
+ ## Why not just prompts?
162
+
163
+ A working coding agent is more than its top-level instructions, and each runtime expects a different native layout:
164
+
165
+ | Runtime | Native entry | Reusable procedures |
166
+ |---|---|---|
167
+ | Codex | `AGENTS.md` | `.agents/skills/<name>/SKILL.md` |
168
+ | Claude Code | `CLAUDE.md` | `.claude/skills/<name>/SKILL.md` |
169
+ | Cursor | `.cursor/rules/<name>.mdc` | `.cursor/rules/<name>-save-context.mdc` |
170
+
171
+ Packwright treats those files as compiled projections. Your editable source owns the behavior; adapters own the runtime layout; migration carries portable state and reports the seams instead of hiding them.
172
+
173
+ ## Build once, carry everywhere
174
+
175
+ ```text
176
+ editable source
177
+ identity · memory contract · skills · workspace rules
178
+
179
+ ├── packwright build --adapter codex → AGENTS.md + .agents/skills/
180
+ ├── packwright build --adapter claude-code → CLAUDE.md + .claude/skills/
181
+ └── packwright build --adapter cursor → .cursor/rules/*.mdc
182
+ ```
183
+
184
+ Every pack and installed target includes self-contained `.packwright/` metadata: the canonical source snapshot, artifact lock, and checker receipt. You can relocate a target and still run `migrate`, `doctor`, and `score` without its original build directory.
185
+
186
+ ## Move a working agent
187
+
188
+ `migrate` recompiles runtime-native files and carries portable state into the destination. It reports what cannot carry before it writes, then waits for an explicit `--yes`. The receipt is the proof behind “carry it everywhere,” not a promise that unlike runtimes have no seams.
189
+
190
+ ## What the checks prove
191
+
192
+ - `score` evaluates the public pack structure and artifact contract. `100.0` is a structural pass, not a promise that a runtime will behave perfectly.
193
+ - `doctor` verifies Packwright-managed projection hashes and can repair reproducible drift without treating portable user state as generated output.
194
+ - Migration verifies carried and rewritten files by hash and records planned and installed scores.
195
+ - Packwright ships six directed migration paths across the three current adapters. New adapters land when they pass the checker.
196
+
197
+ ## Current release boundary
198
+
199
+ `0.1.0` is Packwright's first stable release. The supported destination adapters are Codex, Claude Code, and Cursor. Packwright is local tooling, not cloud sync, and its plain-file structure score is separate from real runtime compatibility.
200
+
201
+ ## Documentation
202
+
203
+ - [Live product website](https://pioneerjeff-labs.github.io/packwright/) · [简体中文](https://pioneerjeff-labs.github.io/packwright/zh-CN.html)
204
+ - [CLI contract](docs/CLI.md)
205
+ - [Use Packwright with your coding agent](docs/USE_WITH_YOUR_AGENT.md)
206
+ - [Character drafting](docs/CHARACTER_DRAFTING.md)
207
+ - [Agent archetypes](docs/AGENT_ARCHETYPES.md)
208
+ - [Optional Emotion Engine sidecar](docs/EMOTION_ENGINE.md)
209
+ - [0.1.0 release notes](docs/releases/0.1.0.md)
210
+ - [Contributing](CONTRIBUTING.md)
211
+ - [Security](SECURITY.md)
212
+
213
+ Packwright is open source under the [MIT License](LICENSE).