Skip to content

feat: gather owner profile from host memory, files and connectors - #201

Merged
titanwings merged 3 commits into
dot-skillfrom
feat/owner-sources
Oct 12, 2026
Merged

titanwings merged 3 commits into
dot-skillfrom
feat/owner-sources

Conversation

@titanwings

Copy link
Copy Markdown
Owner

Requested by Tianyi · project thread

Stacked on #197. Until #197 merges, this PR also shows its commit. Only the last commit (feat: gather owner profile from host memory, files and connectors) is new here. The base stays dot-skill so that CI runs.

Summary

Before: the owner flow from #197 learned about the user only from the interview and from material the user pasted in.

After: the flow first checks what the host already knows: its memory, existing user files (CLAUDE.md, OpenClaw USER.md / MEMORY.md, Hermes USER.md) and the tools already connected to it. It then asks only about what is still missing. It can also read connected calendar, mail, docs and code, or exports the user provides. Each source is read-only, the user is asked before each one, and only a small, defined slice is read. Every fact in the profile records where it came from.

Changes

  • prompts/owner/intake.md:
    • New Step 0 that checks the host's memory, user files and connected tools.
    • Round 1 skips anything Step 0 already answered.
    • Round 3 is a source table listing what to read from each source and why.
    • Distilly uses only the host's own tools: no API keys and no OAuth. The Lark, DingTalk and Slack collectors stay out of this flow.
  • prompts/owner/profile_builder.md:
    • New ## Sources table with a fixed set of source labels, so facts can be reviewed and deleted one by one.
    • Conflict rule: the interview wins, then newer beats older.
  • tools/owner_profile.py: the summary limit is now resolved per host (HOST_SUMMARY_LIMITS, summary_limit()). --max-summary-chars defaults to the host's limit, which leaves room for hosts with smaller budgets later (for example Hermes USER.md at about 1,375 characters).
  • SKILL.md: step 1 of the Owner Profile flow now describes the source order, in both languages.

Motivation

Personal agents already hold the user's memory and connections. The owner profile should reuse them through the host instead of asking for credentials. The research is in the project thread linked above.

Testing

  • python -m unittest discover -s tests -p 'test_*.py' passed (93 tests, 3 new)
  • python -m compileall tools/ passed
  • node bin/distilly.mjs --check-package passed
  • Manually tested in a real host: not yet

Checklist

  • I read CONTRIBUTING.md
  • Docs updated (SKILL.md, owner prompts)
  • No secrets, tokens, or personal data committed
  • No new dependencies
  • Tests added

🤖 Generated with Claude Code

https://claude.ai/code/session_01Y32jGbUW3JKCyeeySUBm27


Generated by Claude Code

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
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
# Conflicts:
#	SKILL.md
#	prompts/owner/intake.md
#	prompts/owner/profile_builder.md
#	tests/test_owner_profile.py
#	tools/owner_profile.py
@titanwings
titanwings marked this pull request as ready for review October 12, 2026 08:29
@titanwings
titanwings merged commit 527c12a into dot-skill Oct 12, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants