{"owner":"ultraworkers","repo":"claw-code","hasSkills":true,"totalSkillsCount":5,"totalTokensCount":1987,"categories":["claude-rule","plugin-manifest","anthropic-skill"],"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md","rust/crates/plugins/bundled/sample-hooks/.claude-plugin/plugin.json","rust/crates/plugins/bundled/example-bundled/.claude-plugin/plugin.json","rust/CLAUDE.md","rust/crates/tools/GIT_TOOLS_README.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Detected stack\n- Languages: Rust.\n- Frameworks: none detected from the supported starter markers.\n\n## Verification\n- Run Rust verification from repo root: `scripts/fmt.sh --check`; for formatting use `scripts/fmt.sh`. Run Rust clippy/tests from `rust/`: `cargo clippy --workspace --all-targets -- -D warnings`, `cargo test --workspace`\n- `src/` and `tests/` are both present; update both surfaces together when behavior changes.\n\n## Repository shape\n- `rust/` contains the Rust workspace and active CLI/runtime implementation.\n- `src/` contains source files that should stay consistent with generated guidance and tests.\n- `tests/` contains validation surfaces that should be reviewed alongside code changes.\n\n## Working agreement\n- Prefer small, reviewable changes and keep generated bootstrap files aligned with actual repo workflows.\n- Keep shared defaults in `.claude.json`; reserve `.claude/settings.local.json` for machine-local overrides.\n- Do not overwrite existing `CLAUDE.md` content automatically; update it intentionally when repo workflows change.\n","rust/crates/plugins/bundled/sample-hooks/.claude-plugin/plugin.json":"{\n  \"name\": \"sample-hooks\",\n  \"version\": \"0.1.0\",\n  \"description\": \"Bundled sample plugin scaffold for hook integration tests.\",\n  \"defaultEnabled\": false,\n  \"hooks\": {\n    \"PreToolUse\": [\"./hooks/pre.sh\"],\n    \"PostToolUse\": [\"./hooks/post.sh\"]\n  }\n}\n","rust/crates/plugins/bundled/example-bundled/.claude-plugin/plugin.json":"{\n  \"name\": \"example-bundled\",\n  \"version\": \"0.1.0\",\n  \"description\": \"Example bundled plugin scaffold for the Rust plugin system\",\n  \"defaultEnabled\": false,\n  \"hooks\": {\n    \"PreToolUse\": [\"./hooks/pre.sh\"],\n    \"PostToolUse\": [\"./hooks/post.sh\"]\n  }\n}\n","rust/CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claw Code (clawcode.dev) when working with code in this repository.\n\n## Detected stack\n- Languages: Rust.\n- Frameworks: none detected from the supported starter markers.\n\n## Verification\n- From the repository root, run Rust formatting with `scripts/fmt.sh` (or `scripts/fmt.sh --check` for CI-style checks). From this `rust/` directory, the equivalent command is `../scripts/fmt.sh`. Root-level `cargo fmt --manifest-path rust/Cargo.toml` is not the supported formatting command.\n- From this `rust/` directory, run Rust verification with `cargo clippy --workspace --all-targets -- -D warnings` and `cargo test --workspace`.\n\n## Working agreement\n- Prefer small, reviewable changes and keep generated bootstrap files aligned with actual repo workflows.\n- Keep shared defaults in `.claw.json`; reserve `.claw/settings.local.json` for machine-local overrides.\n- Do not overwrite existing `CLAUDE.md` content automatically; update it intentionally when repo workflows change.\n","rust/crates/tools/GIT_TOOLS_README.md":"# Git-Aware Context Tools\n\nAdds five native git tools to claw-code that provide structured, read-only access to repository state. These replace ad-hoc `git` commands via bash with purpose-built tool definitions the model can discover and invoke directly.\n\n## Tools\n\n### GitStatus\n\nShow the working tree status (branch, staged, unstaged, untracked). Equivalent to `git status --short --branch`.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `short` | boolean | no | `true` | Use `--short --branch` format for concise output |\n\n**Example input:**\n```json\n{}\n```\n\n**Example output:**\n```json\n{\n  \"output\": \"## feat/git-aware-tools...upstream/main [ahead 1]\\nM rust/crates/tools/src/lib.rs\"\n}\n```\n\n---\n\n### GitDiff\n\nShow changes between commits, the index, and the working tree. Supports staged changes, specific paths, commit ranges, and comparing two commits.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `staged` | boolean | no | `false` | Show staged changes (`git diff --cached`) |\n| `commit` | string | no | — | Commit hash, tag, or branch to diff against |\n| `commit2` | string | no | — | Second commit for range diff (`commit...commit2`) |\n| `path` | string | no | — | File path to restrict the diff to |\n\n**Example inputs:**\n```json\n{}\n```\n```json\n{ \"staged\": true }\n```\n```json\n{ \"commit\": \"HEAD~3\", \"path\": \"rust/crates/tools/src/lib.rs\" }\n```\n```json\n{ \"commit\": \"main\", \"commit2\": \"feat/git-aware-tools\" }\n```\n\n---\n\n### GitLog\n\nShow commit history. Supports limiting count, filtering by author/date/path, and oneline format.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `count` | integer | no | `20` | Maximum number of commits to return |\n| `oneline` | boolean | no | `false` | Use `--oneline` format (hash + subject only) |\n| `author` | string | no | — | Filter commits by author pattern |\n| `since` | string | no | — | Filter commits since date (e.g. `\"2024-01-01\"` or `\"2.weeks\"`) |\n| `until` | string | no | — | Filter commits until date |\n| `path` | string | no | — | File or directory path to filter commits by |\n\n**Example inputs:**\n```json\n{ \"count\": 5, \"oneline\": true }\n```\n```json\n{ \"author\": \"alice\", \"since\": \"1.week\", \"path\": \"src/main.rs\" }\n```\n\n---\n\n### GitShow\n\nShow a commit, tag, or tree object with its diff. Supports showing a specific file at a commit and stat-only mode.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `commit` | string | **yes** | — | Commit hash, tag, or branch ref to show |\n| `path` | string | no | — | Show only this file at the given commit (`commit:path` syntax) |\n| `stat` | boolean | no | `false` | Show diffstat summary instead of full diff |\n\n**Example inputs:**\n```json\n{ \"commit\": \"HEAD\" }\n```\n```json\n{ \"commit\": \"abc1234\", \"stat\": true }\n```\n```json\n{ \"commit\": \"main\", \"path\": \"src/lib.rs\" }\n```\n\n---\n\n### GitBlame\n\nShow what revision and author last modified each line of a file. Supports line range filtering.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `path` | string | **yes** | — | File path to blame |\n| `start_line` | integer | no | — | Start of line range (1-based) |\n| `end_line` | integer | no | — | End of line range (1-based) |\n\n**Example inputs:**\n```json\n{ \"path\": \"src/main.rs\" }\n```\n```json\n{ \"path\": \"src/main.rs\", \"start_line\": 100, \"end_line\": 150 }\n```\n\n---\n\n## Architecture\n\nAll five tools follow the same pattern:\n\n1. **ToolSpec** — Defines the tool name, description, JSON input schema, and `PermissionMode::ReadOnly`\n2. **Input struct** — Derives `Deserialize` with `#[serde(default)]` on optional fields\n3. **Run function** — Builds git arguments, calls `git_stdout()`, wraps result in JSON via `to_pretty_json()`\n4. **Dispatch** — Matched in `execute_tool_with_enforcer()` like all other tools\n\nThe existing `git_stdout(args: &[&str]) -> Option<String>` helper (at `tools/src/lib.rs`) handles running the `git` subprocess and returning trimmed stdout. Git tools simply construct the right arguments and delegate to this helper.\n\n## Why native git tools?\n\nBefore this PR, the model had to use the `bash` tool for git operations, which has several drawbacks:\n\n- **No structured output** — Bash returns raw text that the model must parse\n- **Over-permissioned** — Bash requires `DangerFullAccess` even for read-only git commands\n- **No discoverability** — The model can't search for git-capable tools via `ToolSearch`\n- **Inconsistent** — Each invocation may use different flags or formatting\n\nWith native git tools:\n\n- All five are `ReadOnly` — safe in restricted permission modes\n- Structured JSON output — consistent, parseable results\n- Discoverable via `ToolSearch` with keywords like \"git\", \"diff\", \"blame\"\n- Model-friendly descriptions explain when to use each tool vs bash\n\n## Testing\n\n```bash\ncd rust\ncargo build --release\ncargo test -p tools\n```\n\nThe 3 pre-existing test failures (agent_fake_runner, agent_persists_handoff, worker_create_merges_config) are unrelated to this change — they fail due to local settings.json incompatibilities.\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Detected stack\n- Languages: Rust.\n- Frameworks: none detected from the supported starter markers.\n\n## Verification\n- Run Rust verification from repo root: `scripts/fmt.sh --check`; for formatting use `scripts/fmt.sh`. Run Rust clippy/tests from `rust/`: `cargo clippy --workspace --all-targets -- -D warnings`, `cargo test --workspace`\n- `src/` and `tests/` are both present; update both surfaces together when behavior changes.\n\n## Repository shape\n- `rust/` contains the Rust workspace and active CLI/runtime implementation.\n- `src/` contains source files that should stay consistent with generated guidance and tests.\n- `tests/` contains validation surfaces that should be reviewed alongside code changes.\n\n## Working agreement\n- Prefer small, reviewable changes and keep generated bootstrap files aligned with actual repo workflows.\n- Keep shared defaults in `.claude.json`; reserve `.claude/settings.local.json` for machine-local overrides.\n- Do not overwrite existing `CLAUDE.md` content automatically; update it intentionally when repo workflows change.\n","rust/crates/plugins/bundled/sample-hooks/.claude-plugin/plugin.json":"{\n  \"name\": \"sample-hooks\",\n  \"version\": \"0.1.0\",\n  \"description\": \"Bundled sample plugin scaffold for hook integration tests.\",\n  \"defaultEnabled\": false,\n  \"hooks\": {\n    \"PreToolUse\": [\"./hooks/pre.sh\"],\n    \"PostToolUse\": [\"./hooks/post.sh\"]\n  }\n}\n","rust/crates/plugins/bundled/example-bundled/.claude-plugin/plugin.json":"{\n  \"name\": \"example-bundled\",\n  \"version\": \"0.1.0\",\n  \"description\": \"Example bundled plugin scaffold for the Rust plugin system\",\n  \"defaultEnabled\": false,\n  \"hooks\": {\n    \"PreToolUse\": [\"./hooks/pre.sh\"],\n    \"PostToolUse\": [\"./hooks/post.sh\"]\n  }\n}\n","rust/CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claw Code (clawcode.dev) when working with code in this repository.\n\n## Detected stack\n- Languages: Rust.\n- Frameworks: none detected from the supported starter markers.\n\n## Verification\n- From the repository root, run Rust formatting with `scripts/fmt.sh` (or `scripts/fmt.sh --check` for CI-style checks). From this `rust/` directory, the equivalent command is `../scripts/fmt.sh`. Root-level `cargo fmt --manifest-path rust/Cargo.toml` is not the supported formatting command.\n- From this `rust/` directory, run Rust verification with `cargo clippy --workspace --all-targets -- -D warnings` and `cargo test --workspace`.\n\n## Working agreement\n- Prefer small, reviewable changes and keep generated bootstrap files aligned with actual repo workflows.\n- Keep shared defaults in `.claw.json`; reserve `.claw/settings.local.json` for machine-local overrides.\n- Do not overwrite existing `CLAUDE.md` content automatically; update it intentionally when repo workflows change.\n","rust/crates/tools/GIT_TOOLS_README.md":"# Git-Aware Context Tools\n\nAdds five native git tools to claw-code that provide structured, read-only access to repository state. These replace ad-hoc `git` commands via bash with purpose-built tool definitions the model can discover and invoke directly.\n\n## Tools\n\n### GitStatus\n\nShow the working tree status (branch, staged, unstaged, untracked). Equivalent to `git status --short --branch`.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `short` | boolean | no | `true` | Use `--short --branch` format for concise output |\n\n**Example input:**\n```json\n{}\n```\n\n**Example output:**\n```json\n{\n  \"output\": \"## feat/git-aware-tools...upstream/main [ahead 1]\\nM rust/crates/tools/src/lib.rs\"\n}\n```\n\n---\n\n### GitDiff\n\nShow changes between commits, the index, and the working tree. Supports staged changes, specific paths, commit ranges, and comparing two commits.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `staged` | boolean | no | `false` | Show staged changes (`git diff --cached`) |\n| `commit` | string | no | — | Commit hash, tag, or branch to diff against |\n| `commit2` | string | no | — | Second commit for range diff (`commit...commit2`) |\n| `path` | string | no | — | File path to restrict the diff to |\n\n**Example inputs:**\n```json\n{}\n```\n```json\n{ \"staged\": true }\n```\n```json\n{ \"commit\": \"HEAD~3\", \"path\": \"rust/crates/tools/src/lib.rs\" }\n```\n```json\n{ \"commit\": \"main\", \"commit2\": \"feat/git-aware-tools\" }\n```\n\n---\n\n### GitLog\n\nShow commit history. Supports limiting count, filtering by author/date/path, and oneline format.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `count` | integer | no | `20` | Maximum number of commits to return |\n| `oneline` | boolean | no | `false` | Use `--oneline` format (hash + subject only) |\n| `author` | string | no | — | Filter commits by author pattern |\n| `since` | string | no | — | Filter commits since date (e.g. `\"2024-01-01\"` or `\"2.weeks\"`) |\n| `until` | string | no | — | Filter commits until date |\n| `path` | string | no | — | File or directory path to filter commits by |\n\n**Example inputs:**\n```json\n{ \"count\": 5, \"oneline\": true }\n```\n```json\n{ \"author\": \"alice\", \"since\": \"1.week\", \"path\": \"src/main.rs\" }\n```\n\n---\n\n### GitShow\n\nShow a commit, tag, or tree object with its diff. Supports showing a specific file at a commit and stat-only mode.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `commit` | string | **yes** | — | Commit hash, tag, or branch ref to show |\n| `path` | string | no | — | Show only this file at the given commit (`commit:path` syntax) |\n| `stat` | boolean | no | `false` | Show diffstat summary instead of full diff |\n\n**Example inputs:**\n```json\n{ \"commit\": \"HEAD\" }\n```\n```json\n{ \"commit\": \"abc1234\", \"stat\": true }\n```\n```json\n{ \"commit\": \"main\", \"path\": \"src/lib.rs\" }\n```\n\n---\n\n### GitBlame\n\nShow what revision and author last modified each line of a file. Supports line range filtering.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `path` | string | **yes** | — | File path to blame |\n| `start_line` | integer | no | — | Start of line range (1-based) |\n| `end_line` | integer | no | — | End of line range (1-based) |\n\n**Example inputs:**\n```json\n{ \"path\": \"src/main.rs\" }\n```\n```json\n{ \"path\": \"src/main.rs\", \"start_line\": 100, \"end_line\": 150 }\n```\n\n---\n\n## Architecture\n\nAll five tools follow the same pattern:\n\n1. **ToolSpec** — Defines the tool name, description, JSON input schema, and `PermissionMode::ReadOnly`\n2. **Input struct** — Derives `Deserialize` with `#[serde(default)]` on optional fields\n3. **Run function** — Builds git arguments, calls `git_stdout()`, wraps result in JSON via `to_pretty_json()`\n4. **Dispatch** — Matched in `execute_tool_with_enforcer()` like all other tools\n\nThe existing `git_stdout(args: &[&str]) -> Option<String>` helper (at `tools/src/lib.rs`) handles running the `git` subprocess and returning trimmed stdout. Git tools simply construct the right arguments and delegate to this helper.\n\n## Why native git tools?\n\nBefore this PR, the model had to use the `bash` tool for git operations, which has several drawbacks:\n\n- **No structured output** — Bash returns raw text that the model must parse\n- **Over-permissioned** — Bash requires `DangerFullAccess` even for read-only git commands\n- **No discoverability** — The model can't search for git-capable tools via `ToolSearch`\n- **Inconsistent** — Each invocation may use different flags or formatting\n\nWith native git tools:\n\n- All five are `ReadOnly` — safe in restricted permission modes\n- Structured JSON output — consistent, parseable results\n- Discoverable via `ToolSearch` with keywords like \"git\", \"diff\", \"blame\"\n- Model-friendly descriptions explain when to use each tool vs bash\n\n## Testing\n\n```bash\ncd rust\ncargo build --release\ncargo test -p tools\n```\n\nThe 3 pre-existing test failures (agent_fake_runner, agent_persists_handoff, worker_create_merges_config) are unrelated to this change — they fail due to local settings.json incompatibilities.\n"},"items":[{"name":"GIT_TOOLS_README.md","path":"rust/crates/tools/GIT_TOOLS_README.md","rawUrl":"https://raw.githubusercontent.com/ultraworkers/claw-code/HEAD/rust/crates/tools/GIT_TOOLS_README.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Git-Aware Context Tools\n\nAdds five native git tools to claw-code that provide structured, read-only access to repository state. These replace ad-hoc `git` commands via bash with purpose-built tool definitions the model can discover and invoke directly.\n\n## Tools\n\n### GitStatus\n\nShow the working tree status (branch, staged, unstaged, untracked). Equivalent to `git status --short --branch`.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `short` | boolean | no | `true` | Use `--short --branch` format for concise output |\n\n**Example input:**\n```json\n{}\n```\n\n**Example output:**\n```json\n{\n  \"output\": \"## feat/git-aware-tools...upstream/main [ahead 1]\\nM rust/crates/tools/src/lib.rs\"\n}\n```\n\n---\n\n### GitDiff\n\nShow changes between commits, the index, and the working tree. Supports staged changes, specific paths, commit ranges, and comparing two commits.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `staged` | boolean | no | `false` | Show staged changes (`git diff --cached`) |\n| `commit` | string | no | — | Commit hash, tag, or branch to diff against |\n| `commit2` | string | no | — | Second commit for range diff (`commit...commit2`) |\n| `path` | string | no | — | File path to restrict the diff to |\n\n**Example inputs:**\n```json\n{}\n```\n```json\n{ \"staged\": true }\n```\n```json\n{ \"commit\": \"HEAD~3\", \"path\": \"rust/crates/tools/src/lib.rs\" }\n```\n```json\n{ \"commit\": \"main\", \"commit2\": \"feat/git-aware-tools\" }\n```\n\n---\n\n### GitLog\n\nShow commit history. Supports limiting count, filtering by author/date/path, and oneline format.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `count` | integer | no | `20` | Maximum number of commits to return |\n| `oneline` | boolean | no | `false` | Use `--oneline` format (hash + subject only) |\n| `author` | string | no | — | Filter commits by author pattern |\n| `since` | string | no | — | Filter commits since date (e.g. `\"2024-01-01\"` or `\"2.weeks\"`) |\n| `until` | string | no | — | Filter commits until date |\n| `path` | string | no | — | File or directory path to filter commits by |\n\n**Example inputs:**\n```json\n{ \"count\": 5, \"oneline\": true }\n```\n```json\n{ \"author\": \"alice\", \"since\": \"1.week\", \"path\": \"src/main.rs\" }\n```\n\n---\n\n### GitShow\n\nShow a commit, tag, or tree object with its diff. Supports showing a specific file at a commit and stat-only mode.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `commit` | string | **yes** | — | Commit hash, tag, or branch ref to show |\n| `path` | string | no | — | Show only this file at the given commit (`commit:path` syntax) |\n| `stat` | boolean | no | `false` | Show diffstat summary instead of full diff |\n\n**Example inputs:**\n```json\n{ \"commit\": \"HEAD\" }\n```\n```json\n{ \"commit\": \"abc1234\", \"stat\": true }\n```\n```json\n{ \"commit\": \"main\", \"path\": \"src/lib.rs\" }\n```\n\n---\n\n### GitBlame\n\nShow what revision and author last modified each line of a file. Supports line range filtering.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `path` | string | **yes** | — | File path to blame |\n| `start_line` | integer | no | — | Start of line range (1-based) |\n| `end_line` | integer | no | — | End of line range (1-based) |\n\n**Example inputs:**\n```json\n{ \"path\": \"src/main.rs\" }\n```\n```json\n{ \"path\": \"src/main.rs\", \"start_line\": 100, \"end_line\": 150 }\n```\n\n---\n\n## Architecture\n\nAll five tools follow the same pattern:\n\n1. **ToolSpec** — Defines the tool name, description, JSON input schema, and `PermissionMode::ReadOnly`\n2. **Input struct** — Derives `Deserialize` with `#[serde(default)]` on optional fields\n3. **Run function** — Builds git arguments, calls `git_stdout()`, wraps result in JSON via `to_pretty_json()`\n4. **Dispatch** — Matched in `execute_tool_with_enforcer()` like all other tools\n\nThe existing `git_stdout(args: &[&str]) -> Option<String>` helper (at `tools/src/lib.rs`) handles running the `git` subprocess and returning trimmed stdout. Git tools simply construct the right arguments and delegate to this helper.\n\n## Why native git tools?\n\nBefore this PR, the model had to use the `bash` tool for git operations, which has several drawbacks:\n\n- **No structured output** — Bash returns raw text that the model must parse\n- **Over-permissioned** — Bash requires `DangerFullAccess` even for read-only git commands\n- **No discoverability** — The model can't search for git-capable tools via `ToolSearch`\n- **Inconsistent** — Each invocation may use different flags or formatting\n\nWith native git tools:\n\n- All five are `ReadOnly` — safe in restricted permission modes\n- Structured JSON output — consistent, parseable results\n- Discoverable via `ToolSearch` with keywords like \"git\", \"diff\", \"blame\"\n- Model-friendly descriptions explain when to use each tool vs bash\n\n## Testing\n\n```bash\ncd rust\ncargo build --release\ncargo test -p tools\n```\n\nThe 3 pre-existing test failures (agent_fake_runner, agent_persists_handoff, worker_create_merges_config) are unrelated to this change — they fail due to local settings.json incompatibilities.\n","isInternal":false,"tokens":1363,"sizeBytes":5333},{"name":"CLAUDE.md","path":"CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/ultraworkers/claw-code/HEAD/CLAUDE.md","title":"Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Detected stack\n- Languages: Rust.\n- Frameworks: none detected from the supported starter markers.\n\n## Verification\n- Run Rust verification from repo root: `scripts/fmt.sh --check`; for formatting use `scripts/fmt.sh`. Run Rust clippy/tests from `rust/`: `cargo clippy --workspace --all-targets -- -D warnings`, `cargo test --workspace`\n- `src/` and `tests/` are both present; update both surfaces together when behavior changes.\n\n## Repository shape\n- `rust/` contains the Rust workspace and active CLI/runtime implementation.\n- `src/` contains source files that should stay consistent with generated guidance and tests.\n- `tests/` contains validation surfaces that should be reviewed alongside code changes.\n\n## Working agreement\n- Prefer small, reviewable changes and keep generated bootstrap files aligned with actual repo workflows.\n- Keep shared defaults in `.claude.json`; reserve `.claude/settings.local.json` for machine-local overrides.\n- Do not overwrite existing `CLAUDE.md` content automatically; update it intentionally when repo workflows change.\n","isInternal":false,"tokens":249,"sizeBytes":1181},{"name":"CLAUDE.md","path":"rust/CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/ultraworkers/claw-code/HEAD/rust/CLAUDE.md","title":"rust - Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"# CLAUDE.md\n\nThis file provides guidance to Claw Code (clawcode.dev) when working with code in this repository.\n\n## Detected stack\n- Languages: Rust.\n- Frameworks: none detected from the supported starter markers.\n\n## Verification\n- From the repository root, run Rust formatting with `scripts/fmt.sh` (or `scripts/fmt.sh --check` for CI-style checks). From this `rust/` directory, the equivalent command is `../scripts/fmt.sh`. Root-level `cargo fmt --manifest-path rust/Cargo.toml` is not the supported formatting command.\n- From this `rust/` directory, run Rust verification with `cargo clippy --workspace --all-targets -- -D warnings` and `cargo test --workspace`.\n\n## Working agreement\n- Prefer small, reviewable changes and keep generated bootstrap files aligned with actual repo workflows.\n- Keep shared defaults in `.claw.json`; reserve `.claw/settings.local.json` for machine-local overrides.\n- Do not overwrite existing `CLAUDE.md` content automatically; update it intentionally when repo workflows change.\n","isInternal":false,"tokens":224,"sizeBytes":1016},{"name":"plugin.json","path":"rust/crates/plugins/bundled/example-bundled/.claude-plugin/plugin.json","rawUrl":"https://raw.githubusercontent.com/ultraworkers/claw-code/HEAD/rust/crates/plugins/bundled/example-bundled/.claude-plugin/plugin.json","title":"example-bundled","category":"plugin-manifest","format":"json","content":"{\n  \"name\": \"example-bundled\",\n  \"version\": \"0.1.0\",\n  \"description\": \"Example bundled plugin scaffold for the Rust plugin system\",\n  \"defaultEnabled\": false,\n  \"hooks\": {\n    \"PreToolUse\": [\"./hooks/pre.sh\"],\n    \"PostToolUse\": [\"./hooks/post.sh\"]\n  }\n}\n","frontmatter":{"name":"example-bundled","version":"0.1.0","description":"Example bundled plugin scaffold for the Rust plugin system","defaultEnabled":false,"hooks":{"PreToolUse":["./hooks/pre.sh"],"PostToolUse":["./hooks/post.sh"]}},"isInternal":false,"tokens":76,"sizeBytes":255},{"name":"plugin.json","path":"rust/crates/plugins/bundled/sample-hooks/.claude-plugin/plugin.json","rawUrl":"https://raw.githubusercontent.com/ultraworkers/claw-code/HEAD/rust/crates/plugins/bundled/sample-hooks/.claude-plugin/plugin.json","title":"sample-hooks","category":"plugin-manifest","format":"json","content":"{\n  \"name\": \"sample-hooks\",\n  \"version\": \"0.1.0\",\n  \"description\": \"Bundled sample plugin scaffold for hook integration tests.\",\n  \"defaultEnabled\": false,\n  \"hooks\": {\n    \"PreToolUse\": [\"./hooks/pre.sh\"],\n    \"PostToolUse\": [\"./hooks/post.sh\"]\n  }\n}\n","frontmatter":{"name":"sample-hooks","version":"0.1.0","description":"Bundled sample plugin scaffold for hook integration tests.","defaultEnabled":false,"hooks":{"PreToolUse":["./hooks/pre.sh"],"PostToolUse":["./hooks/post.sh"]}},"isInternal":false,"tokens":75,"sizeBytes":252}],"systemPromptSnippet":"<yakaai_skills repo=\"ultraworkers/claw-code\">\n<!-- File: rust/crates/tools/GIT_TOOLS_README.md (Tokens: ~1363 | Category: anthropic-skill) -->\n# Git-Aware Context Tools\n\nAdds five native git tools to claw-code that provide structured, read-only access to repository state. These replace ad-hoc `git` commands via bash with purpose-built tool definitions the model can discover and invoke directly.\n\n## Tools\n\n### GitStatus\n\nShow the working tree status (branch, staged, unstaged, untracked). Equivalent to `git status --short --branch`.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `short` | boolean | no | `true` | Use `--short --branch` format for concise output |\n\n**Example input:**\n```json\n{}\n```\n\n**Example output:**\n```json\n{\n  \"output\": \"## feat/git-aware-tools...upstream/main [ahead 1]\\nM rust/crates/tools/src/lib.rs\"\n}\n```\n\n---\n\n### GitDiff\n\nShow changes between commits, the index, and the working tree. Supports staged changes, specific paths, commit ranges, and comparing two commits.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `staged` | boolean | no | `false` | Show staged changes (`git diff --cached`) |\n| `commit` | string | no | — | Commit hash, tag, or branch to diff against |\n| `commit2` | string | no | — | Second commit for range diff (`commit...commit2`) |\n| `path` | string | no | — | File path to restrict the diff to |\n\n**Example inputs:**\n```json\n{}\n```\n```json\n{ \"staged\": true }\n```\n```json\n{ \"commit\": \"HEAD~3\", \"path\": \"rust/crates/tools/src/lib.rs\" }\n```\n```json\n{ \"commit\": \"main\", \"commit2\": \"feat/git-aware-tools\" }\n```\n\n---\n\n### GitLog\n\nShow commit history. Supports limiting count, filtering by author/date/path, and oneline format.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `count` | integer | no | `20` | Maximum number of commits to return |\n| `oneline` | boolean | no | `false` | Use `--oneline` format (hash + subject only) |\n| `author` | string | no | — | Filter commits by author pattern |\n| `since` | string | no | — | Filter commits since date (e.g. `\"2024-01-01\"` or `\"2.weeks\"`) |\n| `until` | string | no | — | Filter commits until date |\n| `path` | string | no | — | File or directory path to filter commits by |\n\n**Example inputs:**\n```json\n{ \"count\": 5, \"oneline\": true }\n```\n```json\n{ \"author\": \"alice\", \"since\": \"1.week\", \"path\": \"src/main.rs\" }\n```\n\n---\n\n### GitShow\n\nShow a commit, tag, or tree object with its diff. Supports showing a specific file at a commit and stat-only mode.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `commit` | string | **yes** | — | Commit hash, tag, or branch ref to show |\n| `path` | string | no | — | Show only this file at the given commit (`commit:path` syntax) |\n| `stat` | boolean | no | `false` | Show diffstat summary instead of full diff |\n\n**Example inputs:**\n```json\n{ \"commit\": \"HEAD\" }\n```\n```json\n{ \"commit\": \"abc1234\", \"stat\": true }\n```\n```json\n{ \"commit\": \"main\", \"path\": \"src/lib.rs\" }\n```\n\n---\n\n### GitBlame\n\nShow what revision and author last modified each line of a file. Supports line range filtering.\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `path` | string | **yes** | — | File path to blame |\n| `start_line` | integer | no | — | Start of line range (1-based) |\n| `end_line` | integer | no | — | End of line range (1-based) |\n\n**Example inputs:**\n```json\n{ \"path\": \"src/main.rs\" }\n```\n```json\n{ \"path\": \"src/main.rs\", \"start_line\": 100, \"end_line\": 150 }\n```\n\n---\n\n## Architecture\n\nAll five tools follow the same pattern:\n\n1. **ToolSpec** — Defines the tool name, description, JSON input schema, and `PermissionMode::ReadOnly`\n2. **Input struct** — Derives `Deserialize` with `#[serde(default)]` on optional fields\n3. **Run function** — Builds git arguments, calls `git_stdout()`, wraps result in JSON via `to_pretty_json()`\n4. **Dispatch** — Matched in `execute_tool_with_enforcer()` like all other tools\n\nThe existing `git_stdout(args: &[&str]) -> Option<String>` helper (at `tools/src/lib.rs`) handles running the `git` subprocess and returning trimmed stdout. Git tools simply construct the right arguments and delegate to this helper.\n\n## Why native git tools?\n\nBefore this PR, the model had to use the `bash` tool for git operations, which has several drawbacks:\n\n- **No structured output** — Bash returns raw text that the model must parse\n- **Over-permissioned** — Bash requires `DangerFullAccess` even for read-only git commands\n- **No discoverability** — The model can't search for git-capable tools via `ToolSearch`\n- **Inconsistent** — Each invocation may use different flags or formatting\n\nWith native git tools:\n\n- All five are `ReadOnly` — safe in restricted permission modes\n- Structured JSON output — consistent, parseable results\n- Discoverable via `ToolSearch` with keywords like \"git\", \"diff\", \"blame\"\n- Model-friendly descriptions explain when to use each tool vs bash\n\n## Testing\n\n```bash\ncd rust\ncargo build --release\ncargo test -p tools\n```\n\nThe 3 pre-existing test failures (agent_fake_runner, agent_persists_handoff, worker_create_merges_config) are unrelated to this change — they fail due to local settings.json incompatibilities.\n\n<!-- File: CLAUDE.md (Tokens: ~249 | Category: claude-rule) -->\n# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Detected stack\n- Languages: Rust.\n- Frameworks: none detected from the supported starter markers.\n\n## Verification\n- Run Rust verification from repo root: `scripts/fmt.sh --check`; for formatting use `scripts/fmt.sh`. Run Rust clippy/tests from `rust/`: `cargo clippy --workspace --all-targets -- -D warnings`, `cargo test --workspace`\n- `src/` and `tests/` are both present; update both surfaces together when behavior changes.\n\n## Repository shape\n- `rust/` contains the Rust workspace and active CLI/runtime implementation.\n- `src/` contains source files that should stay consistent with generated guidance and tests.\n- `tests/` contains validation surfaces that should be reviewed alongside code changes.\n\n## Working agreement\n- Prefer small, reviewable changes and keep generated bootstrap files aligned with actual repo workflows.\n- Keep shared defaults in `.claude.json`; reserve `.claude/settings.local.json` for machine-local overrides.\n- Do not overwrite existing `CLAUDE.md` content automatically; update it intentionally when repo workflows change.\n\n<!-- File: rust/CLAUDE.md (Tokens: ~224 | Category: claude-rule) -->\n# CLAUDE.md\n\nThis file provides guidance to Claw Code (clawcode.dev) when working with code in this repository.\n\n## Detected stack\n- Languages: Rust.\n- Frameworks: none detected from the supported starter markers.\n\n## Verification\n- From the repository root, run Rust formatting with `scripts/fmt.sh` (or `scripts/fmt.sh --check` for CI-style checks). From this `rust/` directory, the equivalent command is `../scripts/fmt.sh`. Root-level `cargo fmt --manifest-path rust/Cargo.toml` is not the supported formatting command.\n- From this `rust/` directory, run Rust verification with `cargo clippy --workspace --all-targets -- -D warnings` and `cargo test --workspace`.\n\n## Working agreement\n- Prefer small, reviewable changes and keep generated bootstrap files aligned with actual repo workflows.\n- Keep shared defaults in `.claw.json`; reserve `.claw/settings.local.json` for machine-local overrides.\n- Do not overwrite existing `CLAUDE.md` content automatically; update it intentionally when repo workflows change.\n\n<!-- File: rust/crates/plugins/bundled/example-bundled/.claude-plugin/plugin.json (Tokens: ~76 | Category: plugin-manifest) -->\n{\n  \"name\": \"example-bundled\",\n  \"version\": \"0.1.0\",\n  \"description\": \"Example bundled plugin scaffold for the Rust plugin system\",\n  \"defaultEnabled\": false,\n  \"hooks\": {\n    \"PreToolUse\": [\"./hooks/pre.sh\"],\n    \"PostToolUse\": [\"./hooks/post.sh\"]\n  }\n}\n\n<!-- File: rust/crates/plugins/bundled/sample-hooks/.claude-plugin/plugin.json (Tokens: ~75 | Category: plugin-manifest) -->\n{\n  \"name\": \"sample-hooks\",\n  \"version\": \"0.1.0\",\n  \"description\": \"Bundled sample plugin scaffold for hook integration tests.\",\n  \"defaultEnabled\": false,\n  \"hooks\": {\n    \"PreToolUse\": [\"./hooks/pre.sh\"],\n    \"PostToolUse\": [\"./hooks/post.sh\"]\n  }\n}\n</yakaai_skills>"}