ase-sync-reconcile
SkillProductivityReconcile one set of artifact kinds (the target) to reflect the current state of another set of artifact kinds (the source), while optionally honoring a filtering hint. Use when the user wants to "reconcile", "sync", "align", or "update" artifacts like SPEC, CODE, DOCS, TASK, INFR, or OTHR against each other.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the ase-sync-reconcile skill
What this skill tells your AI
The instructions your AI receives, as published by rse/ase in plugin/skills/ase-sync-reconcile/SKILL.md and read by ahel’s review.
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
$ARGUMENTS
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-meta.md @${CLAUDE_SKILL_DIR}/../../meta/ase-format-spec.md @${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md @${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
Procedure
-
-
The recognized artifact kinds are the six tokens
TASK,SPEC,CODE,DOCS,INFR, andOTHR. Parse as the comma-separated kind list and as the comma-separated kind list. Upper-case and trim every parsed kind token. Do not output anything. -
Only output the following and then immediately STOP processing the entire current skill:
-
Set to the six recognized kinds
TASK,SPEC,CODE,DOCS,INFR,OTHRminus all kinds present in . Do not output anything. -
If any token in or is not one of the six recognized kinds, only output the following (with set to the first offending token) and then immediately STOP processing the entire current skill:
-
Remove from any kind that is also present in (a kind is never its own source).
Only output the following and then immediately STOP processing the entire current skill:
-
Treat as a comma-separated list of operation tokens. The getopt parser validates only the first token, so you MUST validate each remaining token yourself against the allowed set
all,add,update,remove. If any token is not in this set, bind to that offending token, then only output the following and then immediately STOP processing the entire current skill:Set to
add,update,removeifallis in , or to the given tokens otherwise. Do not output anything. -
Report the resolved target, source, and operations with the following :
-
-
-
Do not output anything in this STEP 2.
-
For all kinds in the union of and , call the
ase_artifact_list(kind: [ ... ])tool of theaseMCP server once, passing the lower-casedkindtokens, and read the returnedartifactsarray of{ kind, files }objects to obtain the project-relative file list per kind. -
Honor the filtering to reduce the source and/or target artifacts and/or the aspects of those artifacts you should take into account.
-
Read all (optionally filtered) source and target artifacts previously resolved and build a precise understanding of the current state they represent.
-
-
-
Internalize and honor the artifact-format conventions:
- the artifact-set meta information (
ase-format-meta.md), - the
SPECformat, i.e. the SpecBook models and formats plus the SpecBook schema configuration of the project (ase-format-spec.md), - the
TASKformat (ase-format-task.md).
Whenever a target artifact belongs to one of these kinds, the update MUST keep it conformant to the corresponding format (headings, structure, identifiers, references, and the
Modified:timestamp rule). The kindsCODE,DOCS,INFR, andOTHRhave no dedicated format contract and are treated as free-form. - the artifact-set meta information (
-
You MUST internalize and strictly honor the GENERIC TENETS, the RECONCILIATION TENETS, the REFACTORING TENETS, and the CRAFTING TENETS of the ASE Tenets when updating in the following. Do not output anything.
-
Call the
ase_timestamp(format: "yyyy-LL-dd HH:mm")tool of theaseMCP server once to find out the current time and store it in . -
Bidirectionally update the and artifacts so that they faithfully reflect the current state of each other.
Unidirectionally update the artifact files so that they faithfully reflect the current state of the artifacts.
Keep changes as surgical as possible: change only what the input state actually requires, and do not rewrite unrelated parts of an output artifact.
Restrict the update to the operations in , on the level of both the content inside an output artifact and whole output artifact files:
addcreates output content and files the input warrants but the output lacks,updatechanges existing output content the input contradicts, andremovedeletes output content and files the input no longer supports. Whatever an excluded operation would have changed stays silently untouched.For each formatted output artifact kind, strictly honor its format contract.
Whenever an output artifact is changed and contains a
Modified: <timestamp-modified-old/>line, replace this withModified: <timestamp-modified/>.Do not modify any output artifact: you MUST NOT call
Edit,Write,NotebookEdit,ase_task_save, or any other filesystem-modifying tool or shell command. Instead, store the complete change set in unified diff format in , diffing every touched file against its current on-disk content and every touchedTASKoutput against its plan text loaded via thease_task_loadMCP tool, so all context lines match exactly and the diff would apply cleanly.Apply the update directly to the output artifacts via the
Write/Edittools. For aTASKoutput, apply it via thease_task_saveMCP tool instead -- NEVER write a task plan file viaWrite/Editor by executing a shell command. -
Validate the specification by calling the
ase_specbook_lint()tool of theaseMCP server and reading its returneddiagnosticsarray of{ file, line, column, severity, message }objects. If it is not empty, fix the reported problems in the affectedSPECartifacts via theWrite/Edittools and call the tool again -- for at most three rounds in total. Do not output anything, unless diagnostics remain after the last round, in which case output the following , listing one bullet line per remaining diagnostic:<file/>:<line/>:<column/>: [...]
-
Report the intended updates with the following . Set to a run of backtick characters one longer than the longest backtick run occurring anywhere inside , but to at least three, so a diff which itself carries fenced code blocks cannot terminate the block prematurely:
diff
Only output the following :
Report the performed updates with the following , listing one bullet line per changed output file (with its project-relative path and an ultra-brief description of what was reconciled):
<file/>: [...]
Only output the following :
-
Finally, give the closing hints by expanding the following (which, depending on the configured , may each expand into nothing and hence emit no output at all):
-
Signals
- GitHub stars
- 52
- Forks
- 5
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
ase-sync-reconcile- Source
- github.com/rse/ase