- The English work_builder prompt (#205) words the Persona handoff as
"outside the scope of responsibility", which the work-only filter did not
match, so work_skill.md kept a pointer to a Persona section it lacks.
Widen the English and Chinese patterns.
- #197 made self/yourself aliases of the new owner family, so generated
skills whose stored meta says type "self" were renamed owner-<slug> on
install. Stored skill metadata now maps owner back to relationship.
- owner_sources.py discover no longer crashes on a malformed MCP config
(non-dict mcpServers, non-UTF-8 TOML/YAML).
Claude-Session: https://claude.ai/code/session_018qsZs2yPoPC21GnGkktmwp
Co-authored-by: Claude <noreply@anthropic.com>
* Slim translated docs to one English source plus a full Chinese translation
- Turn the DE/ES/JA/KO/PT/RU READMEs into short landing pages that link
back to the English README.
- Bring README_ZH.md up to date with the Personal Agents and Citation
sections it was missing.
- Delete the seven translated ROADMAPs, which no README linked to.
- Use "Person Profile" wording in ROADMAP.md and CONTRIBUTING.md.
- Add tests/test_translation_sync.py so a section, image or link added to
README.md fails CI until README_ZH.md catches up.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JFzCaMi3X5RVxc35TCzbJ2
* Fix Korean landing page bold and italic markup that GitHub would not render
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JFzCaMi3X5RVxc35TCzbJ2
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Share one host table, ship one payload, split optional deps
- tools/hosts.json is the single host path table, read by bin/distilly.mjs
and tools/hosts.py (install_distilly, install_generated_skill,
install_claude_generated_skill, skill_writer).
- package.json "files" is the single publish list; the npm CLI and the
Python installer both derive the install payload from it, so the Python
installer no longer copies docs/, tests/ or .github/ into skill dirs and
now supports all eight hosts.
- requirements.txt keeps only requests; collector extras move to
requirements-optional.txt.
- Ruff is pinned with an explicit rule set and blocks CI; fix its findings.
- tests/_paths.py replaces the sys.path boilerplate in 11 test files.
- Rename the cover image to docs/social-preview.png so redesigns stop
adding versioned files.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014AQdagxHQtDiYDXHNMsRSK
* Keep reinstalling from an installed copy working
An installed copy has no package.json, so install_distilly.py copies it
whole (minus caches) instead of failing to read the publish list.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014AQdagxHQtDiYDXHNMsRSK
* Allow running CI manually
A stacked PR retargeted after its base merges gets no CI run until the
next push; workflow_dispatch lets a maintainer start one.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014AQdagxHQtDiYDXHNMsRSK
---------
Co-authored-by: Claude <noreply@anthropic.com>
SKILL.md becomes a 41-line router; flows move to prompts/flows/ and load on demand. Colleague prompts move to prompts/colleague/, shared ones to prompts/shared/, references/ folds into prompts/celebrity/budget_unfriendly/, and the two celebrity research prompts merge into one. The entrypoint test checks structure instead of exact wording.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017tXoVWiktX2vSUJzrrdBLJ
Delete files nothing references: the old PRD, the skill-type abstraction
design notes, the duplicate docs/lang/README_EN.md, four old social preview
images and eight WeChat group QR codes.
Merge install_{openclaw,hermes,codex}_skill.py into install_distilly.py
--host, and drop install_{openclaw,codex}_generated_skill.py in favor of
install_generated_skill.py --host. Docs, skill_writer, the manifest
installer map and tests now point at the merged scripts.
Claude-Session: https://claude.ai/code/session_01QNauB8VvkxewzmhA2ZVT25
Co-authored-by: Claude <noreply@anthropic.com>
SKILL.md now keeps only the English instructions and tells the agent to
reply in the user's language. Prompts and references are translated to
English. The example colleague profiles and the recorded e2e run are
removed and ignored.
Claude-Session: https://claude.ai/code/session_01GNKjfDkCx5ozJ4oL69tgBo
Co-authored-by: Claude <noreply@anthropic.com>
* feat: add owner profile for personal agent first-run setup
Adds an owner family (self/yourself/me alias to it) that interviews the
agent's own user and writes a short always-on summary between Distilly
markers into the host user file (Claude Code ~/.claude/CLAUDE.md,
OpenClaw workspace USER.md). The full profile stays at
~/.distilly/owner/profile.md. It is context about the user, not a
role-play Skill, so skill_writer refuses the owner family.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y32jGbUW3JKCyeeySUBm27
* feat: gather owner profile from host memory, files and connectors
The owner intake now starts by checking what the host already knows
(memory, existing user files, connected tools), then asks only for what
is missing, and can read connected calendar, mail, docs, code or user
exports read-only with the user's OK. Distilly never asks for keys or
OAuth on this path. Profiles record a source per fact, and the summary
limit is resolved per host.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y32jGbUW3JKCyeeySUBm27
* feat: discover the owner's existing sources at profile setup
At owner init the agent now inventories what it can already reach (its
own tools, connectors and memory, the platform it runs on, and what
tools/owner_sources.py finds on the machine: host user files, configured
MCP servers, related skills and personal exports), proposes a read-only
slice per source, and asks the owner which to use and what to add.
owner_sources.py reports names only, never config values. Includes a
recorded end-to-end run in Claude Code with mock connectors and the
harness to reproduce it.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y32jGbUW3JKCyeeySUBm27
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat: add owner profile for personal agent first-run setup
Adds an owner family (self/yourself/me alias to it) that interviews the
agent's own user and writes a short always-on summary between Distilly
markers into the host user file (Claude Code ~/.claude/CLAUDE.md,
OpenClaw workspace USER.md). The full profile stays at
~/.distilly/owner/profile.md. It is context about the user, not a
role-play Skill, so skill_writer refuses the owner family.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y32jGbUW3JKCyeeySUBm27
* feat: gather owner profile from host memory, files and connectors
The owner intake now starts by checking what the host already knows
(memory, existing user files, connected tools), then asks only for what
is missing, and can read connected calendar, mail, docs, code or user
exports read-only with the user's OK. Distilly never asks for keys or
OAuth on this path. Profiles record a source per fact, and the summary
limit is resolved per host.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y32jGbUW3JKCyeeySUBm27
---------
Co-authored-by: Claude <noreply@anthropic.com>
Adds an owner family (self/yourself/me alias to it) that interviews the
agent's own user and writes a short always-on summary between Distilly
markers into the host user file (Claude Code ~/.claude/CLAUDE.md,
OpenClaw workspace USER.md). The full profile stays at
~/.distilly/owner/profile.md. It is context about the user, not a
role-play Skill, so skill_writer refuses the owner family.
Claude-Session: https://claude.ai/code/session_01Y32jGbUW3JKCyeeySUBm27
Co-authored-by: Claude <noreply@anthropic.com>
Lark/Feishu, DingTalk and Slack collectors now read secrets from
environment variables, then the OS keychain (optional keyring), then the
0600 config file. --setup and the new Feishu --login use hidden input and
refuse to run without a TTY, so an agent cannot pipe secrets through
them. --check reports where each credential comes from without printing
values, and Feishu --refresh renews the user token from the stored
refresh_token. --user-token / --exchange-code are removed, and SKILL.md
no longer asks users to paste App Secrets, tokens or OAuth codes.
Claude-Session: https://claude.ai/code/session_017ZQBLAJV6q9FP7domp6FKf
Co-authored-by: Claude <noreply@anthropic.com>
Work-only artifacts claimed they had no Persona, but still told the model to answer out-of-scope questions via the Persona section. Combined skills keep the original handoff.
Co-authored-by: Cursor <cursoragent@cursor.com>