feat(chat): conversational create_skill — brief + confirm + explain (beat 21)#257
Merged
Merged
Conversation
…beat 21)
"create a skill for X" used to fire create_skill silently and stage the result
with no explanation. Now the chat surface briefs the user first and confirms
before building, mirroring the auto-escalation "Start as Project?" offer:
- "create a skill that tells me the moon phase" → CODEC replies "I'll build a
skill for: <desc>. I'll stage it in your Skills tab for review — nothing runs
until you approve. Build it?" + a [Build it]/[Cancel] chip.
- Vague ("make a skill") → asks what it should do.
- [Build it] → POST /api/chat/build_skill → runs the real review-gate flow →
conversational outcome ("Done — generated **name**, staged in Skills, approve
there to activate").
Chat-surface only (routes/chat.py intercept before the pre-LLM hijack + a new
endpoint; chip in codec_chat.html mirroring renderEscalateChip). MCP/voice
create_skill paths untouched. No skills/*.py change → no manifest regen.
119 chat/skill tests pass, ruff clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
AVADSA25
added a commit
that referenced
this pull request
Jul 16, 2026
) DEMO_SCRIPT.md had been rewritten locally (the 15→22→25-beat seal, performance reorder, name-drop moats table) but was never actually committed — it sat as an uncommitted edit in the shared working tree since 2026-07-14. Committing the full sealed version now, plus today's status refresh: - #21 self-improve: now fully conversational (#257), no longer "fix in progress" - #20 observer recall: fully fixed — routing (#256), real NSWorkspace capture (#258), honest on out-of-range clock-time asks (#260) - #14 Pilot: navigation confirmed live; live-view click-through flagged as a rebuild in progress (was mis-marked READY) - #19 Connector: OAuth sign-in itself confirmed working; connected/disconnect state + persistent tokens flagged as a rebuild in progress - #18: note to set the CODEC connector to Always Allow in Claude's settings Co-authored-by: Mickael Farina <farina.mickael@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What (Mickael's ask)
"create a skill for X" built silently with no explanation. He wants it conversational like the auto-escalation offer: "Plan → I review → approve → then go… the user should be briefed directly from CODEC in the chat."
Flow
POST /api/chat/build_skillruns the real create_skill review-gate flow → conversational outcome: "Done — I generated moon_phase and staged it in your Skills tab. Open Skills to see what it does, then Approve to make it live."Design
routes/chat.py:_detect_create_skill_request()intercepts the chat surface before the pre-LLM hijack, so create_skill no longer fires silently; streams the brief + askill_confirmSSE frame. NewPOST /api/chat/build_skill._skill_outcome_message()rephrases the terse result.codec_chat.html:renderSkillConfirmChip+ Build/Cancel handlers, mirroringrenderEscalateChip. No emoji.Verify
Detection, confirm-decision, outcome message, and the real build path all exercised headlessly (staged a
dad_jokeskill via/api/chat/build_skillpath, then cleaned up).pytest -k "chat or try_skill or escalate or skill_review"→ 119 passed. ruff clean. No manifest change (no skills/ edit).🤖 Generated with Claude Code