Skip to content
Merged
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ rulesync.local.jsonc
**/.factory/settings.json
**/GEMINI.md
**/.gemini/commands/
**/.gemini/subagents/
**/.gemini/agents/
**/.gemini/skills/
**/.geminiignore
**/.gemini/memories/
Expand Down
2 changes: 1 addition & 1 deletion .lintstagedrc.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export default {
"*": ["npx secretlint"],
"package.json": ["npx sort-package-json"],
"docs/**/*.md": ["tsx scripts/sync-skill-docs.ts", "git add skills/rulesync/"],
"docs/**/*.md": ["node --import tsx/esm scripts/sync-skill-docs.ts", "git add skills/rulesync/"],
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change from tsx to node --import tsx/esm looks unrelated to the geminicli subagents fix. Consider splitting it into its own commit or at least noting it in the PR description so it does not get lost in the diff.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regarding the .lintstagedrc.js change: this was introduced because the tsx CLI binary creates a Unix IPC socket at /tmp/tsx-*/...pipe during execution. In my local environment (Claude Code's sandbox), access to /tmp/ is restricted, which caused the pre-commit hook to fail on every commit attempt.

Switching to node --import tsx/esm avoids the socket entirely and unblocked the hook for me. That said, this is specific to my sandbox setup — tsx works fine in a normal terminal and the change has no effect for other contributors.

Happy to revert it if you'd prefer to keep the diff clean. Alternatively, node --import tsx/esm is slightly more explicit and avoids spawning an extra subprocess, so it could be kept as a minor improvement. Your call.

// Regenerate tool configurations when rulesync source files change
".rulesync/**/*": [() => "pnpm dev generate"],
};
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ See [Quick Start guide](https://dyoshikawa.github.io/rulesync/getting-started/qu
| AgentsSkills | agentsskills | | | | | | ✅ | |
| Claude Code | claudecode | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 |
| Codex CLI | codexcli | ✅ 🌏 | | ✅ 🌏 🔧 | 🌏 | ✅ 🌏 | ✅ 🌏 | |
| Gemini CLI | geminicli | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | 🎮 | ✅ 🌏 | ✅ 🌏 |
| Gemini CLI | geminicli | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | | ✅ 🌏 | ✅ 🌏 |
| Goose | goose | ✅ 🌏 | ✅ | | | | | |
| GitHub Copilot | copilot | ✅ 🌏 | | ✅ | ✅ | ✅ | ✅ | ✅ |
| GitHub Copilot CLI | copilotcli | | | ✅ 🌏 | | | | |
Expand Down
2 changes: 2 additions & 0 deletions docs/reference/file-formats.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ Based on the user's instruction, create a plan while analyzing the related files
Attention, again, you are just the planner, so though you can read any files and run any commands for analysis, please don't write any code.
```

> **Gemini CLI note (as of 2026-04-01):** Subagents are generated to `.gemini/agents/`. To enable the agents feature, set `"experimental": { "enableAgents": true }` in your `.gemini/settings.json`.

## `.rulesync/skills/*/SKILL.md`

Example:
Expand Down
2 changes: 1 addition & 1 deletion docs/reference/supported-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Rulesync supports both **generation** and **import** for All of the major AI cod
| AgentsSkills | agentsskills | | | | | | ✅ | |
| Claude Code | claudecode | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 |
| Codex CLI | codexcli | ✅ 🌏 | | ✅ 🌏 🔧 | 🌏 | ✅ 🌏 | ✅ 🌏 | |
| Gemini CLI | geminicli | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | 🎮 | ✅ 🌏 | ✅ 🌏 |
| Gemini CLI | geminicli | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | | ✅ 🌏 | ✅ 🌏 |
| GitHub Copilot | copilot | ✅ 🌏 | | ✅ | ✅ | ✅ | ✅ | ✅ |
| Goose | goose | ✅ 🌏 | ✅ | | | | | |
| Cursor | cursor | ✅ | ✅ | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ |
Expand Down
2 changes: 2 additions & 0 deletions skills/rulesync/file-formats.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ Based on the user's instruction, create a plan while analyzing the related files
Attention, again, you are just the planner, so though you can read any files and run any commands for analysis, please don't write any code.
```

> **Gemini CLI note (as of 2026-04-01):** Subagents are generated to `.gemini/agents/`. To enable the agents feature, set `"experimental": { "enableAgents": true }` in your `.gemini/settings.json`.

## `.rulesync/skills/*/SKILL.md`

Example:
Expand Down
2 changes: 1 addition & 1 deletion skills/rulesync/supported-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Rulesync supports both **generation** and **import** for All of the major AI cod
| AgentsSkills | agentsskills | | | | | | ✅ | |
| Claude Code | claudecode | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 |
| Codex CLI | codexcli | ✅ 🌏 | | ✅ 🌏 🔧 | 🌏 | ✅ 🌏 | ✅ 🌏 | |
| Gemini CLI | geminicli | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | 🎮 | ✅ 🌏 | ✅ 🌏 |
| Gemini CLI | geminicli | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | | ✅ 🌏 | ✅ 🌏 |
| GitHub Copilot | copilot | ✅ 🌏 | | ✅ | ✅ | ✅ | ✅ | ✅ |
| Goose | goose | ✅ 🌏 | ✅ | | | | | |
| Cursor | cursor | ✅ | ✅ | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ |
Expand Down
2 changes: 1 addition & 1 deletion src/cli/commands/gitignore-entries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export const GITIGNORE_ENTRY_REGISTRY: ReadonlyArray<GitignoreEntryTag> = [
// Gemini CLI
{ target: "geminicli", feature: "rules", entry: "**/GEMINI.md" },
{ target: "geminicli", feature: "commands", entry: "**/.gemini/commands/" },
{ target: "geminicli", feature: "subagents", entry: "**/.gemini/subagents/" },
{ target: "geminicli", feature: "subagents", entry: "**/.gemini/agents/" },
{ target: "geminicli", feature: "skills", entry: "**/.gemini/skills/" },
{ target: "geminicli", feature: "ignore", entry: "**/.geminiignore" },
{ target: "geminicli", feature: "general", entry: "**/.gemini/memories/" },
Expand Down
3 changes: 3 additions & 0 deletions src/e2e/e2e-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,13 @@ export async function runGenerate({
target,
features,
global = false,
simulateSubagents = false,
env,
}: {
target: string;
features: string;
global?: boolean;
simulateSubagents?: boolean;
env?: Record<string, string>;
}): Promise<{ stdout: string; stderr: string }> {
const args = [
Expand All @@ -59,6 +61,7 @@ export async function runGenerate({
"--features",
features,
...(global ? ["--global"] : []),
...(simulateSubagents ? ["--simulate-subagents"] : []),
];
return execFileAsync(rulesyncCmd, args, env ? { env: { ...process.env, ...env } } : {});
}
Expand Down
14 changes: 12 additions & 2 deletions src/e2e/e2e-subagents.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,18 @@ describe("E2E: subagents", () => {
const { getTestDir } = useTestDirectory();

it.each([
{ target: "claudecode", outputPath: join(".claude", "agents", "planner.md") },
{ target: "cursor", outputPath: join(".cursor", "agents", "planner.md") },
{
target: "claudecode",
outputPath: join(".claude", "agents", "planner.md"),
},
{
target: "cursor",
outputPath: join(".cursor", "agents", "planner.md"),
},
{
target: "geminicli",
outputPath: join(".gemini", "agents", "planner.md"),
},
])("should generate $target subagents", async ({ target, outputPath }) => {
const testDir = getTestDir();

Expand Down
Loading
Loading