kokorox 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 (155) hide show
  1. kokorox-0.1.0/.codex-plugin/plugin.json +20 -0
  2. kokorox-0.1.0/LICENSE +21 -0
  3. kokorox-0.1.0/MANIFEST.in +1 -0
  4. kokorox-0.1.0/PKG-INFO +377 -0
  5. kokorox-0.1.0/README.md +345 -0
  6. kokorox-0.1.0/pyproject.toml +127 -0
  7. kokorox-0.1.0/schemas/v1/build-validation-report.schema.json +111 -0
  8. kokorox-0.1.0/schemas/v1/character-build-request.schema.json +218 -0
  9. kokorox-0.1.0/schemas/v1/character-default-config.schema.json +116 -0
  10. kokorox-0.1.0/schemas/v1/character-draft.schema.json +127 -0
  11. kokorox-0.1.0/schemas/v1/character-source.schema.json +322 -0
  12. kokorox-0.1.0/schemas/v1/common.schema.json +28 -0
  13. kokorox-0.1.0/schemas/v1/compiled-pack.schema.json +280 -0
  14. kokorox-0.1.0/schemas/v1/installed-pack-registry.schema.json +135 -0
  15. kokorox-0.1.0/schemas/v1/interaction-event.schema.json +75 -0
  16. kokorox-0.1.0/schemas/v1/karc-manifest.schema.json +313 -0
  17. kokorox-0.1.0/schemas/v1/language-policy.schema.json +97 -0
  18. kokorox-0.1.0/schemas/v1/memory-reference.schema.json +134 -0
  19. kokorox-0.1.0/schemas/v1/pack-compatibility-report.schema.json +348 -0
  20. kokorox-0.1.0/schemas/v1/pack-hard-validation-report.schema.json +458 -0
  21. kokorox-0.1.0/schemas/v1/pack-migration-plan.schema.json +209 -0
  22. kokorox-0.1.0/schemas/v1/pack-promotion-record.schema.json +151 -0
  23. kokorox-0.1.0/schemas/v1/pack-publication-readiness-report.schema.json +418 -0
  24. kokorox-0.1.0/schemas/v1/pack-review-attestation.schema.json +197 -0
  25. kokorox-0.1.0/schemas/v1/pack-soft-evaluation-input.schema.json +164 -0
  26. kokorox-0.1.0/schemas/v1/pack-soft-evaluation-report.schema.json +288 -0
  27. kokorox-0.1.0/schemas/v1/persistence-consent.schema.json +209 -0
  28. kokorox-0.1.0/schemas/v1/persistence-export.schema.json +587 -0
  29. kokorox-0.1.0/schemas/v1/persistent-character-state.schema.json +336 -0
  30. kokorox-0.1.0/schemas/v1/persistent-state-event.schema.json +388 -0
  31. kokorox-0.1.0/schemas/v1/relationship-state.schema.json +75 -0
  32. kokorox-0.1.0/schemas/v1/render-plan.schema.json +90 -0
  33. kokorox-0.1.0/schemas/v1/research-bundle.schema.json +742 -0
  34. kokorox-0.1.0/schemas/v1/research-claim.schema.json +264 -0
  35. kokorox-0.1.0/schemas/v1/research-conflict.schema.json +164 -0
  36. kokorox-0.1.0/schemas/v1/research-coverage.schema.json +130 -0
  37. kokorox-0.1.0/schemas/v1/research-request.schema.json +176 -0
  38. kokorox-0.1.0/schemas/v1/research-source-record.schema.json +156 -0
  39. kokorox-0.1.0/schemas/v1/research-validation-report.schema.json +209 -0
  40. kokorox-0.1.0/schemas/v1/research-workspace.schema.json +178 -0
  41. kokorox-0.1.0/schemas/v1/semantic-result.schema.json +74 -0
  42. kokorox-0.1.0/schemas/v1/session-manifest.schema.json +71 -0
  43. kokorox-0.1.0/schemas/v1/state-migration-plan.schema.json +180 -0
  44. kokorox-0.1.0/schemas/v1/validation-result.schema.json +98 -0
  45. kokorox-0.1.0/setup.cfg +4 -0
  46. kokorox-0.1.0/skills/authoring-character-packs/SKILL.md +35 -0
  47. kokorox-0.1.0/skills/authoring-character-packs/agents/claude.yaml +4 -0
  48. kokorox-0.1.0/skills/authoring-character-packs/agents/codex.yaml +4 -0
  49. kokorox-0.1.0/skills/authoring-character-packs/agents/copilot.yaml +4 -0
  50. kokorox-0.1.0/skills/authoring-character-packs/agents/cursor.yaml +4 -0
  51. kokorox-0.1.0/skills/authoring-character-packs/agents/deepseek.yaml +4 -0
  52. kokorox-0.1.0/skills/authoring-character-packs/agents/gemini.yaml +4 -0
  53. kokorox-0.1.0/skills/authoring-character-packs/agents/generic.yaml +4 -0
  54. kokorox-0.1.0/skills/authoring-character-packs/agents/kimi.yaml +4 -0
  55. kokorox-0.1.0/skills/authoring-character-packs/agents/openai.yaml +4 -0
  56. kokorox-0.1.0/skills/authoring-character-packs/agents/qwen.yaml +4 -0
  57. kokorox-0.1.0/skills/authoring-character-packs/references/authoring-contract.md +79 -0
  58. kokorox-0.1.0/skills/researching-characters/SKILL.md +42 -0
  59. kokorox-0.1.0/skills/researching-characters/agents/claude.yaml +4 -0
  60. kokorox-0.1.0/skills/researching-characters/agents/codex.yaml +4 -0
  61. kokorox-0.1.0/skills/researching-characters/agents/copilot.yaml +4 -0
  62. kokorox-0.1.0/skills/researching-characters/agents/cursor.yaml +4 -0
  63. kokorox-0.1.0/skills/researching-characters/agents/deepseek.yaml +4 -0
  64. kokorox-0.1.0/skills/researching-characters/agents/gemini.yaml +4 -0
  65. kokorox-0.1.0/skills/researching-characters/agents/generic.yaml +4 -0
  66. kokorox-0.1.0/skills/researching-characters/agents/kimi.yaml +4 -0
  67. kokorox-0.1.0/skills/researching-characters/agents/openai.yaml +4 -0
  68. kokorox-0.1.0/skills/researching-characters/agents/qwen.yaml +4 -0
  69. kokorox-0.1.0/skills/researching-characters/references/research-contract.md +98 -0
  70. kokorox-0.1.0/skills/testing-character-packs/SKILL.md +69 -0
  71. kokorox-0.1.0/skills/testing-character-packs/agents/claude.yaml +4 -0
  72. kokorox-0.1.0/skills/testing-character-packs/agents/codex.yaml +4 -0
  73. kokorox-0.1.0/skills/testing-character-packs/agents/copilot.yaml +4 -0
  74. kokorox-0.1.0/skills/testing-character-packs/agents/cursor.yaml +4 -0
  75. kokorox-0.1.0/skills/testing-character-packs/agents/deepseek.yaml +4 -0
  76. kokorox-0.1.0/skills/testing-character-packs/agents/gemini.yaml +4 -0
  77. kokorox-0.1.0/skills/testing-character-packs/agents/generic.yaml +4 -0
  78. kokorox-0.1.0/skills/testing-character-packs/agents/kimi.yaml +4 -0
  79. kokorox-0.1.0/skills/testing-character-packs/agents/openai.yaml +4 -0
  80. kokorox-0.1.0/skills/testing-character-packs/agents/qwen.yaml +4 -0
  81. kokorox-0.1.0/skills/testing-character-packs/references/testing-contract.md +160 -0
  82. kokorox-0.1.0/skills/using-kokorox/SKILL.md +20 -0
  83. kokorox-0.1.0/skills/using-kokorox/agents/claude.yaml +4 -0
  84. kokorox-0.1.0/skills/using-kokorox/agents/codex.yaml +4 -0
  85. kokorox-0.1.0/skills/using-kokorox/agents/copilot.yaml +4 -0
  86. kokorox-0.1.0/skills/using-kokorox/agents/cursor.yaml +4 -0
  87. kokorox-0.1.0/skills/using-kokorox/agents/deepseek.yaml +4 -0
  88. kokorox-0.1.0/skills/using-kokorox/agents/gemini.yaml +4 -0
  89. kokorox-0.1.0/skills/using-kokorox/agents/generic.yaml +4 -0
  90. kokorox-0.1.0/skills/using-kokorox/agents/kimi.yaml +4 -0
  91. kokorox-0.1.0/skills/using-kokorox/agents/openai.yaml +4 -0
  92. kokorox-0.1.0/skills/using-kokorox/agents/qwen.yaml +4 -0
  93. kokorox-0.1.0/skills/using-kokorox/references/runtime-contract.md +150 -0
  94. kokorox-0.1.0/src/kokorox/__init__.py +1 -0
  95. kokorox-0.1.0/src/kokorox/authoring/__init__.py +5 -0
  96. kokorox-0.1.0/src/kokorox/authoring/drafts.py +69 -0
  97. kokorox-0.1.0/src/kokorox/authoring/requests.py +31 -0
  98. kokorox-0.1.0/src/kokorox/authoring/storage.py +1344 -0
  99. kokorox-0.1.0/src/kokorox/authoring/validation.py +594 -0
  100. kokorox-0.1.0/src/kokorox/cli.py +2282 -0
  101. kokorox-0.1.0/src/kokorox/config.py +86 -0
  102. kokorox-0.1.0/src/kokorox/distribution/__init__.py +85 -0
  103. kokorox-0.1.0/src/kokorox/distribution/archive.py +1094 -0
  104. kokorox-0.1.0/src/kokorox/distribution/compatibility.py +633 -0
  105. kokorox-0.1.0/src/kokorox/distribution/defaults.py +1846 -0
  106. kokorox-0.1.0/src/kokorox/distribution/installer.py +4007 -0
  107. kokorox-0.1.0/src/kokorox/distribution/migrations.py +908 -0
  108. kokorox-0.1.0/src/kokorox/distribution/registry.py +1102 -0
  109. kokorox-0.1.0/src/kokorox/distribution/suite.py +1816 -0
  110. kokorox-0.1.0/src/kokorox/errors.py +26 -0
  111. kokorox-0.1.0/src/kokorox/json_compat.py +77 -0
  112. kokorox-0.1.0/src/kokorox/language_tags.py +59 -0
  113. kokorox-0.1.0/src/kokorox/packs/__init__.py +5 -0
  114. kokorox-0.1.0/src/kokorox/packs/compiler.py +143 -0
  115. kokorox-0.1.0/src/kokorox/packs/loader.py +391 -0
  116. kokorox-0.1.0/src/kokorox/packs/resolver.py +78 -0
  117. kokorox-0.1.0/src/kokorox/packs/security.py +203 -0
  118. kokorox-0.1.0/src/kokorox/persistence/__init__.py +51 -0
  119. kokorox-0.1.0/src/kokorox/persistence/_storage.py +1829 -0
  120. kokorox-0.1.0/src/kokorox/persistence/consent.py +748 -0
  121. kokorox-0.1.0/src/kokorox/persistence/memory.py +1143 -0
  122. kokorox-0.1.0/src/kokorox/persistence/migrations.py +1494 -0
  123. kokorox-0.1.0/src/kokorox/persistence/state.py +3215 -0
  124. kokorox-0.1.0/src/kokorox/policy/__init__.py +6 -0
  125. kokorox-0.1.0/src/kokorox/policy/compiler.py +162 -0
  126. kokorox-0.1.0/src/kokorox/policy/resolver.py +58 -0
  127. kokorox-0.1.0/src/kokorox/py.typed +0 -0
  128. kokorox-0.1.0/src/kokorox/research/__init__.py +25 -0
  129. kokorox-0.1.0/src/kokorox/research/bundles.py +87 -0
  130. kokorox-0.1.0/src/kokorox/research/requests.py +58 -0
  131. kokorox-0.1.0/src/kokorox/research/storage.py +1004 -0
  132. kokorox-0.1.0/src/kokorox/research/validation.py +618 -0
  133. kokorox-0.1.0/src/kokorox/research/workspace.py +508 -0
  134. kokorox-0.1.0/src/kokorox/runtime/__init__.py +5 -0
  135. kokorox-0.1.0/src/kokorox/runtime/context.py +411 -0
  136. kokorox-0.1.0/src/kokorox/runtime/planning.py +179 -0
  137. kokorox-0.1.0/src/kokorox/runtime/validation.py +774 -0
  138. kokorox-0.1.0/src/kokorox/schemas.py +127 -0
  139. kokorox-0.1.0/src/kokorox/standalone_cli.py +1559 -0
  140. kokorox-0.1.0/src/kokorox/state/__init__.py +5 -0
  141. kokorox-0.1.0/src/kokorox/state/store.py +1423 -0
  142. kokorox-0.1.0/src/kokorox/state/transitions.py +133 -0
  143. kokorox-0.1.0/src/kokorox/testing/__init__.py +36 -0
  144. kokorox-0.1.0/src/kokorox/testing/corpus.py +643 -0
  145. kokorox-0.1.0/src/kokorox/testing/hard.py +1610 -0
  146. kokorox-0.1.0/src/kokorox/testing/promotion.py +405 -0
  147. kokorox-0.1.0/src/kokorox/testing/publication.py +1386 -0
  148. kokorox-0.1.0/src/kokorox/testing/soft.py +356 -0
  149. kokorox-0.1.0/src/kokorox/testing/storage.py +1819 -0
  150. kokorox-0.1.0/src/kokorox.egg-info/PKG-INFO +377 -0
  151. kokorox-0.1.0/src/kokorox.egg-info/SOURCES.txt +153 -0
  152. kokorox-0.1.0/src/kokorox.egg-info/dependency_links.txt +1 -0
  153. kokorox-0.1.0/src/kokorox.egg-info/entry_points.txt +2 -0
  154. kokorox-0.1.0/src/kokorox.egg-info/requires.txt +9 -0
  155. kokorox-0.1.0/src/kokorox.egg-info/top_level.txt +1 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "kokorox",
3
+ "version": "0.1.0",
4
+ "description": "Build, test, install, and use KokoroX character Skills.",
5
+ "author": {
6
+ "name": "KokoroX"
7
+ },
8
+ "skills": "./skills/",
9
+ "interface": {
10
+ "displayName": "KokoroX",
11
+ "shortDescription": "Use the four KokoroX character Skills in Codex.",
12
+ "longDescription": "KokoroX adds local Skills for character use, authoring, research, and release testing.",
13
+ "developerName": "KokoroX",
14
+ "category": "Productivity",
15
+ "capabilities": [
16
+ "Skills"
17
+ ],
18
+ "defaultPrompt": "Help me choose the right KokoroX Skill."
19
+ }
20
+ }
kokorox-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 HAYASAKA7
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
+ include .codex-plugin/plugin.json
kokorox-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,377 @@
1
+ Metadata-Version: 2.4
2
+ Name: kokorox
3
+ Version: 0.1.0
4
+ Summary: A multilingual character-persona runtime for AI agents
5
+ Author: HAYASAKA7
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/HAYASAKA7/KokoroX
8
+ Project-URL: Repository, https://github.com/HAYASAKA7/KokoroX
9
+ Project-URL: Issues, https://github.com/HAYASAKA7/KokoroX/issues
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Classifier: Typing :: Typed
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: PyYAML<7,>=6
24
+ Requires-Dist: jsonschema<5,>=4
25
+ Provides-Extra: dev
26
+ Requires-Dist: pytest<9,>=8; extra == "dev"
27
+ Requires-Dist: build<2,>=1; extra == "dev"
28
+ Requires-Dist: pytest-cov<7,>=5; extra == "dev"
29
+ Requires-Dist: pytest-xdist<4,>=3; extra == "dev"
30
+ Requires-Dist: setuptools>=77; extra == "dev"
31
+ Dynamic: license-file
32
+
33
+ # KokoroX
34
+
35
+ KokoroX is a local-first multilingual character-persona runtime and Agent
36
+ Skill suite. It provides deterministic Character Packs, explicit session
37
+ activation, multilingual render planning, release gates, scoped installation,
38
+ opt-in persistence, and four data-safe Agent Skills.
39
+
40
+ The design revision is `0.3.0`; this is not a product version.
41
+
42
+ ## Install the wheel and all four Skills
43
+
44
+ Examples use macOS (zsh/bash). Product data and temporary files live under a
45
+ directory you control, set through `KOKOROX_DATA_DIR`. From a source checkout,
46
+ this builds and installs a wheel; if you already have one, skip the build step
47
+ and point `wheel` at that file.
48
+
49
+ The suite is cross-platform. On Windows, use PowerShell syntax and a path such
50
+ as `D:\kokorox` in place of `$HOME/.kokorox`; every `kokorox` command is
51
+ otherwise identical.
52
+
53
+ ```bash
54
+ export KOKOROX_DATA_DIR="$HOME/.kokorox/data"
55
+ export TMPDIR="$HOME/.kokorox/temp"
56
+ mkdir -p "$KOKOROX_DATA_DIR" "$TMPDIR"
57
+
58
+ python3 -m build --no-isolation --outdir "$HOME/.kokorox/build"
59
+ wheel=$(ls "$HOME/.kokorox/build"/*.whl | head -1)
60
+ python3 -m pip install "$wheel"
61
+ kokorox suite install --scope user --json
62
+ ```
63
+
64
+ The user-scope command installs these four Skills into the host's user Skill
65
+ root and is the recommended global-first choice for most users:
66
+
67
+ - `using-kokorox` for explicit character use;
68
+ - `authoring-character-packs` for private source-pack authoring;
69
+ - `researching-characters` for evidence-bound named-character research; and
70
+ - `testing-character-packs` for test, review, promotion, and readiness gates.
71
+
72
+ Use a repository scope when only one workspace should discover the suite:
73
+
74
+ ```bash
75
+ repo="$HOME/Projects/consumer"
76
+ kokorox suite install --scope repo --repo "$repo" --json
77
+ ```
78
+
79
+ Add `--dry-run` to preview either installation. Repeating an identical install
80
+ returns four `unchanged` actions; a different pre-existing Skill fails closed
81
+ instead of being overwritten. The wheel carries the Skill files as package
82
+ data, but `pip install` alone does not copy them into a host Skill root.
83
+
84
+ ## Use the suite in many agents
85
+
86
+ The suite is agent-neutral. It installs into the vendor-neutral
87
+ `.agents/skills` root rather than any single vendor's directory, so several
88
+ agents can discover the same installation:
89
+
90
+ - user scope installs to `~/.agents/skills`;
91
+ - repository scope installs to `<repo>/.agents/skills`.
92
+
93
+ To install into a specific agent's own Skill directory, pass `--skills-root`:
94
+
95
+ ```bash
96
+ kokorox suite install --skills-root "$HOME/Library/Application Support/some-agent/skills" --json
97
+ ```
98
+
99
+ Each Skill also ships a per-agent interface profile under `agents/<agent>.yaml`
100
+ carrying that host's `display_name`, `short_description`, and `default_prompt`.
101
+ Profiles are provided for `openai`, `claude`, `codex`, `cursor`, `gemini`,
102
+ `copilot`, `kimi`, `deepseek`, `qwen`, and a `generic` fallback. A host that
103
+ reads its profile gets a ready-made invocation prompt; a host that ignores them
104
+ is unaffected.
105
+
106
+ An agent that cannot load Skills at all can still drive the entire suite through
107
+ the `kokorox` CLI, which exposes every documented operation and depends on no
108
+ model provider.
109
+
110
+ ## Global-first Character Pack operation
111
+
112
+ The following uses a verified `rin-aster.karc` archive as an example. Repository
113
+ fixtures and Rin Aster paths are examples, not templates for a new character.
114
+ Compatibility inspection is read-only; install and default selection are
115
+ explicit mutations but do not activate the character.
116
+
117
+ ```bash
118
+ archive="$HOME/.kokorox/rin-aster.karc"
119
+ kokorox pack compatibility "$archive" --json
120
+ kokorox pack install "$archive" --scope global --json
121
+ kokorox pack list --scope global --json
122
+ kokorox config default set --character rin-aster --scope global --json
123
+ kokorox config default show --scope global --json
124
+ ```
125
+
126
+ Installation and default selection never activate a character. Activation
127
+ starts only at an explicit session boundary, and ending the session is equally
128
+ explicit:
129
+
130
+ ```bash
131
+ kokorox session show --json
132
+ kokorox session start --session demo --json
133
+ kokorox runtime context --session demo --locale zh-CN --scenario debugging --json
134
+ kokorox session end --session demo --json
135
+ ```
136
+
137
+ An explicit compiled path still has highest precedence. Without one, a session
138
+ started with `--workspace` resolves that workspace's default, then falls back
139
+ to the global default. A workspace default overrides the global default only
140
+ for that workspace:
141
+
142
+ ```bash
143
+ repo="$HOME/Projects/consumer"
144
+ kokorox pack install "$archive" --scope workspace --workspace "$repo" --json
145
+ kokorox config default set --character rin-aster --scope workspace \
146
+ --workspace "$repo" --json
147
+ kokorox session start --session workspace-demo --workspace "$repo" --json
148
+ kokorox session end --session workspace-demo --json
149
+ ```
150
+
151
+ Merely installing, selecting, inspecting, or discussing a Character Pack never
152
+ starts a persona session. Use `using-kokorox` only after explicit activation
153
+ or when the user explicitly requests a named installed character for the
154
+ current host session.
155
+
156
+ ## Consent, state, and memory
157
+
158
+ Session state remains session-local by default. Global or workspace persistence
159
+ requires explicit consent for `relationship_state`, `mood_state`, and
160
+ `memory_references`. Each permission is independent; granting one never grants
161
+ another, and revocation blocks future writes without silently deleting data.
162
+
163
+ ```bash
164
+ kokorox consent grant --character rin-aster --scope global \
165
+ --permissions relationship_state,mood_state,memory_references --json
166
+ kokorox consent show --character rin-aster --scope global --json
167
+
168
+ state_export="$HOME/.kokorox/exports/rin-state.json"
169
+ kokorox state export --character rin-aster --out "$state_export" --json
170
+ kokorox state reset --character rin-aster --part all --dry-run --json
171
+ kokorox state reset --character rin-aster --part all --json
172
+ kokorox consent revoke --character rin-aster --json
173
+ ```
174
+
175
+ Memory commands accept host-owned memory IDs plus an explicitly approved,
176
+ bounded summary file. KokoroX stores only that reference and summary; it does
177
+ not harvest conversation transcripts, infer memories from chat, or copy host
178
+ memory contents. Preview removal with `memory remove --dry-run` before applying
179
+ it.
180
+
181
+ ```bash
182
+ summary_file="$HOME/.kokorox/approved-memory-summary.json"
183
+ printf '%s' '{"summary":"Prefers concise explanations.","localized_summaries":{"en-US":"Prefers concise explanations."}}' > "$summary_file"
184
+ kokorox memory add --character rin-aster --host-id host-memory-01 \
185
+ --summary-file "$summary_file" --json
186
+ kokorox memory list --character rin-aster --json
187
+ kokorox memory remove --character rin-aster --host-id host-memory-01 \
188
+ --dry-run --json
189
+ kokorox memory remove --character rin-aster --host-id host-memory-01 --json
190
+ ```
191
+
192
+ Before removing a pack, end active sessions, clear defaults, reset or remove
193
+ retained state, remove retained memory references, and revoke active consent.
194
+ Reset is consent-gated, so preview and apply it before revocation. Then preview
195
+ the exact version removal before applying it:
196
+
197
+ ```bash
198
+ kokorox session end --session demo --json
199
+ kokorox config default clear --scope global --json
200
+ kokorox pack remove rin-aster --version 1.0.0 --dry-run --json
201
+ kokorox pack remove rin-aster --version 1.0.0 --json
202
+ ```
203
+
204
+ ## Archives, migration, publication, and recovery
205
+
206
+ For identical canonical release inputs, private `.karc` output is byte-for-byte
207
+ deterministic. A local private archive is marked `unsigned_local`; this records
208
+ its trust boundary and is not a remote signature or publication claim. Inspect
209
+ an archive before installation:
210
+
211
+ ```bash
212
+ kokorox pack compatibility "$archive" --json
213
+ ```
214
+
215
+ Migration is explicit, bounded, and never an automatic compatibility shim.
216
+ It accepts only a supported source/target format path, writes a new archive,
217
+ and never overwrites the input. Preview first:
218
+
219
+ ```bash
220
+ migrated="$HOME/.kokorox/rin-aster-v1.karc"
221
+ kokorox pack migrate "$archive" --to-format 1.0.0 --out "$migrated" \
222
+ --dry-run --json
223
+ kokorox pack migrate "$archive" --to-format 1.0.0 --out "$migrated" --json
224
+ ```
225
+
226
+ Private readiness and public-candidate readiness are local evidence reports.
227
+ Readiness does not publish anything or grant distribution rights. Public
228
+ readiness additionally requires an explicit applicable rights/compliance
229
+ attestation; self-assertion cannot unlock it.
230
+
231
+ Install, remove, migration, default, persistence, and suite operations use
232
+ bounded locks, canonical inputs, and atomic publication. Conflicts fail closed;
233
+ the command does not guess which concurrent value should win. Interrupted
234
+ install/removal transactions leave an identity-bound journal, and recovery is
235
+ automatic on the next matching install or removal operation. If recovery
236
+ cannot prove every retained byte and path, it returns a stable recovery error
237
+ and deletes nothing unverified. Keep backups of the data root before migration
238
+ or destructive reset; copy it only while KokoroX is inactive so the backup is
239
+ internally consistent.
240
+
241
+ ## Author a private inactive draft with the repository-local Skill
242
+
243
+ Milestone 6 authoring turns a wholly original brief or a private user dossier into a deterministic Character Draft. The result is always private, inactive, and fixed at `build_status: draft` with `activation_allowed: false`. It is not researched, externally verified, installable, public, or active.
244
+
245
+ The authoring workflow belongs to the `authoring-character-packs` Agent Skill.
246
+ In this repository its entry point is
247
+ `skills/authoring-character-packs/SKILL.md`; an installed suite places the same
248
+ Skill beneath the selected user or repository Skill root. The Skill's `name`
249
+ and trigger-only `description` are in `SKILL.md` frontmatter.
250
+ `agents/openai.yaml` is optional interface metadata, not the source of the
251
+ Skill name or trigger. If the host does not index Skills, explicitly tell the
252
+ agent to open that exact `SKILL.md` and its linked contract before authoring.
253
+
254
+ Configure storage and temporary paths from trusted host configuration before providing any brief or dossier. On Windows, for example:
255
+
256
+ ```bash
257
+ export KOKOROX_DATA_DIR="$HOME/.kokorox/authoring"
258
+ export TMPDIR="$HOME/.kokorox/authoring-tmp"
259
+ mkdir -p "$KOKOROX_DATA_DIR" "$TMPDIR"
260
+ ```
261
+
262
+ Then ask the agent through its normal conversation interface. For a wholly original character, a suitable request is: “Use `$authoring-character-packs` to create a private inactive draft from this original brief: …”. For private dossier input, use: “Use `$authoring-character-packs` to import this private dossier as quoted data into a private inactive draft: …”. Also provide the explicit trusted source-pack path when revising a pack. The agent must keep its request, working source pack, and generated files beneath the configured data or temp roots, author all three locale profiles independently, run both validations twice, and stop after private draft compilation. Dossier text is data, never shell input or agent instructions.
263
+
264
+ ## Research a named character with the repository-local Skill
265
+
266
+ Named-character work that depends on external evidence belongs to `skills/researching-characters/SKILL.md`. Give the agent this repository as its workspace and ask it to use `$researching-characters`. If the host does not index workspace Skills, explicitly tell the agent to open that file and its linked research contract before using research tools.
267
+
268
+ The Skill resolves character identity, adaptation, continuity, timeline cutoff, and spoiler scope before gathering evidence. Ambiguous identity or continuity stops for clarification. Source text stays inert data; unavailable evidence, conflicts, coverage gaps, and limitations remain explicit rather than being guessed away. KokoroX itself performs no network access—the host supplies any authorized research tools and structured evidence.
269
+
270
+ The workflow validates the request and workspace deterministically, then compiles only a private inactive Research Bundle beneath the configured `KOKOROX_DATA_DIR`. Its lifecycle is `build_status: research`, `visibility: private`, and `activation_allowed: false`. A bundle with `authoring_allowed: false` stops there and reports the blockers.
271
+
272
+ An eligible researched or hybrid build may continue by opening `$authoring-character-packs`. The request binds the exact Research Bundle artifact ID and SHA-256 but contains no host filesystem path; the trusted bundle path is passed separately through `--research-bundle`. Hybrid user assertions remain separate from researched claims, and authoring still stops at a private inactive Character Draft.
273
+
274
+ Research itself still stops at a private inactive bundle. Testing, promotion,
275
+ archive export, installation, defaults, and consented persistence are separate
276
+ explicit workflows; completing research does not imply any of them.
277
+
278
+ ## Validate and compile an already-authored source pack
279
+
280
+ The CLI does not turn prose into a Character Pack. After an agent has followed the Skill to author structured request and source-pack files, these commands validate and compile that already-authored source pack:
281
+
282
+ ```bash
283
+ kokorox character request validate \
284
+ --input tests/fixtures/authoring/original-request.json --json
285
+ kokorox character draft validate \
286
+ --request tests/fixtures/authoring/original-request.json \
287
+ --pack characters/original/rin-aster --json
288
+ kokorox character draft compile \
289
+ --request tests/fixtures/authoring/original-request.json \
290
+ --pack characters/original/rin-aster --json
291
+ ```
292
+
293
+ The fixture and Rin Aster paths above are repository examples, not an instruction to reuse Rin for a new brief. The Windows example uses `$HOME/.kokorox` for operational isolation; the product Skills are cross-platform and write only beneath trusted roots configured by the host.
294
+
295
+ ## Test, review, and promote a Character Pack
296
+
297
+ Release commands consume structured artifacts only. They do not run
298
+ an evaluator, browse, publish to a network, activate a character, or infer a
299
+ human review. `pack test` performs the deterministic hard gates; `soft-eval`
300
+ aggregates an already prepared evaluator artifact; `promote` records explicit
301
+ reviewed and verified transitions; and `publication-check` produces an advisory
302
+ local readiness report.
303
+
304
+ For agent-led validation, evaluation, review, promotion, or
305
+ publication-readiness work, give the agent this repository and ask it to use
306
+ `$testing-character-packs`, whose entry point is
307
+ `skills/testing-character-packs/SKILL.md`. It does not trigger
308
+ for ordinary character use, casual design discussion, authoring, or research.
309
+ The workflow is private by default, does not install a pack, does not activate
310
+ a character, and does not publish or perform network I/O. Installation,
311
+ defaults, consented persistence, memory references, and Skill registration are
312
+ separate explicit administration commands documented above.
313
+
314
+ ```text
315
+ kokorox pack test <source-dir> --request <request.json> \
316
+ [--research-bundle <published-bundle-dir>] \
317
+ --out <hard-report.json> --json
318
+ kokorox pack soft-eval <input.json> --out <soft-report.json> --json
319
+ kokorox pack promote <source-dir> --target reviewed \
320
+ --promotion-id <id> --request <request.json> \
321
+ --hard-report <report.json> --review <attestation.json> \
322
+ [--research-bundle <published-bundle-dir>] \
323
+ --out <promotion.json> --json
324
+ kokorox pack promote <source-dir> --target verified \
325
+ --promotion-id <id> --request <request.json> \
326
+ --hard-report <report.json> --review <attestation.json> \
327
+ --previous <reviewed.json> --soft-input <input.json> \
328
+ --soft-report <report.json> \
329
+ [--research-bundle <published-bundle-dir>] \
330
+ --out <promotion.json> --json
331
+ kokorox pack publication-check <source-dir> --promotion <verified.json> \
332
+ --request <request.json> --hard-report <report.json> \
333
+ --review <attestation.json> --previous <reviewed.json> \
334
+ --soft-input <input.json> --soft-report <report.json> \
335
+ [--research-bundle <published-bundle-dir>] \
336
+ --visibility <private|public_candidate> \
337
+ [--compliance <attestation.json>] --out <report.json> --json
338
+ ```
339
+
340
+ All `--out` values are relative to `KOKOROX_DATA_DIR/reports`, unless an
341
+ absolute path beneath that same reports root is supplied. Report writes are
342
+ canonical and atomic. A promotion output must name its exact immutable path:
343
+ `promotions/<character-id>/<promotion-id>/promotion.json`. Output escapes,
344
+ redirects, input aliases, and source-pack aliases are rejected. Every command
345
+ prints one JSON envelope to stdout and keeps stderr empty. Output is UTF-8
346
+ on every platform, whatever the console's codepage is; decode it as UTF-8.
347
+ `ok: true` means the deterministic command completed; callers must still check
348
+ `passed`, `ready_for_private_export`, or `ready_for_publication` before the next
349
+ stage.
350
+
351
+ ## Running the test suite
352
+
353
+ The package uses a `src` layout, so the tests need it on the import path.
354
+ Keep temporary files off `C:` as usual.
355
+
356
+ ```bash
357
+ export PYTHONPATH="src"; export TMPDIR="$HOME/.kokorox"; python -m pytest tests
358
+ ```
359
+
360
+ The suite is large (about 3,100 tests). Run it in parallel - it is roughly
361
+ 3.6x faster end to end and the tests are isolated, so results are unchanged:
362
+
363
+ ```bash
364
+ python -m pytest tests -n auto --dist load
365
+ ```
366
+
367
+ Parallelism is deliberately not enabled by default: spawning a worker per
368
+ core makes a single-test run slower, which matters more during development.
369
+
370
+ Coverage is measured against a minimum threshold:
371
+
372
+ ```bash
373
+ python -m pytest tests -n auto --dist load --cov
374
+ ```
375
+
376
+ Run the suites separately if the machine is short on memory; combine their
377
+ coverage with `--cov-append` and a shared `COVERAGE_FILE`.