absorb
mind absorb <ref> claims a single unmanaged lobe item (skill, agent, or rule)
into a version-controlled source and installs it as a managed item. It is the
constructive inverse of forget --unmanaged: instead of deleting an unmanaged
file, absorb moves it into a source you own, commits it there, and replaces
the lobe entry with a managed symlink. After absorb the item participates in
sync, upgrade, and forget like any installed item.
See Unmanaged items for how unmanaged items are detected and listed.
Basic usage
mind absorb skill:my-skill
mind absorb agent:my-agent
mind absorb rule:my-rule
mind absorb my-item --to /path/to/my-source
The ref must resolve to exactly one unmanaged item. A glob ref is an error; bulk absorb is not supported. A kind prefix disambiguates when the same name appears in more than one kind.
Tools are never absorbed: they are store-only and never appear as unmanaged lobe items (spec ABS-1).
Choosing the destination
The destination source is resolved in this precedence order:
--to <path>– the explicit destination flag.MIND_ABSORB_TOenvironment variable.absorb_tokey in~/.mind/config.toml.
The first one set wins; later sources are not consulted (spec ABS-2).
When none of the three is set and the run is interactive, absorb prompts for a
destination and offers ~/.mind/personal as the built-in default. That directory
is created and git init-ed on demand if it does not already exist. After a
prompted choice, absorb offers to save it as absorb_to in config.toml so
future invocations skip the prompt (spec ABS-3, ABS-4).
A non-interactive (non-TTY) run with no destination configured is an error
(ConfirmationRequired) and changes nothing (spec ABS-3).
When --yes is given on a TTY and no destination is configured, absorb
automatically uses (and persists) ~/.mind/personal. On a non-TTY this does not
apply: with no destination configured the run errors regardless of --yes (see
Running unattended below).
Flags
| flag | effect |
|---|---|
--to <path> | Destination source directory (highest precedence). |
-f / --force | Overwrite the destination convention path if a kind:name collision already exists there. Without --force, a collision is an error and nothing is changed (spec ABS-6). |
The global -y / --yes flag skips the [y/N] confirmation described below.
Confirmation and multi-lobe cleanup
An unmanaged item may occupy more than one lobe. absorb takes the content from
one occupied path; because learn relinks the item into every configured lobe
(spec STO-14), the other unmanaged copies must be removed so the managed link can
take their place.
Before acting, absorb lists what it will move and which stray copies it will
delete and prompts [y/N] once. This covers deleting files the user owns, so
the prompt runs even when only one lobe is affected (spec ABS-7).
--yes(-y) skips the prompt and proceeds.- A non-TTY run without
--yesrefuses withConfirmationRequiredand changes nothing. - Declining the prompt leaves the original lobe entry in place and the manifest unchanged.
What absorb does internally
- Resolves
<ref>to a single unmanaged item (ABS-1). - Confirms the destination source is a git repository. The
--to/MIND_ABSORB_TO/absorb_topath must already be a git repo; a non-repo path is an error.~/.mind/personalis the one pathabsorbwill create andgit initon demand (spec ABS-5). - Lists the move and any stray copies to delete; prompts
[y/N](skipped with--yes). - Moves the item into the destination source at its convention path
(
skills/<name>/,agents/<name>.md,rules/<name>.md). Melds the source first if it is not yet registered. - Stages and commits the moved item in the destination repo with the message
absorb <kind>:<name>(spec ABS-5). - Runs
learnon the item; the lobe path is now a managed symlink. - Records the item in the manifest keyed
kind:effective-namewith the destination source as its source (spec ABS-8).
A failure at any step before learn completes leaves the original lobe entry in
place and the manifest unchanged. A failed absorb never loses the user’s file
(spec ABS-10).
After absorb
The item’s effective name follows the destination source’s prefix when one is in
effect (--namespace or [source].prefix in mind.toml). It then appears in
mind recall, participates in mind upgrade and mind sync, and can be removed
with mind forget <kind:name> like any managed item (spec ABS-8).
Running unattended
Pass --yes (-y) to skip all prompts. In a non-TTY context without --yes,
absorb refuses at any point that would normally prompt (destination resolution
or the multi-lobe confirmation). You must also supply a destination via --to or
MIND_ABSORB_TO or absorb_to in config, because a missing destination in a
non-TTY context is itself an error (spec ABS-3).