@ssheleg/agent-sync 1.4.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +16 -2
- package/agent-sync.example.json +3 -1
- package/package.json +5 -2
- package/plugins/agent-sync/.claude-plugin/plugin.json +4 -2
- package/plugins/agent-sync/skills/agent-sync/SKILL.md +1 -1
- package/plugins/agent-sync/skills/agent-sync/references/pipeline-binding.md +48 -13
- package/plugins/agent-sync/skills/agent-sync/scripts/__pycache__/agent_sync.cpython-312.pyc +0 -0
- package/plugins/agent-sync/skills/agent-sync/scripts/agent_sync.py +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,43 @@
|
|
|
3
3
|
All notable changes to this project are documented here.
|
|
4
4
|
This project adheres to [Semantic Versioning](https://semver.org/).
|
|
5
5
|
|
|
6
|
+
## 1.4.3 — 2026-08-03
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- **The `pipeline.json` example did not validate against the schema it cited.** It
|
|
11
|
+
claimed `task-pipeline`'s `pipeline.schema.json` permitted it while carrying a
|
|
12
|
+
string `id`, a `title` where the schema says `name`, and no `state` at all — which
|
|
13
|
+
is required. Anyone who copied it got a config `task-pipeline` rejects. The example
|
|
14
|
+
is now checked against that schema.
|
|
15
|
+
- **Gate texts stated only this plugin's half.** Each `check` read as if it replaced
|
|
16
|
+
the stage's own criteria, so a host that copied the block silently dropped them —
|
|
17
|
+
stage 9 lost the propagation sweep and the documentation gate, stage 10 lost the
|
|
18
|
+
ladder walk and the evidence rule. Every `check` is now written as
|
|
19
|
+
*`<the stage's own criteria>` **AND** agent-sync's clause*.
|
|
20
|
+
- **Stage 9 pointed at the wrong doctrine.** `task-pipeline:artifacts` is the
|
|
21
|
+
artifact-layout reference; that stage runs on `task-pipeline:documentation` and
|
|
22
|
+
`task-pipeline:gates` since the documentation track landed.
|
|
23
|
+
- **`guardedFiles` did not cover what the pipeline now creates.** `docs/DOCMAP.md`
|
|
24
|
+
holds a project's registers, propagation matrix and ratchet floors, and
|
|
25
|
+
`docs/superpowers/retro.md` is capped at ten standing instructions — so a
|
|
26
|
+
concurrent write there drops a lesson instead of conflicting visibly. Both are
|
|
27
|
+
guarded, with the reasoning in `references/pipeline-binding.md` because the config
|
|
28
|
+
schema keeps `agent-sync.json` to known keys.
|
|
29
|
+
|
|
30
|
+
## 1.4.2 — 2026-07-30
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
- **The README's hook section now opens with what it actually is:** the only part
|
|
34
|
+
of this plugin that executes code on your machine, four bash scripts with 15-20s
|
|
35
|
+
timeouts, run by Claude Code on named events, with a pointer to `SECURITY.md`
|
|
36
|
+
for every path the install touches. The facts were already in `SECURITY.md`; the
|
|
37
|
+
README described the hooks' behavior without ever framing them as the security
|
|
38
|
+
surface a reader should check first.
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
- **`displayName`** ("Agent Sync") in both manifests.
|
|
42
|
+
|
|
6
43
|
## 1.4.1 — 2026-07-30
|
|
7
44
|
|
|
8
45
|
### Fixed
|
package/README.md
CHANGED
|
@@ -361,8 +361,15 @@ Adding one: read
|
|
|
361
361
|
|
|
362
362
|
## Enforcement hooks
|
|
363
363
|
|
|
364
|
-
|
|
365
|
-
|
|
364
|
+
**This is the only part of the plugin that executes code on your machine.** Everything
|
|
365
|
+
else — the skill, its references — is text an agent reads. Four bash scripts, bundled in
|
|
366
|
+
the plugin and run by Claude Code on the events below, each with a timeout (15–20s) so a
|
|
367
|
+
hung script cannot stall a session. Read them before installing: they are short, and
|
|
368
|
+
[`SECURITY.md`](SECURITY.md) lists every path the install touches and why.
|
|
369
|
+
|
|
370
|
+
Every hook exits immediately in projects without `.claude/agent-sync.json`, so installing
|
|
371
|
+
globally changes nothing elsewhere. The `PreToolUse` guard can **deny** a tool call and
|
|
372
|
+
never grants one that would otherwise be denied.
|
|
366
373
|
|
|
367
374
|
| Hook | Runs | Effect |
|
|
368
375
|
|---|---|---|
|
|
@@ -454,6 +461,13 @@ Security reports: [SECURITY.md](SECURITY.md).
|
|
|
454
461
|
bundle, which installs the whole family for Claude Code, Cursor, Codex and 70+
|
|
455
462
|
other agents with one command.
|
|
456
463
|
|
|
464
|
+
## Author
|
|
465
|
+
|
|
466
|
+
Built by ssheleg — [sshlg.me](https://sshlg.me)
|
|
467
|
+
|
|
468
|
+
- X / Twitter — [@sshlg93](https://x.com/sshlg93)
|
|
469
|
+
- Telegram — [@sshlg](https://t.me/sshlg)
|
|
470
|
+
|
|
457
471
|
## License
|
|
458
472
|
|
|
459
473
|
MIT © ssheleg
|
package/agent-sync.example.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ssheleg/agent-sync",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.3",
|
|
4
4
|
"description": "Let concurrent coding agents share one project without colliding \u2014 leases with TTL, race-free id reservation, a run journal and a generated board, over a pluggable knowledge cloud.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"agent-sync": "bin/agent-sync.js"
|
|
@@ -38,7 +38,10 @@
|
|
|
38
38
|
"bugs": {
|
|
39
39
|
"url": "https://github.com/ssheleg/agent-sync/issues"
|
|
40
40
|
},
|
|
41
|
-
"author":
|
|
41
|
+
"author": {
|
|
42
|
+
"name": "ssheleg",
|
|
43
|
+
"url": "https://x.com/sshlg93"
|
|
44
|
+
},
|
|
42
45
|
"license": "MIT",
|
|
43
46
|
"engines": {
|
|
44
47
|
"node": ">=18"
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-sync",
|
|
3
|
-
"
|
|
3
|
+
"displayName": "Agent Sync",
|
|
4
|
+
"version": "1.4.3",
|
|
4
5
|
"description": "Coordination layer for multi-agent repositories \u2014 leases with TTL, race-free ID reservation, a run journal, a cross-repo signal feed and a generated board, over a pluggable knowledge cloud.",
|
|
5
6
|
"author": {
|
|
6
|
-
"name": "ssheleg"
|
|
7
|
+
"name": "ssheleg",
|
|
8
|
+
"url": "https://x.com/sshlg93"
|
|
7
9
|
},
|
|
8
10
|
"homepage": "https://github.com/ssheleg/agent-sync",
|
|
9
11
|
"repository": "https://github.com/ssheleg/agent-sync",
|
|
@@ -4,7 +4,7 @@ description: "Use when several coding agents work one repository at the same tim
|
|
|
4
4
|
compatibility: "Requires the task-pipeline skill for its stages (npx sshlg-skills install). Needs python3 3.9+ (stdlib only, HTTP included - nothing to pip install) and bash for the hooks. The knowledge backend is configured per project; with none configured it degrades to git-file leases. Enforcement hooks are Claude Code only - on other agents the same checks run as a self-check."
|
|
5
5
|
license: MIT
|
|
6
6
|
metadata:
|
|
7
|
-
version: "1.4.
|
|
7
|
+
version: "1.4.3"
|
|
8
8
|
author: ssheleg
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -24,30 +24,65 @@
|
|
|
24
24
|
## pipeline.json
|
|
25
25
|
|
|
26
26
|
`task-pipeline`'s `pipeline.schema.json` already permits this; nothing is forked.
|
|
27
|
-
Add `agent-sync` to `skills[]` on the six stages that call it
|
|
27
|
+
Add `agent-sync` to `skills[]` on the six stages that call it, and append its
|
|
28
|
+
clause to each of those stages' existing `gate.check`:
|
|
28
29
|
|
|
29
30
|
```json
|
|
30
31
|
{
|
|
31
32
|
"stages": [
|
|
32
|
-
{ "id":
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"gate": { "type": "
|
|
38
|
-
{ "id":
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"gate": { "type": "auto", "check": "
|
|
33
|
+
{ "id": 0, "state": "intake", "name": "Intake grill",
|
|
34
|
+
"skills": ["task-pipeline:grill", "agent-sync"],
|
|
35
|
+
"gate": { "type": "manual", "check": "<the stage's own criteria> AND the lease for this task is held before the brief is committed" } },
|
|
36
|
+
{ "id": 3, "state": "spec", "name": "Spec",
|
|
37
|
+
"skills": ["task-pipeline:spec", "agent-sync"],
|
|
38
|
+
"gate": { "type": "manual", "check": "<the stage's own criteria> AND every id the spec writes was reserved first" } },
|
|
39
|
+
{ "id": 4, "state": "plan", "name": "Plan",
|
|
40
|
+
"skills": ["task-pipeline:planning", "agent-sync"],
|
|
41
|
+
"gate": { "type": "auto", "check": "<the stage's own criteria> AND no two parallel tasks write one file" } },
|
|
42
|
+
{ "id": 5, "state": "dev", "name": "Dev",
|
|
43
|
+
"skills": ["task-pipeline:build", "agent-sync"],
|
|
44
|
+
"gate": { "type": "auto", "check": "<the stage's own criteria> AND the lease is live and submodule pointers are current" } },
|
|
45
|
+
{ "id": 9, "state": "docs-wiki", "name": "Docs + wiki",
|
|
46
|
+
"skills": ["task-pipeline:documentation", "task-pipeline:gates", "agent-sync"],
|
|
47
|
+
"gate": { "type": "auto", "check": "<the stage's own criteria — the propagation sweep and a green documentation gate with its ratchets printed> AND the board is regenerated with no mirror drift" } },
|
|
48
|
+
{ "id": 10, "state": "acceptance", "name": "Acceptance",
|
|
49
|
+
"skills": ["task-pipeline:acceptance", "agent-sync"],
|
|
50
|
+
"gate": { "type": "manual", "check": "<the stage's own criteria> AND every lease is released and every claim tag written through" } }
|
|
44
51
|
]
|
|
45
52
|
}
|
|
46
53
|
```
|
|
47
54
|
|
|
55
|
+
**Three things in that JSON are contract, not style.** `state` is **required** by
|
|
56
|
+
`pipeline.schema.json`, `id` is an **integer**, and the human label is `name` — not
|
|
57
|
+
`title`. This example carried `"id": "0"` with a `title` and no `state` until
|
|
58
|
+
2026-08-03, while claiming the schema permitted it; anyone who copied it got a config
|
|
59
|
+
`task-pipeline` rejects.
|
|
60
|
+
|
|
61
|
+
**And the gate text EXTENDS, never replaces.** Each `check` above is
|
|
62
|
+
*`<the stage's own criteria>` **AND** agent-sync's clause* — written out that way on
|
|
63
|
+
purpose. An earlier version of this file stated only agent-sync's half, so a host
|
|
64
|
+
that copied it silently dropped the stage's real gate: stage 9 lost the propagation
|
|
65
|
+
sweep and the documentation gate, stage 10 lost the ladder walk and the evidence
|
|
66
|
+
rule.
|
|
67
|
+
|
|
48
68
|
Stages 1, 2, 6, 7 and 8 keep their own `skills[]`; `agent-sync` only journals there,
|
|
49
69
|
which needs no wiring.
|
|
50
70
|
|
|
71
|
+
## What must be guarded
|
|
72
|
+
|
|
73
|
+
`guardedFiles` is every shared file two agents could write in the same minute — and
|
|
74
|
+
since the pipeline's documentation track it is longer than the registers:
|
|
75
|
+
|
|
76
|
+
| File | Why it is shared state |
|
|
77
|
+
|---|---|
|
|
78
|
+
| the decision register (`docs/DECISIONS.md` or `docs/adr/`) | append-only; a concurrent write loses an entry |
|
|
79
|
+
| `docs/OPEN_QUESTIONS.md`, `docs/ROADMAP.md` | the same |
|
|
80
|
+
| **`docs/DOCMAP.md`** | seeded into every project the pipeline touches; holds the registers, the propagation matrix and the ratchet floors. Losing it loses the map |
|
|
81
|
+
| **`docs/superpowers/retro.md`** | capped at ten standing instructions, so a concurrent write silently **drops a lesson** instead of conflicting visibly |
|
|
82
|
+
|
|
83
|
+
The schema keeps `agent-sync.json` to known keys, which is why this reasoning lives
|
|
84
|
+
here and not as a comment in the config.
|
|
85
|
+
|
|
51
86
|
## Preflight
|
|
52
87
|
|
|
53
88
|
`task-pipeline` is required. When it is absent, print the install line and **stop** —
|
|
Binary file
|