Releases: jaemk/mind
Releases · jaemk/mind
Release list
v0.12.0
Added
- A repo can be both a Claude plugin marketplace and a
mindcurator. A bare
[discover].sourceslist in a co-presentmind.tomlcomposes with a
.claude-plugin/marketplace.json(orplugin.json) instead of suppressing it:
the manifest defines the repo's own items and the curated chain layers on top
(MKT-16). Newmarketplace-curatorexample.
Changed
- An own-item source-discovery directive now suppresses only a co-present
.claude-plugin/manifest's own-item layer, and the set of such directives is
broadened. Amind.toml[source].roots/flat-skills, or a consumermeld --root/--flat-skillsflag, suppresses the manifest and runs convention
discovery instead (with a note), so--rootis no longer a silent no-op on a
manifest source (MKT-15).
v0.11.0
Added
- Global
--verbose(-v) flag, accepted before or after the verb like
--json/--yes/--ascii. It enables extra advisory output and does not
affect the color/Unicode capability gate (CLI-162).
Changed
- The unguarded-reference warning emitted during
meld(when a prefix is in
effect) is now shown only under--verbose; the default meld is silent
(CLI-14, NS-20, NS-22).
v0.10.0
Added
init-source --marketplacescaffolds a.claude-plugin/marketplace.json
(via a newscaffoldmodule);--flat-skillssetsflat-skills = truein
mind.tomland, combined with--marketplace, populates the pluginskills
array from flat-skill discovery. Plugin-name precedence is--namespace>
[source].prefix> directory name (INIT-10, INIT-11, INIT-12).- Cross-source collision detection at
meldfor skills, rules, and tools: when
a melded source would install an item that collides with an existing one, the
non-interactive path errors withSkillCollisionand suggests--namespace <repo-name>, and an interactive TTY prompts for a prefix (NS-43, NS-44,
NS-45). config lobes add/detectbackfills already-installed items into a
newly-added lobe:--yesbackfills automatically, an interactive TTY prompts,
and a non-interactive run prints a note pointing atintrospect --fix
(HARN-7).introspect --fixrepairs missing lobe coverage, creating links for items not
yet linked into a configured lobe and updating the manifest (HARN-8).
Changed
- The gemini and antigravity harness lobes are unified to
~/.gemini/config,
the skill directory both Gemini CLI and Antigravity read. Thegeminipreset
now targets.gemini/configwithkinds = [skill](was.geminiwith
[skill, agent]); the redundantantigravityandantigravity-clipresets
are removed (HARN-4, HARN-5). - The
[discover].sourcesentry keyasis renamednamespace(asremains a
backwards-compatible parse alias).dumpemitsnamespace,reviewadvises
migrating, andrecall --sourcesdisplaysnamespace:<prefix>instead of
as:<prefix>(DSC-78). - A
[discover].sourcesentry whose clone fails for a non-auth reason (network
error, not-found) now warns and skips rather than failing the whole meld; the
primary source and successfully-cloned nested sources stay registered, and the
skipped entry is recorded withreason="clone_failure". The same skip applies
duringsyncre-walk. The one hard-fail case is a pure curator (no items of
its own) whose nested sources all fail, which errors with
CuratorAllNestedFailed(DSC-79, DSC-80).
Fixed
- Adding the first explicit lobe to an empty lobes config via
config lobes add/detectnow prependsclaude_hometo the saved list. Previously the
implicit~/.claudedefault was silently dropped fromagent_homes(), so new
installs stopped reaching Claude andintrospect --fixcould not see the
Claude home as a coverage target (HARN-9). - In-repo marketplace entries with
source: "./"no longer drop all but the
first plugin; each plugin is scanned as its own catalog root. Plugin repos
used as nested[discover].sourcesentries inherit the pluginnameas their
default namespace, and marketplace-as-nested-source preserves per-plugin
namespacing (MKT-12, MKT-13, MKT-14).
v0.9.0
Added
- Consume Claude Code plugin manifests as a discovery source. A melded repo with
a.claude-plugin/plugin.json(a single plugin) or.claude-plugin/marketplace.json
(a catalog) has its skills and agents mapped tominditems and installed
through the usual store-and-symlink path;mindnever writes Claude's plugin
cache orsettings.json. The pluginnameis the default namespace prefix
(agents stay bare per NS-40); unsupported components (commands,hooks,
.mcp.json, ...) report a skipped count on meld. A marketplace is consumed as a
curated super-source, one sub-source per listed plugin, in-repo or external.
Manifests are held to the same path-safety and strict-parse guards as
mind.toml, andrecall --sourceslabels a source's manifest origin
(claude-plugin/claude-marketplace) (MKT-1..11). upgradeaccepts a glob in place of an exact item ref, mirroringforget; the
kind prefix and source qualifier compose (upgrade 'jk:*',upgrade 'skill:*',upgrade 'owner/repo#*'). A glob (or exact ref) that matches no
installed item reports up-to-date rather than erroring (CLI-65).
Changed
- The namespace separator is
:instead of-: a prefixed item installs as
<prefix>:<name>.upgrademigrates already-installed items from the old
<prefix>-<name>form in place, without a namespace change. meld --asis renamed--namespace(short-n);--asstays as a deprecated
alias. A source's namespace is locked once any of its items are installed:
changing it requires forgetting those items first, rather than an in-place
rename of installed items (NS-30, CLI-161).- Agents are no longer namespaced by a source prefix. An agent links into each
lobe under its bare frontmattername(the harness keys agents by that name,
not the filename), so a prefix reaches only its store path and manifest key.
Two sources shipping a same-named agent now collide:learnrefuses with an
AgentCollisionerror andmeldemits an advisory warning (NS-40, NS-41,
NS-42).
v0.8.0
Added
- A
[discover].sourcesentry may carryon-auth-failure, an inline table with
a requiredaction("error"or"skip") and an optionalmessage, to
declare how a nested source's clone failure is handled when it is caused by an
authentication failure."skip"warns and continues, leaving the source
unregistered;"error"exits non-zero with the standardized message. Auth
failure is detected from git stderr credential-denial patterns; the same
handling applies duringsync, which re-walks[discover].sources. Without
the directive an auth failure stays a generic git error. The policy governs
only the entry's own clone; auth failures from transitive descendants
propagate as hard errors (DSC-68, DSC-69, DSC-70).
Changed
- When forgetting a single installed item that other installed items depend on,
the TUI surfaces the dependent keys in the confirmation description before the
user confirms, mirroring the CLI's DEP-60 warning (TUI-52). strip_ansinow uses thestrip-ansi-escapescrate instead of a hand-rolled
parser, and additionally drops bidi-override and separator control characters,
hardening display of curator-controlled content against terminal injection.
v0.7.0
Added
absorb <ref>claims an unmanaged lobe item (a hand-written skill/agent/rule)
into a version-controlled source: it moves the item out of the lobe, commits
it, melds the source if needed, and learns it as a managed item. The
destination resolves from--to, thenMIND_ABSORB_TO, then theabsorb_to
config key, and falls back to a built-in~/.mind/personal(git-init on
demand). The inverse offorget --unmanaged.dumpwrites a super-sourcemind.tomlreproducing the current melded and
installed state: each source is referenced by spec, pinned to its recorded
commit, and stamped with an install directive (install = true/falseor
install_items = [...]for a subset).--whole-sourcesemits every source as
install = true.forget --unmanagedscopesforgetto unmanaged lobe items: a glob removes
every match, an exactkind:nameremoves one, and no ref removes all
unmanaged across lobes. Managed items are never matched.requires:frontmatter key declares explicit intra-source dependencies
(whitespace-separatedkind:name/bare names), unioned with the{{ns:}}
derived edges. Unlike a token, it is metadata and is not rewritten into the
item body.- A dependency graph over installed items, surfaced across the verbs:
forget
warns when removal breaks a dependent's reference (no cascade);recall --tree
renders the installed items as a dependency forest andrecall <item> --tree
scopes to one subtree; the non-interactiveprobelisting nests each item's
transitive dependencies, withprobe --jsonadding a flatdependencies
adjacency field; the TUI expands an item to its dependency subtree and jumps to
a dependency's canonical line on Enter. recall --tree --jsonemits the installed dependency forest as nested JSON
({"key": ..., "dependencies": [...]}, cycle back-edges as{"key": ..., "cycle": true}).- A
[discover].sourcesentry may setinstall_items = ["kind:name", ...]to
install only a named subset of a nested source's items. - A
[discover].sourcesentry may carryfollow-branch,roots, and
[[discover.sources.hooks]]to support an un-onboarded nested source without
forking it. The curator-supplied values apply only when the nested source
ships nomind.tomlof its own. - Documentation pages for the interactive TUI, managed policy, tooling (the
toolkind and path tokens), namespacing, dependencies, unmanaged items, and
init-source, plus the global flags, the color/Unicode gate, exit-status
semantics, the on-disk layout, and troubleshooting.
Changed
recallmarks an installed-but-out-of-date item with a distinct left-edge
marker (↑in yellow, ASCII^) instead of the installed✓/+, so the
stale state is visible from the marker alone.- A nested
[discover].sourcespin directive (follow-branch,pin-tag, or
pin-ref) is authoritative: it overrides the nested source's own[source]
pin, ranking just below a consumer meld flag. absorbis transactional: a commit, meld, or learn failure restores the
original lobe entry and leaves the manifest unchanged.absorbandforget
refuse a destructive confirmation in--jsonmode without--yesrather than
proceeding silently.
Security
- Pin and ref values are validated at parse time: a value beginning with
-(or
containing whitespace,.., or control characters) is rejected, andgit fetchinvocations use a--terminator. This prevents an untrusted cloned
mind.tomlpin or a--follow-branch/--pin-tag/--pin-refflag from
injecting git options.
v0.6.2
Added
- A published documentation site at https://jaemk.github.io/mind/, with a guide
(install, quickstart, commands, configuration, install hooks, troubleshooting),
authoring docs, and an examples page mapping each consumer and maintainer use
case to a runnable example. - Example sources for the
toolkind and path tokens, source lifecycle hooks,
[source].rootssubtree discovery, an authoritative[[items]]inventory, and
a[discover].sourcessuper-source, each verified by a test. - The crate publishes to crates.io on release (
cargo install mind-cliinstalls
themindbinary), and carriesrepository,homepage, anddocumentation
metadata.
Changed
- The README is a concise landing page; the documentation site is the primary
reference.
v0.6.1
Changed
- Release tooling only: the GitHub release is created with the GitHub CLI and its
notes are taken from this changelog. No change to themindbinary.
v0.6.0
Added
- Item-level lifecycle hooks: an item may declare
[[items.hooks]](withrun,
name,optional, andevent=install/uninstall), the same shape as a
source's[[hooks]]. The scalarinstall/uninstallfields remain as
shorthand. Item install hooks run after the source install hook and item
uninstall hooks run before the source uninstall hook, so teardown is the
reverse of install. unmeldaccepts a glob or partial source name and removes every matching
source, mirroring the glob selection inlearn/forget(e.g.
unmeld '*agents').probeandrecallaccept a glob for--source.-nas a short form ofprobe --no-tui.
Changed
recalland theprobelisting mark an installed item out of date exactly
whenmind upgradewould act on it: its source content changed, or its
effective (namespaced) name changed. A source commit that advances without
changing an item's content or name no longer marks it, and a hash failure now
flags the item rather than reporting it up to date. The recall status view
shows a renamed item as out of date instead of as removed upstream.[source].installis deprecated in favor of[[hooks]].mind review
reports the deprecated field andinit-sourcescaffolds only[[hooks]].init-sourceflags a bare sibling reference only when an effective prefix is
in force;review's hardcoded-path and bare-tool advisories note that a
location populated by an install hook is safe.- A malformed glob selector reports an invalid-pattern error instead of a
no-source-found error. - Renamed the crate package to
mind-cli; the installed binary staysmind.
Updated dependencies (toml1,ratatui0.30,crossterm0.29,dirs6,
clap_mangen0.3).