packwright 0.1.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.
@@ -0,0 +1,102 @@
1
+ WORKSPACE_ROOT = "workspace"
2
+ WORKSPACE_LAYOUT = "domain_first_lifecycle_second"
3
+ WORKSPACE_DOMAIN_TEMPLATE_DIR = "workspace/_template"
4
+ WORKSPACE_SHARED_DIR = "workspace/shared"
5
+ WORKSPACE_INDEX_OWNER = "memory/source-map.md"
6
+ WORKSPACE_LIFECYCLE_DIRS = ("drafts", "artifacts", "archive")
7
+ WORKSPACE_SHARED_ARTIFACT_DIRS = (
8
+ "workspace/shared/artifacts/handoffs",
9
+ "workspace/shared/artifacts/session-briefs",
10
+ )
11
+
12
+
13
+ def workspace_skeleton_paths():
14
+ return tuple(
15
+ f"{WORKSPACE_DOMAIN_TEMPLATE_DIR}/{name}/.gitkeep"
16
+ for name in WORKSPACE_LIFECYCLE_DIRS
17
+ ) + (f"{WORKSPACE_SHARED_DIR}/.gitkeep",) + tuple(
18
+ f"{path}/.gitkeep" for path in WORKSPACE_SHARED_ARTIFACT_DIRS
19
+ )
20
+
21
+
22
+ def workspace_required_dirs():
23
+ return (
24
+ WORKSPACE_ROOT,
25
+ WORKSPACE_DOMAIN_TEMPLATE_DIR,
26
+ *(f"{WORKSPACE_DOMAIN_TEMPLATE_DIR}/{name}" for name in WORKSPACE_LIFECYCLE_DIRS),
27
+ WORKSPACE_SHARED_DIR,
28
+ "workspace/shared/artifacts",
29
+ *WORKSPACE_SHARED_ARTIFACT_DIRS,
30
+ )
31
+
32
+
33
+ def workspace_artifacts():
34
+ return ("workspace/README.md", *workspace_skeleton_paths())
35
+
36
+
37
+ def workspace_files(readme):
38
+ files = {"workspace/README.md": readme}
39
+ files.update({path: "" for path in workspace_skeleton_paths()})
40
+ return files
41
+
42
+
43
+ def workspace_readme():
44
+ return (
45
+ "# Workspace\n\n"
46
+ "Use this directory for generated work products, not durable memory.\n\n"
47
+ "## Directories\n\n"
48
+ "- `workspace/<domain>/drafts/`: temporary drafts, explorations, and working versions.\n"
49
+ "- `workspace/<domain>/artifacts/`: final or reusable deliverables.\n"
50
+ "- `workspace/<domain>/archive/`: old outputs kept for reference.\n"
51
+ "- `workspace/shared/`: cross-domain outputs only.\n"
52
+ "- `workspace/shared/artifacts/handoffs/`: real cross-agent or cross-runtime handoff files.\n"
53
+ "- `workspace/shared/artifacts/session-briefs/`: same-agent next-session preparation files.\n"
54
+ "- `workspace/_template/`: copy when a new workstream needs workspace storage.\n\n"
55
+ "## Rules\n\n"
56
+ "- Keep memory files focused on state, decisions, and pointers.\n"
57
+ "- Index important workspace outputs in `memory/source-map.md`.\n"
58
+ "- Move durable project state into `memory/projects/<slug>.md`, not workspace files.\n"
59
+ )
60
+
61
+
62
+ def workspace_feature():
63
+ return {
64
+ "root": WORKSPACE_ROOT,
65
+ "layout": WORKSPACE_LAYOUT,
66
+ "domain_template": WORKSPACE_DOMAIN_TEMPLATE_DIR,
67
+ "shared": WORKSPACE_SHARED_DIR,
68
+ "shared_artifact_dirs": list(WORKSPACE_SHARED_ARTIFACT_DIRS),
69
+ "lifecycle_dirs": list(WORKSPACE_LIFECYCLE_DIRS),
70
+ "index_owner": WORKSPACE_INDEX_OWNER,
71
+ }
72
+
73
+
74
+ def workspace_spec():
75
+ return {
76
+ "root": WORKSPACE_ROOT,
77
+ "layout": WORKSPACE_LAYOUT,
78
+ "domain_template_dir": WORKSPACE_DOMAIN_TEMPLATE_DIR,
79
+ "shared_dir": WORKSPACE_SHARED_DIR,
80
+ "lifecycle_dirs": list(WORKSPACE_LIFECYCLE_DIRS),
81
+ "index_owner": WORKSPACE_INDEX_OWNER,
82
+ "rules": [
83
+ "Use workspace/<domain>/drafts for temporary generated work.",
84
+ "Use workspace/<domain>/artifacts for durable deliverables the user may reuse.",
85
+ "Use workspace/<domain>/archive for old deliverables kept for reference.",
86
+ "Use workspace/shared only for cross-domain outputs.",
87
+ "Use workspace/shared/artifacts/handoffs for real cross-agent or cross-runtime handoff files.",
88
+ "Use workspace/shared/artifacts/session-briefs for same-agent next-session preparation files.",
89
+ "Index important workspace outputs in memory/source-map.md instead of copying content into memory files.",
90
+ ],
91
+ }
92
+
93
+
94
+ def workspace_readme_required_markers():
95
+ return (
96
+ WORKSPACE_INDEX_OWNER,
97
+ "workspace/<domain>/drafts/",
98
+ "workspace/<domain>/artifacts/",
99
+ "workspace/shared/",
100
+ "workspace/shared/artifacts/handoffs/",
101
+ "workspace/shared/artifacts/session-briefs/",
102
+ )
@@ -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).
@@ -0,0 +1,33 @@
1
+ packwright/__init__.py,sha256=sQUsvrd5EshcTEs5nYJ5zz4FZN6FIsV-1G7CEjvYfV4,61
2
+ packwright/__main__.py,sha256=PSQ4rpL0dG6f-qH4N7H-gD9igQkdHzH4yVZDcW8lfZo,80
3
+ packwright/cli.py,sha256=l8R-xlPvCvTi3IZU-2WiaDvX4gmm1CukSeWu8P2deW8,36962
4
+ packwright/adapters/__init__.py,sha256=n5-TZrT3iDcljNUPtpd2lc_1Y_g27P9992ip83uAeck,300
5
+ packwright/adapters/claude_code.py,sha256=8J7b-t9vZCtYxG-EabXp2O0ckTI--i-cqCc1sWmPw1s,16822
6
+ packwright/adapters/codex.py,sha256=mQ-o5IYRiiU9nc8kcYg_zw5LV9-_E-2R7c54HApdNRk,15318
7
+ packwright/adapters/cursor.py,sha256=fswpYPSIUcOKKPhK6Dsai3ZWp1FgDPHHXt8WCAYX-Ko,18790
8
+ packwright/checker/__init__.py,sha256=bjczkvMuzmHuG2Ig_vWLQgGY0QJ4cRfNPLQfXeDOtuU,68
9
+ packwright/checker/scoring.py,sha256=I0vQb63Dm3FlBN-BTZRSB5FJ9S8n2WrULFjj0_-k-E8,34803
10
+ packwright/core/__init__.py,sha256=U2-Vp6xOG4QdjKdu0lAWgX8IGEwGRR39j0KZ6nIVy-0,1662
11
+ packwright/core/adapter_layout.py,sha256=azR1b-IazUR6Ruu-iMdtKbc83zLRGTIg0AK11nHKQSA,921
12
+ packwright/core/adopt.py,sha256=TFDYFCguR8jwm7GU6ZD_pT7609KJRMfd9sKKHKoKYOI,6925
13
+ packwright/core/character_intake.py,sha256=POfFMutsgRiR_zm8O1cOLRv0KpBV-0wI_il6nxLyJB0,74597
14
+ packwright/core/emotion_engine_contract.py,sha256=qrX2GHPSixvg8E3zgO1iWGRkSbq6Yq8NPGh007qSwxc,6527
15
+ packwright/core/errors.py,sha256=H4tPDEUD8e5kkOIixh1ILw9Bzlere6tz0VJ3TfX0Fxs,464
16
+ packwright/core/handoff.py,sha256=T1JrEamEDDonFxvu5d9oNRy7qVUhk7VcRbxb2wqkCVo,18707
17
+ packwright/core/install.py,sha256=XLSSw0k24PYj8UwKsSSmm52zCgMJqdKLkLGZb6jQSjg,85394
18
+ packwright/core/intake_contract.py,sha256=MV5rkZN6042daN4TLYdvgpJF41bVAZNQ10PJ9IRqo7Y,5294
19
+ packwright/core/knowledge_contract.py,sha256=V6m_oUpCNuRhvcR5md2jOLjnURHP41w8P7QMFiyKyYs,8020
20
+ packwright/core/loader.py,sha256=vr7VrXjiGWRkvHjztXwRDOyEOcM0zjOqH0w49omX-EU,1045
21
+ packwright/core/memory_projection.py,sha256=pzNUaXGKBl53mv1CD-_rLdRCngMS5lD7L8Ukz9VbabQ,4868
22
+ packwright/core/naming.py,sha256=Lq0cH2RB65KR-pJnFD5VPt0qApxX0y0kFP4jg56-t78,3232
23
+ packwright/core/pack_metadata.py,sha256=zCBD8PkusaB2yuoamINHC3RWRMKkBjxAcdAr9-HYzb4,3780
24
+ packwright/core/path_safety.py,sha256=QtSnSaxAmgxyaaNDE59hW0nbf-dpaThiBZtVMqM2G3k,3170
25
+ packwright/core/resolver.py,sha256=-_BsW_gM3LfvI-_Vil57GZmqYYyttlNMJ3H2AGIZVNg,2149
26
+ packwright/core/validation.py,sha256=RK9SP7kjo3MOuonKHwmuCPl_zL1jd2KvD_evGFE-Ma0,26336
27
+ packwright/core/workspace_contract.py,sha256=GrZDcqTiu9Qvz4h5HwFuPJWAQxIyYJBPtzHwvWs0cWk,4031
28
+ packwright-0.1.0.dist-info/licenses/LICENSE,sha256=hN8ArnqkeuXOndFwP5yGel9pVtPtDQrMvyqSd48oNEQ,1073
29
+ packwright-0.1.0.dist-info/METADATA,sha256=16iEN3hIs3H2VOLnJEnJmHqRBb-9oQqqNlWBTlghg6A,10032
30
+ packwright-0.1.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
31
+ packwright-0.1.0.dist-info/entry_points.txt,sha256=fMWtmYWrnxVCxNKAfvl6QEIHGyhiPrMHZLj15e2SPz0,51
32
+ packwright-0.1.0.dist-info/top_level.txt,sha256=97Gr-aAWj6Yw7XFcrECPSv0WoaQVPrhXqM0blNZhD9Y,11
33
+ packwright-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ packwright = packwright.cli:main
@@ -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 @@
1
+ packwright