Docs/Features/Skill self-improvement
Features

Skill self-improvement

Opt-in. Flowly mines its own conversations for recurring procedures and writes them up as reusable skills, then keeps the library tidy β€” every change snapshotted, archive-only, and reversible.

Most agents only use the skills you give them. With self-improvement turned on, Flowly also grows and grooms its own skill library: it notices procedures you repeat, writes them up as skills, and later consolidates overlapping ones and archives the dead weight. It runs in the background while you're not using it, and every change is snapshotted so nothing is ever lost.

This is

off by default β€” it's opt-in. Turn it on with skill_improvement.enabled: true. (Self-maintaining memory is the on-by-default cousin; skills stay manual until you ask for this.)

For one-off, user-directed skill creation, use /learn instead. /learn turns a specific conversation, path, URL, or notes into a skill immediately; skill self-improvement waits for repeated evidence across sessions before proposing or applying changes.

Two modes

ModeWhat it doesCadence
mineExtract a new skill from a procedure that recurs across recent conversations.every 6h
curateConsolidate the library β€” merge narrow siblings into umbrella skills, archive stale ones.every 12h

A procedure has to actually recur before it becomes a skill: by default it must appear at least 3 times across at least 2 sessions before mining proposes it. That keeps one-off tasks out of the library.

Safety rails

Self-improvement writes to your skill library, so it's deliberately conservative:

  • Pre-run snapshot + rollback. Every apply takes a snapshot first; the last snapshotKeep (default 10) are retained so any change can be reverted.
  • Archive-only. Curate never deletes β€” stale skills are archived, not removed.
  • Pinned protection. Skills you pin are never touched by curate.
  • Dry-run. Preview exactly what would change before anything is written.
  • Governed. Like memory, changes go through a governance layer with an op log, so "why does this skill exist / why was it archived" is always answerable.

Configuration

Set under skillImprovement in ~/.flowly/config.json:

{
  "skillImprovement": {
    "enabled": true,
    "mineEnabled": true,
    "curateEnabled": true,
    "mineEveryMinutes": 360,
    "curateEveryMinutes": 720,
    "minRepeatCount": 3,
    "minEvidenceSessions": 2,
    "staleAfterDays": 60,
    "snapshotKeep": 10
  }
}
KeyTypeDefaultDescription
enabledboolfalseMaster switch for the whole subsystem.
mineEnabledbooltrueAllow mining new skills (once enabled).
curateEnabledbooltrueAllow library consolidation (once enabled).
mineEveryMinutesint360Background mine cadence (6h).
curateEveryMinutesint720Background curate cadence (12h).
mineTurnIntervalint0Also mine every N user turns (0 = time-based only).
minRepeatCountint3A procedure must recur this many times to qualify.
minEvidenceSessionsint2…across at least this many distinct sessions.
staleAfterDaysint60Curate archives skills unused this long…
staleMinUsesint1…with fewer than this many uses.
maxMessagesPerRunint1000Cap on how much history a single run scans.
snapshotKeepint10How many rollback snapshots to retain.

Run it manually

Both modes are exposed on the CLI, and --dry-run shows what would happen without writing anything:

flowly skill mine --dry-run     # preview proposed new skills
flowly skill mine               # mine + apply (with snapshot)
flowly skill curate --dry-run   # preview consolidation / archival
flowly skill curate             # curate + apply

The agent can also trigger this itself through the skill_improve tool (mode: "mine" | "curate") when it notices it's been repeating work.

Governance: review, roll back, archive

The same flowly skill group exposes the safety rails this subsystem advertises β€” inspect what it did and undo it:

flowly skill usage              # how often each self-improved skill is used
flowly skill log                # the operation log of skill changes
flowly skill undo               # undo the last skill change
flowly skill rollback <name>    # restore a skill from an earlier snapshot
flowly skill archive <name>     # archive a skill (and: restore <name>)
flowly skill stale              # list skills unused for a while

Snapshots are archive-only (nothing is hard-deleted) and snapshotKeep of them are retained. See CLI commands for the full group.

How mining works

Mining reads recent conversation deltas (capped at maxMessagesPerRun), looks for procedures that clear the repeat/evidence thresholds, drafts a SKILL.md for each, snapshots the library, and applies. The draft is a normal skill afterward β€” you can read, edit, pin, or remove it like any other (see Skills).

Pitfalls

  • Nothing happens until you enable it. enabled defaults to false.
  • It needs material to learn from. With little history, mining proposes little β€” the evidence thresholds are intentionally strict.
  • Review the first runs. Use --dry-run early to get a feel for what it proposes before letting it apply on a schedule.