Safety Model¶
Aikito modifies configuration consumed by other tools and stores durable knowledge in Git. Conservative write behavior reduces risk, but it does not remove the user's responsibility to review sensitive data and planned changes.
Git and Memory Privacy¶
aikito init workspace creates a local Git repository. It does not configure a
remote, make the repository private, or certify the contents as safe to
publish.
Before adding a remote or pushing, inspect memory and configuration for:
- API keys, tokens, passwords, or credentials;
- customer data and private conversations;
- internal addresses, infrastructure details, or private source code;
- sensitive raw debug output.
Do not use persistent memory as a transcript archive or secret store. Once a secret is committed, deleting it in a later commit does not remove it from Git history.
Initialization Write Boundaries¶
aikito init workspace refuses to write into the CLI source tree, another
directory that looks like an Aikito source checkout, or an unrecognized
non-empty directory. Keep the CLI checkout and user workspace separate:
This guard applies before workspace files are written. When pointing to an
existing recognized workspace on a new machine, aikito init workspace only
registers the local pointer without modifying files or Agent runtimes.
--force can refresh templates in a recognized Aikito workspace, but it does
not bypass directory safety checks.
aikito init project refuses to replace unmanaged agent-native instruction, skill,
or memory resources. It also refuses to bind an existing project name to a
different code directory.
Doctor pruning¶
In multi-host SoT setups, undetected Agents on a specific machine are offline and
must not be removed from agents/<name>.toml so other hosts can continue using them.
The --prune flag has been removed from aikito doctor. Offline
agents are preserved safely across all machines.
Adoption¶
aikito adopt builds and validates the complete import plan before writing. It
refuses the entire plan while instruction conflicts or invalid generated
resources remain; unreadable or malformed source configuration also blocks the
plan. Use aikito adopt --dry-run for a concise read-only plan, or
add --verbose to inspect every source and target.
Each blocking finding names the affected resource, source, reason, and an exact
next command. aikito doctor reports the same findings in its Adoption section
without importing anything; doctor --fix does not apply or skip adoption.
If a detected resource is intentionally out of scope, use a repeatable,
one-shot --skip instructions, --skip mcp/<name>, or
--skip subagent/<name>. Every skip is visible in the plan, and an unknown
target fails. There is no global skip-errors mode. Unreadable or malformed
source files remain unskippable because Aikito cannot safely determine their
contents.
New MCP or subagent resources may require registration of a built-in Agent.
The registration is part of the same preflight plan and precedes resource
writes. --skip agent/<name> blocks the plan unless its dependent new resources
are also skipped. Existing Agent definitions are never replaced by adoption.
An applied adoption creates timestamped backups under:
Native MCP configurations whose adapter materializes credentials are excluded from whole-file backups. They still participate in source fingerprint checks, so modifying or removing them after planning blocks all writes.
Adoption imports resources into the Aikito workspace. It does not overwrite the
original Agent configuration files; Agent-native changes occur only during an
explicit synchronization command. After applying adoption, run aikito sync.
It checks the complete workspace plan before writing and stops if any scope has
a conflict. Use aikito sync --dry-run --verbose when a detailed read-only
review is useful.
Workspace Import¶
aikito import workspace <source> --dry-run reads the source and target without
writing. The import never changes the source and does not delete content that
exists only in the target. Content conflicts preserve their target resources while other changes apply
in one recoverable transaction. Changes with invalid references and their
dependents are skipped as conflicts. Global path safety or snapshot findings
still stop the entire import before any writes. Use --keep-target RESOURCE_ID
to skip any source resource while preserving its target state,
or --take-source RESOURCE_ID to resolve a conflict using source content; choosing source never
bypasses reference or safety checks. An interrupted import can be recovered on
the next run through its transaction journal. Unresolved conflicts exit with
status 2; global blockers exit with status 1 before resource writes.
Possible plaintext credentials in imported files produce path-only warnings;
they do not block the import. Review those files before committing or sharing
the workspace. Use --verbose to inspect unchanged and skipped
source items as well as planned changes.
Conflict and Drift Protection¶
Internal workspace reconciliation uses a resource center with conditional batch
commits. Unresolved conflicts and uploads containing possible credentials are
kept out of the accepted batch; reference checks also protect local selections
from provider deletion. Global snapshot findings stop the round. Center and
replica commits are individually atomic: if the replica fails after a center
upload, its base stays unchanged and the next round can continue. See the
resource reconciliation contract
for state, recovery, and supported resource boundaries. Host-local
config:inbox.path is excluded, and notes use each replica's inbox prefix.
Shared TOML is transmitted as accepted logical values, with reference checks
protecting project and Agent dependents. Shared files may be reformatted when
reconciled; unrelated field values are preserved.
The response depends on the resource and command. A matching file alone does not prove that Aikito owns it.
| Situation | Default response | Reviewed next step |
|---|---|---|
| Copied project skill changed locally | Block project sync and preserve the copy | Use aikito diff project <name>; keep the local edit in the canonical skill or explicitly run aikito sync project <name> --force to replace the copy. |
| Unmanaged project skill directory matches the canonical skill | Leave files unchanged and report that ownership is unproven | aikito sync project <name> --force can explicitly claim the matching copy. |
| Unmanaged global skill directory or foreign skill symlink | Report a conflict and preserve the target | Inspect and resolve the target manually; global sync has no --force option. |
| Existing instruction or memory target is unmanaged | Report a conflict and preserve the target | Inspect both sources and resolve manually; --force cannot overwrite instructions or memory. |
| Unmanaged subagent definition occupies a selected target | Report a conflict and preserve the definition | Review it; aikito sync subagents --force <agent>/<subagent> authorizes only that target. |
| Managed MCP server was edited outside Aikito | Block MCP sync and preserve the configuration | Review the server; aikito sync mcp --force can replace the conflicting managed server node. |
| Unmanaged MCP server or unrelated configuration | Preserve it; a same-name collision blocks sync | Resolve the collision explicitly. Other servers and non-MCP settings remain untouched. |
Start with aikito sync --dry-run --verbose to inspect the complete workspace
plan. After resolving a conflict, preview again before syncing. The
workspace-wide aikito sync command has no --force; authorization is scoped
to the affected resource command. See the
command-level --force rules.
Owned project and global skill links are removed on deselection only when they
point to the exact canonical resource. Deselected copied project skills remain
in the checkout. Unmanaged links and files are preserved. See the
ownership,
skill,
instruction, and
memory invariants for exact transitions.
Subagent --prune removes only orphan definitions with Aikito ownership
markers; see the subagent invariants.
MCP changes are planned per server node and merged into each physical config file, preserving unrelated settings. Write failures trigger rollback; if recovery cannot complete, Aikito retains backups and reports manual recovery steps. See the MCP invariants.
Credentials¶
Canonical MCP configuration should contain environment-variable references,
not plaintext credentials. Adoption converts recognized secrets to references,
but users must still inspect imported configuration before committing it.
All supported MCP import adapters apply the same sensitive-header conversion,
including Claude native configuration and custom Agents. Existing references
and non-sensitive headers are preserved; configure generated
AIKITO_<SERVER>_<HEADER> variables before synchronization.
- Sensitive credential tokens, authorization headers, and environment variables are redacted in all plan summaries, CLI outputs, error messages, and public structured views (INV-MCP-05).
- Configuration files containing sensitive credentials or marked as sensitive suppress standard whole-file backups to prevent plaintext secrets leaking into backup directories, and enforce secure filesystem permissions (
0600on POSIX, restricted ACLs on Windows) (INV-MCP-06).
Platform Support and Constraints¶
Aikito provides native support across macOS, Linux, and Windows (PowerShell and Command Prompt):
- Symbolic Links: On POSIX systems and Windows, Aikito uses symbolic links to connect runtime Agent configurations with canonical resources. On Windows, creating unprivileged symbolic links requires enabling Windows Developer Mode (or running with Administrator privileges). When Developer Mode is disabled, Aikito cleanly refuses synchronization upfront and displays actionable steps to enable it.
- Credential File Permissions: On POSIX systems, credential-bearing configuration
files are restricted to owner read/write (
0600). On Windows, Aikito hardens NTFS Access Control Lists (icacls) by disabling inheritance and granting read/write access strictly to the active user account, stripping broad group permissions.
Managed Project Directories¶
Project .agents/skills/ is shared at entry level. Aikito manages only selected
skill names, preserves other project-owned entries, and reports a conflict only
when a selected name is already owned by the project. Project .agents/memory/
manages selected memory references and project notes/. Pre-existing unmanaged entries
evaluate to conflicts and are strictly preserved (INV-MEM-07).
Matching file contents alone never prove ownership (INV-OWN-01),
and synchronization never deletes unknown content.
Recovery Practice¶
Before applying changes to an established setup:
- Run the available preview or dry-run command.
- Review every conflict and target path.
- Confirm the adoption backup location when applicable.
- Apply one resource class at a time.
- Run the matching status command immediately afterward.