@event4u/agent-config 1.39.0 → 1.40.0
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/.agent-src/commands/orchestrate.md +123 -0
- package/.agent-src/commands/sync-gitignore/fix.md +135 -0
- package/.agent-src/commands/sync-gitignore.md +31 -5
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +30 -2
- package/.agent-src/skills/subagent-orchestration/SKILL.md +9 -0
- package/.agent-src/skills/using-git-worktrees/SKILL.md +25 -0
- package/.agent-src/templates/agent-settings.md +9 -0
- package/.agent-src/templates/scripts/work_engine/orchestration.py +168 -0
- package/.claude-plugin/marketplace.json +3 -1
- package/CHANGELOG.md +42 -0
- package/README.md +5 -5
- package/bin/install.php +13 -6
- package/config/agent-settings.template.yml +21 -0
- package/docs/DISTRIBUTION_CHECKLIST.md +169 -0
- package/docs/architecture.md +1 -1
- package/docs/catalog.md +3 -2
- package/docs/contracts/audit-log-v1.md +142 -0
- package/docs/contracts/command-clusters.md +2 -0
- package/docs/contracts/file-ownership-matrix.json +20 -0
- package/docs/contracts/orchestration-dsl-v1.md +152 -0
- package/docs/getting-started.md +1 -1
- package/docs/installation.md +132 -0
- package/docs/setup/per-ide/aider.md +48 -0
- package/docs/setup/per-ide/claude-code.md +108 -0
- package/docs/setup/per-ide/claude-desktop.md +148 -0
- package/docs/setup/per-ide/cline.md +43 -0
- package/docs/setup/per-ide/codex.md +46 -0
- package/docs/setup/per-ide/copilot.md +80 -0
- package/docs/setup/per-ide/cursor.md +125 -0
- package/docs/setup/per-ide/gemini-cli.md +45 -0
- package/docs/setup/per-ide/windsurf.md +120 -0
- package/package.json +1 -1
- package/scripts/compress.py +153 -1
- package/scripts/extract_audit_patterns.py +202 -0
- package/scripts/install +156 -1
- package/scripts/install.py +270 -10
- package/scripts/install.sh +52 -7
- package/scripts/lint_orchestration_dsl.py +214 -0
- package/scripts/skill_linter.py +9 -0
- package/scripts/sync_gitignore.py +56 -1
- package/templates/claude_desktop_config.json.template +21 -0
- package/templates/cursor-rule.mdc.j2 +7 -0
- package/templates/global-install-manifest.yml +91 -0
- package/templates/marketing-copy.yml +64 -0
- package/templates/windsurf-rule.md.j2 +7 -0
package/scripts/skill_linter.py
CHANGED
|
@@ -1605,6 +1605,15 @@ def gather_changed_candidate_files(root: Path) -> list[Path]:
|
|
|
1605
1605
|
if path.is_symlink():
|
|
1606
1606
|
continue
|
|
1607
1607
|
norm = raw.replace("\\", "/")
|
|
1608
|
+
# Only lint source-of-truth and source-mirror dirs. Projection
|
|
1609
|
+
# dirs (.windsurf/, .cursor/, .clinerules/, .claude/) use
|
|
1610
|
+
# tool-native frontmatter (e.g. Windsurf's trigger/globs) that
|
|
1611
|
+
# the linter does not validate — they regenerate from source.
|
|
1612
|
+
if not (
|
|
1613
|
+
norm.startswith(".agent-src.uncompressed/")
|
|
1614
|
+
or norm.startswith(".agent-src/")
|
|
1615
|
+
):
|
|
1616
|
+
continue
|
|
1608
1617
|
if path.name == "SKILL.md" or "/rules/" in norm or "/commands/" in norm:
|
|
1609
1618
|
files.append(path)
|
|
1610
1619
|
return sorted(set(files))
|
|
@@ -14,7 +14,13 @@ are preserved). Call with `--replace` for a destructive full rewrite.
|
|
|
14
14
|
|
|
15
15
|
Usage:
|
|
16
16
|
python3 scripts/sync_gitignore.py [--path .gitignore] [--template config/gitignore-block.txt]
|
|
17
|
-
[--dry-run] [--replace] [--quiet]
|
|
17
|
+
[--dry-run] [--replace] [--cleanup-legacy] [--quiet]
|
|
18
|
+
|
|
19
|
+
`--cleanup-legacy` additionally scrubs legacy patterns (pre-/agents/ layout
|
|
20
|
+
runtime artefacts) from anywhere in the target file — inside the managed
|
|
21
|
+
block and outside, where older installers or hand-edits dropped them.
|
|
22
|
+
Runs before the regular sync, so a single invocation removes garbage and
|
|
23
|
+
re-adds the current canonical entries.
|
|
18
24
|
|
|
19
25
|
Exit codes:
|
|
20
26
|
0 — no changes needed (or --dry-run ran successfully)
|
|
@@ -34,6 +40,20 @@ SECTION_FOOTER = "# event4u/agent-config — END"
|
|
|
34
40
|
DEFAULT_GITIGNORE = ".gitignore"
|
|
35
41
|
DEFAULT_TEMPLATE = Path(__file__).resolve().parent.parent / "config" / "gitignore-block.txt"
|
|
36
42
|
|
|
43
|
+
# Legacy patterns that lived in older versions of config/gitignore-block.txt
|
|
44
|
+
# before runtime artefacts moved under /agents/ (May 2026). They get stripped
|
|
45
|
+
# wherever they appear in the consumer's .gitignore — inside the managed block
|
|
46
|
+
# or outside (older installers / hand-edits). Current canonical equivalents
|
|
47
|
+
# (e.g. /agents/.agent-chat-history) come from the template and are NOT
|
|
48
|
+
# affected. Leading-slash variants are matched defensively.
|
|
49
|
+
LEGACY_PATTERNS: tuple[str, ...] = (
|
|
50
|
+
".agent-chat-history",
|
|
51
|
+
".agent-chat-history.bak",
|
|
52
|
+
".agent-chat-history.*.bak",
|
|
53
|
+
".agent-prices.md",
|
|
54
|
+
".council-tmp/",
|
|
55
|
+
)
|
|
56
|
+
|
|
37
57
|
|
|
38
58
|
def _strip(ln: str) -> str:
|
|
39
59
|
return ln.rstrip("\n").rstrip()
|
|
@@ -149,6 +169,26 @@ def sync_block(existing_lines: list[str],
|
|
|
149
169
|
return head + new_block + tail, missing
|
|
150
170
|
|
|
151
171
|
|
|
172
|
+
def cleanup_legacy(lines: list[str]) -> tuple[list[str], list[str]]:
|
|
173
|
+
"""Strip legacy entries from anywhere in the file.
|
|
174
|
+
|
|
175
|
+
A line is legacy when its stripped, leading-whitespace-trimmed content
|
|
176
|
+
matches a `LEGACY_PATTERNS` entry — with or without a leading slash.
|
|
177
|
+
Comments and blank lines are untouched; current managed entries (e.g.
|
|
178
|
+
`/agents/.agent-chat-history`) are not in the legacy set and survive.
|
|
179
|
+
"""
|
|
180
|
+
legacy = set(LEGACY_PATTERNS)
|
|
181
|
+
kept: list[str] = []
|
|
182
|
+
removed: list[str] = []
|
|
183
|
+
for ln in lines:
|
|
184
|
+
s = _strip(ln).lstrip()
|
|
185
|
+
if s in legacy or (s.startswith("/") and s[1:] in legacy):
|
|
186
|
+
removed.append(s)
|
|
187
|
+
continue
|
|
188
|
+
kept.append(ln)
|
|
189
|
+
return kept, removed
|
|
190
|
+
|
|
191
|
+
|
|
152
192
|
def format_file(lines: list[str]) -> str:
|
|
153
193
|
"""Join lines with newlines and enforce exactly one trailing newline."""
|
|
154
194
|
text = "\n".join(lines)
|
|
@@ -174,6 +214,9 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
174
214
|
ap.add_argument("--replace", action="store_true",
|
|
175
215
|
help="rewrite the block in full (discards user-added "
|
|
176
216
|
"lines inside the block)")
|
|
217
|
+
ap.add_argument("--cleanup-legacy", action="store_true",
|
|
218
|
+
help="strip legacy patterns (pre-/agents/ layout) from "
|
|
219
|
+
"anywhere in the file before syncing the block")
|
|
177
220
|
ap.add_argument("--quiet", action="store_true",
|
|
178
221
|
help="suppress summary on success")
|
|
179
222
|
args = ap.parse_args(argv)
|
|
@@ -193,6 +236,10 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
193
236
|
existing_text = ""
|
|
194
237
|
existing_lines = []
|
|
195
238
|
|
|
239
|
+
removed_legacy: list[str] = []
|
|
240
|
+
if args.cleanup_legacy:
|
|
241
|
+
existing_lines, removed_legacy = cleanup_legacy(existing_lines)
|
|
242
|
+
|
|
196
243
|
new_lines, added = sync_block(
|
|
197
244
|
existing_lines, template_lines, replace=args.replace,
|
|
198
245
|
)
|
|
@@ -211,6 +258,10 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
211
258
|
print(f"\n(dry-run) would add {len(added)} entr"
|
|
212
259
|
f"{'y' if len(added) == 1 else 'ies'} to {target}",
|
|
213
260
|
file=sys.stderr)
|
|
261
|
+
if removed_legacy:
|
|
262
|
+
print(f"(dry-run) would remove {len(removed_legacy)} legacy "
|
|
263
|
+
f"entr{'y' if len(removed_legacy) == 1 else 'ies'}: "
|
|
264
|
+
f"{', '.join(removed_legacy)}", file=sys.stderr)
|
|
214
265
|
return 0
|
|
215
266
|
|
|
216
267
|
target.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -219,6 +270,10 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
219
270
|
action = "replaced" if args.replace else "updated"
|
|
220
271
|
print(f"✅ {target}: {action} block "
|
|
221
272
|
f"({len(added)} entr{'y' if len(added) == 1 else 'ies'} added)")
|
|
273
|
+
if removed_legacy:
|
|
274
|
+
print(f" removed {len(removed_legacy)} legacy "
|
|
275
|
+
f"entr{'y' if len(removed_legacy) == 1 else 'ies'}: "
|
|
276
|
+
f"{', '.join(removed_legacy)}")
|
|
222
277
|
return 0
|
|
223
278
|
|
|
224
279
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"//": "Claude Desktop config template — agent-config",
|
|
3
|
+
"//1": "Copy this to one of:",
|
|
4
|
+
"//2": " macOS ~/Library/Application Support/Claude/claude_desktop_config.json",
|
|
5
|
+
"//3": " Windows %APPDATA%\\Claude\\claude_desktop_config.json",
|
|
6
|
+
"//4": " Linux ~/.config/Claude/claude_desktop_config.json",
|
|
7
|
+
"//5": "Strip the leading '_disabled_' prefix on the mcpServers entry below to enable the MCP connector.",
|
|
8
|
+
"//6": "Hosted endpoint is read-only and identity-stable per release; full client setup details in docs/setup/mcp-client-config.md.",
|
|
9
|
+
"//7": "Restart Claude Desktop fully (Cmd+Q on macOS) after editing — the menubar process keeps the old config cached otherwise.",
|
|
10
|
+
|
|
11
|
+
"_disabled_mcpServers": {
|
|
12
|
+
"agent-config": {
|
|
13
|
+
"command": "npx",
|
|
14
|
+
"args": [
|
|
15
|
+
"-y",
|
|
16
|
+
"mcp-remote",
|
|
17
|
+
"https://agent-config-mcp.event4u.workers.dev"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Global Install Manifest — road-to-simplicity-and-everywhere Phase 3
|
|
2
|
+
#
|
|
3
|
+
# Curated subset of rules + skills shipped to user-scope directories
|
|
4
|
+
# (~/.claude/, ~/.cursor/, ~/.codeium/windsurf/, ~/.config/agent-config/)
|
|
5
|
+
# by `scripts/install --global`. Without curation we'd dump 200+ skills
|
|
6
|
+
# into user dirs — that is the failure mode anthropics/claude-code#53950
|
|
7
|
+
# flagged.
|
|
8
|
+
#
|
|
9
|
+
# Schema (v1):
|
|
10
|
+
# kernel_rules: list[str] — rule IDs from router.json's `kernel`.
|
|
11
|
+
# Always shipped to every enabled surface.
|
|
12
|
+
# top_skills: list[entry] — curated universal skills.
|
|
13
|
+
# entry.id : skill directory under .agent-src/skills/
|
|
14
|
+
# entry.surfaces : subset of [claude-code, cursor, windsurf, fallback]
|
|
15
|
+
# — fallback is always written.
|
|
16
|
+
#
|
|
17
|
+
# Source: kernel_rules mirrors router.json; top_skills is a 15-pick
|
|
18
|
+
# distilled from .agent-src/skills/ — universal coding-loop helpers
|
|
19
|
+
# (work, commit, PR, review, quality, analyze, handoff). Per-stack
|
|
20
|
+
# skills (laravel, react-shadcn-ui, php-coder) stay project-local.
|
|
21
|
+
#
|
|
22
|
+
# Per-tool target paths (handled by scripts/install.py global subcommand):
|
|
23
|
+
# claude-code : ~/.claude/skills/event4u/<id>/SKILL.md
|
|
24
|
+
# ~/.claude/rules/event4u/<rule>.md
|
|
25
|
+
# cursor : ~/.cursor/rules/imported/event4u/<rule>.mdc
|
|
26
|
+
# ~/.cursor/skills/event4u/<id>/ (skills surface; mirrors agent-os)
|
|
27
|
+
# windsurf : ~/.codeium/windsurf/global_workflows/event4u/<id>.md
|
|
28
|
+
# fallback : ~/.config/agent-config/{rules,skills}/event4u/
|
|
29
|
+
#
|
|
30
|
+
# All writes are namespaced under `event4u/` so `--global --uninstall`
|
|
31
|
+
# can `rm -rf` the namespace dir without touching user-added files.
|
|
32
|
+
|
|
33
|
+
schema_version: 1
|
|
34
|
+
|
|
35
|
+
# Always-loaded rules — mirrors router.json's `kernel` array.
|
|
36
|
+
# Symlinked / copied into every enabled surface's rules dir.
|
|
37
|
+
kernel_rules:
|
|
38
|
+
- agent-authority
|
|
39
|
+
- ask-when-uncertain
|
|
40
|
+
- commit-policy
|
|
41
|
+
- direct-answers
|
|
42
|
+
- language-and-tone
|
|
43
|
+
- no-cheap-questions
|
|
44
|
+
- non-destructive-by-default
|
|
45
|
+
- scope-control
|
|
46
|
+
- verify-before-complete
|
|
47
|
+
|
|
48
|
+
# Top-N curated skills. The 15 picks below are coding-loop universals:
|
|
49
|
+
# the agent reaches for them on almost any task, regardless of stack.
|
|
50
|
+
# Per-stack and domain skills are deliberately omitted — they belong in
|
|
51
|
+
# project-local installs where the stack signal is unambiguous.
|
|
52
|
+
top_skills:
|
|
53
|
+
# --- Workflow drivers (most-touched commands) ---
|
|
54
|
+
- id: work
|
|
55
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
56
|
+
- id: commit
|
|
57
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
58
|
+
- id: create-pr
|
|
59
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
60
|
+
- id: review-changes
|
|
61
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
62
|
+
- id: quality-fix
|
|
63
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
64
|
+
|
|
65
|
+
# --- Session / context management ---
|
|
66
|
+
- id: agent-handoff
|
|
67
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
68
|
+
- id: agent-status
|
|
69
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
70
|
+
- id: project-analyze
|
|
71
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
72
|
+
- id: project-health
|
|
73
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
74
|
+
|
|
75
|
+
# --- Investigation / debugging ---
|
|
76
|
+
- id: bug-investigate
|
|
77
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
78
|
+
- id: bug-fix
|
|
79
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
80
|
+
- id: systematic-debugging
|
|
81
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
82
|
+
|
|
83
|
+
# --- Ticket / PR drivers ---
|
|
84
|
+
- id: implement-ticket
|
|
85
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
86
|
+
- id: prepare-for-review
|
|
87
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
88
|
+
|
|
89
|
+
# --- Onboarding (single command, surfaces a project) ---
|
|
90
|
+
- id: onboard
|
|
91
|
+
surfaces: [claude-code, cursor, windsurf, fallback]
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# marketing-copy.yml — single source of truth for all marketplace
|
|
2
|
+
# listings, GitHub repo metadata, npm package descriptions, and
|
|
3
|
+
# README taglines. Edit here once; downstream surfaces sync on
|
|
4
|
+
# `task generate-tools` (Phase 7 / S38 of road-to-simplicity-and-everywhere).
|
|
5
|
+
|
|
6
|
+
tagline: >-
|
|
7
|
+
Shared agent configuration — skills, rules, and slash commands for
|
|
8
|
+
AI coding tools (Claude Code, Cursor, Windsurf, Cline, Aider,
|
|
9
|
+
Codex, Gemini CLI, Copilot, Augment).
|
|
10
|
+
|
|
11
|
+
short_description: >-
|
|
12
|
+
Project-installable + global agent skill suite — works across
|
|
13
|
+
every major AI coding tool. One install, every editor.
|
|
14
|
+
|
|
15
|
+
# GitHub repo topics (set via `gh repo edit --add-topic ...`).
|
|
16
|
+
# Keep this list short and high-signal; GitHub caps display at ~6.
|
|
17
|
+
github_topics:
|
|
18
|
+
- agent
|
|
19
|
+
- claude-code
|
|
20
|
+
- cursor
|
|
21
|
+
- windsurf
|
|
22
|
+
- cline
|
|
23
|
+
- mcp
|
|
24
|
+
- agents-md
|
|
25
|
+
- skill-files
|
|
26
|
+
- copilot
|
|
27
|
+
- aider
|
|
28
|
+
|
|
29
|
+
# Marketplace listings (Anthropic, Cursor, Smithery) read these.
|
|
30
|
+
listing:
|
|
31
|
+
name: event4u/agent-config
|
|
32
|
+
category: agent-tooling
|
|
33
|
+
primary_surface: claude-code
|
|
34
|
+
also_supports:
|
|
35
|
+
- claude-desktop
|
|
36
|
+
- cursor
|
|
37
|
+
- windsurf
|
|
38
|
+
- cline
|
|
39
|
+
- aider
|
|
40
|
+
- codex
|
|
41
|
+
- gemini-cli
|
|
42
|
+
- copilot
|
|
43
|
+
- augment
|
|
44
|
+
|
|
45
|
+
# npm package metadata (synced into packages/create-agent-config/package.json
|
|
46
|
+
# and any future @event4u/agent-config packages).
|
|
47
|
+
npm:
|
|
48
|
+
package: "@event4u/create-agent-config"
|
|
49
|
+
description: >-
|
|
50
|
+
Zero-config installer for event4u/agent-config — picks tools,
|
|
51
|
+
runs the install, works in any directory.
|
|
52
|
+
keywords:
|
|
53
|
+
- agent
|
|
54
|
+
- claude
|
|
55
|
+
- cursor
|
|
56
|
+
- windsurf
|
|
57
|
+
- skills
|
|
58
|
+
- mcp
|
|
59
|
+
|
|
60
|
+
# Authoritative URLs.
|
|
61
|
+
urls:
|
|
62
|
+
homepage: https://github.com/event4u-app/agent-config
|
|
63
|
+
bugs: https://github.com/event4u-app/agent-config/issues
|
|
64
|
+
docs: https://github.com/event4u-app/agent-config/blob/main/docs/installation.md
|