Skip to content

feat(skills): port Hermes /learn — author skills from sources#5

Open
TheSmokeDev wants to merge 1 commit into
masterfrom
claude/taskchad-skill-learning-port-ugbhtv
Open

feat(skills): port Hermes /learn — author skills from sources#5
TheSmokeDev wants to merge 1 commit into
masterfrom
claude/taskchad-skill-learning-port-ugbhtv

Conversation

@TheSmokeDev

Copy link
Copy Markdown
Owner

Add a user-initiated, source-driven skill authoring command, porting
Hermes Agent's /learn. Point it at a URL, a local dir/file, the current
conversation, or pasted notes; it gathers the material, distills a
standards-compliant SKILL.md, and stages an inert draft under
skills/generated/ that graduates through the existing /skills gate.

Model-agnostic by construction: the only LLM call is reasoning_step
(routed through the runtime lane system, whatever /model selected);
source gathering uses framework primitives (httpx+trafilatura, stdlib
file reads, the session transcript) — never a model-native tool surface.

Reuses every existing rail — write_skill, skill_guard.scan_skill, the
usage sidecar, and the operator-gated promotion flow — adding no new
storage, security, or promotion path. A /learn draft seeds the reuse
counter to the eligibility threshold so explicit operator intent stands
in for auto-capture recurrence evidence and the draft surfaces in
/skills review.

  • cognition/skill_learn.py: parse/gather/distill/orchestrate core
  • cognition/skills.py: optional SkillSpec.body rendered by write_skill
    (back-compatible; empty body keeps the auto-capture stub)
  • core_handlers.py + commands.py: wire /learn (router, operator)
  • tests/test_skill_learn.py: 14 tests, reasoning_step mocked

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01PuH3Z3zEyjkMCpywRuaqgj

Add a user-initiated, source-driven skill authoring command, porting
Hermes Agent's /learn. Point it at a URL, a local dir/file, the current
conversation, or pasted notes; it gathers the material, distills a
standards-compliant SKILL.md, and stages an inert draft under
skills/generated/ that graduates through the existing /skills gate.

Model-agnostic by construction: the only LLM call is reasoning_step
(routed through the runtime lane system, whatever /model selected);
source gathering uses framework primitives (httpx+trafilatura, stdlib
file reads, the session transcript) — never a model-native tool surface.

Reuses every existing rail — write_skill, skill_guard.scan_skill, the
usage sidecar, and the operator-gated promotion flow — adding no new
storage, security, or promotion path. A /learn draft seeds the reuse
counter to the eligibility threshold so explicit operator intent stands
in for auto-capture recurrence evidence and the draft surfaces in
/skills review.

- cognition/skill_learn.py: parse/gather/distill/orchestrate core
- cognition/skills.py: optional SkillSpec.body rendered by write_skill
  (back-compatible; empty body keeps the auto-capture stub)
- core_handlers.py + commands.py: wire /learn (router, operator)
- tests/test_skill_learn.py: 14 tests, reasoning_step mocked

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PuH3Z3zEyjkMCpywRuaqgj
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