Skip to content

feat: self-improving skills — agent-proposed updates with diff review, version history, and rollback (#355)#350

Merged
MatthewSuttles merged 2 commits into
mainfrom
feat/self-improving-skills-phase5
Jun 8, 2026
Merged

feat: self-improving skills — agent-proposed updates with diff review, version history, and rollback (#355)#350
MatthewSuttles merged 2 commits into
mainfrom
feat/self-improving-skills-phase5

Conversation

@MatthewSuttles

Copy link
Copy Markdown
Collaborator

Summary

Phase 5 of the Hermes-Inspired Agent Intelligence MEGAPLAN. Agents can now propose improvements to existing skills, admins review a side-by-side diff, and every content change is versioned with rollback capability.

  • Skill update proposals: agents submit full updated content + rationale via propose_skill_update tool — no skill is modified until an admin approves
  • Version history: every skill save (create, admin edit, agent update approval, rollback) is snapshotted in skill_versions with source attribution and proposal linkage
  • Admin review UI: /skills/update_proposals lists pending proposals with side-by-side original/proposed diff, approve/reject actions with optional notes
  • Rollback: /skills/:id/history shows the full version timeline; any prior version can be restored in one click (creates a new 'rollback' version so history stays linear)
  • Unhelpful signals: agents call flag_skill_unhelpful to record that a skill didn't help, with a reason — visible improvement signal for admins

Deliverables

Data

  • skill_versions table — immutable content snapshots
  • skill_update_proposals table — pending/approved/rejected agent-submitted diffs
  • flagged_reason + flagged_at columns on skill_load_events

Models

  • SkillVersion with snapshot! class method
  • SkillUpdateProposal with stale? detection (skill changed after proposal)
  • Skill extended with has_many associations and auto-snapshot callbacks

Services

  • Skills::UpdateProposer — validates + persists pending proposal
  • Skills::UpdateApprover — applies content, creates attributed version, resolves ApprovalRequest
  • Skills::UpdateRejector — closes proposal, resolves ApprovalRequest
  • Skills::Rollback — restores content from target version, creates rollback version

Agent tools

  • propose_skill_update executor + seed
  • flag_skill_unhelpful executor + seed

Admin UI

  • GET /skills/update_proposals — proposal list with diff view
  • PATCH /skill_update_proposals/:id/approve_update_proposal
  • PATCH /skill_update_proposals/:id/reject_update_proposal
  • GET /skills/:id/history — version timeline with rollback buttons
  • PATCH /skills/:id/rollback — restore to version

Specs

  • 8 new service/executor specs
  • 2 new model specs
  • 3 new factories

Test plan

  • Run bin/rspec spec/models/skill_version_spec.rb spec/models/skill_update_proposal_spec.rb
  • Run bin/rspec spec/services/skills/update_proposer_spec.rb spec/services/skills/update_approver_spec.rb spec/services/skills/update_rejector_spec.rb spec/services/skills/rollback_spec.rb
  • Run bin/rspec spec/services/tools/propose_skill_update_executor_spec.rb spec/services/tools/flag_skill_unhelpful_executor_spec.rb
  • Verify bin/rails routes shows history/rollback/update_proposals/approve/reject routes
  • Smoke test: create a skill, call propose_skill_update via agent, approve via admin UI, verify content changed and version history shows two entries
  • Smoke test rollback: roll back to v1, verify content restored and v3 appears as 'rollback' type

Hivemind Agent and others added 2 commits May 21, 2026 23:12
…, version history, and rollback

Phase 5 of the Hermes-Inspired Agent Intelligence MEGAPLAN.

## What's new

### Data layer
- skill_versions: immutable content snapshots on every save (initial + updates)
- skill_update_proposals: agent-submitted diff-based update requests
- skill_load_events: adds flagged_reason/flagged_at columns for unhelpful signals

### Models
- SkillVersion: snapshot! class method, chronological/reverse_chronological scopes
- SkillUpdateProposal: pending/approved/rejected status, stale? detection
- Skill: after_create/after_update callbacks snapshot versions automatically;
  skip_auto_snapshot! lets UpdateApprover create a richer version with proposal linkage

### Services
- Skills::UpdateProposer: validates and persists a pending SkillUpdateProposal,
  raises an ApprovalRequest for admin notification
- Skills::UpdateApprover: applies proposed_content to skill, creates SkillVersion
  with agent attribution and proposal link, marks proposal approved
- Skills::UpdateRejector: closes a proposal as rejected, resolves ApprovalRequest
- Skills::Rollback: restores skill content from a target SkillVersion, creates
  a new 'rollback' version so history stays linear

### Agent tools (MCP)
- propose_skill_update: submit full updated content + rationale for a named skill
- flag_skill_unhelpful: record a negative signal after loading a skill, with reason

### Admin UI
- /skills/update_proposals — list pending/approved/rejected update proposals
  with side-by-side original vs proposed diff view and approve/reject actions
- /skills/:id/history — full version timeline with rollback buttons per version
- Skills index and show pages linked to the new sections
- Update Proposals counter badge on the skills index nav

### Seeds
- Two new built-in tools seeded: propose_skill_update, flag_skill_unhelpful

### Specs
- 6 new service specs (UpdateProposer, UpdateApprover, UpdateRejector, Rollback,
  ProposeSkillUpdateExecutor, FlagSkillUnhelpfulExecutor)
- 2 new model specs (SkillVersion, SkillUpdateProposal)
- 3 new factories (skill_versions, skill_update_proposals, skill_load_events)
…s entry

The chat_attachments tool entry was missing a trailing comma before the
Phase 5 self-improving skills section, causing a Ruby syntax error at
line 968 that broke both test and system-test CI jobs.

Co-Authored-By: Claude <noreply@anthropic.com>
@MatthewSuttles MatthewSuttles merged commit 83b1c84 into main Jun 8, 2026
2 of 3 checks passed
@MatthewSuttles MatthewSuttles deleted the feat/self-improving-skills-phase5 branch June 8, 2026 20:02
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.

1 participant