| name | cursor-do |
| description | Delegate a single write task to Cursor Composer via cursor-companion.sh inside an isolated worktree, then Lead-review the diff and cherry-pick. Use when user invokes cursor:do, says delegate to cursor, have composer write it, refactor with cursor, hand a file edit to Composer. Do NOT load for: planning, code review only, read-only investigation, or multi-task team runs (use breezing --cursor or cursor:ask instead). |
cursor:do â Single-Task Write Delegate to Cursor Composer
1 ä»¶ã®å®è£
ã¿ã¹ã¯ã Cursor Composer (composer-2.5-fast) ã«å°çš worktree å
ã§å§è²ããLead ã diff ãã¬ãã¥ãŒããŠãã main ãž cherry-pick ãã skillãbreezing ã® team ãããŒãèµ·ãããã1 ã¿ã¹ã¯ 1 cherry-pick ãæççµè·¯ã§åãã
å°ã蟌ã㯠Cursor åŽã«ã¯ãªã (references/cursor-cli-only.md)ãå°çš .git ãæã€ worktree + Lead diff review + cherry-pick (R01-R13 çµè·¯) ã® 3 ç¹ã ããå®å¹çãªå¢çãcursor ã®åºå㯠Lead ã¬ãã¥ãŒãŸã§ untrusted ãšããŠæ±ãã
Step 0 â NARRATION RULES (UX Contract)
æµã¯ åé·ã ã§ãã£ãŠé²æå ±åã§ã¯ãªããbreezing ãšåãå¥çŽãèµ·åæã« banner + å®è¡èšç»ãç°¡æœã«æç€ºããŠããå®è¡ãããèŠãããé²æå ±åã¯æè¿ãåé·ãªç¹°ãè¿ãã®ã¿çŠæ¢ã
èµ·åæã«å¿
ãåºããã® (banner + planãåèš 5 è¡ä»¥å
)
ð cursor / composer-2.5-fast / feat/foo-bar / Add login form validation
ãããã:
1. pre-check (branch / cursor-agent) â å°çš worktree äœæ
2. composer ã«å®è£
å§è² (--write)
3. diff ã¬ãã¥ãŒ â cherry-pick â Plans.md æŽæ°
banner 1 è¡ (ð cursor / composer-2.5-fast / <branch> / <task>) + èšç» 2-4 è¡ã1 ç§ä»¥å
ã«åºããå³ Step 1 ãžã
é²æå ±åã¯åºããŠãã (èŠãããç¯å²ã§)
- åã¹ãããã®éå§ã»å®äºã 1 è¡ã¹ããŒã¿ã¹ã§ (
â worktree äœæ: .claude/worktrees/cursor-do-...)
- pre-check / resolve ã®èŠç¹ãcherry-pick ãã SHA
- ãªããã®åå²ãåããã®çç±ã 1 è¡ã§
çŠæ¢ (= åé·ã)
- åãäºå®ã® 2 åèšãæã: pre-check çµæãåŸæ®µã§å説æããªã
- äžèº«ã®ãªãå眮ã: tool call ã§èªæãªå®£èšã ãã®è¡
- 3 è¡ä»¥äžã®çµç·¯æ¯ãè¿ã: å¿
èŠãªã 1 è¡ã«å§çž®
- èµ·åã·ãŒã±ã³ã¹äžã® â
Insight ãããã¯: Insight ã¯æçµ report ã§ 1 åã®ã¿
éåäŸ (åé·):
à ãcomposer 2.5 ã§å®è£
ããæµãã§ããããŸã確èªããŸããïŒäžèº«ã®ãªãå眮ãïŒ
à ãCursor ãåŒã¶åã« branch ãèŠãŸãã â bash â ãbranch ã確èªããŸãããïŒèšãæãïŒ
à â
Insight ââââ Cursor ã®åŒ·ã¿ã¯âŠ
æ£åžžäŸ (ç°¡æœ + èšç»æç€º):
ð cursor / composer-2.5-fast / feat/foo-bar / Add login form validation
ãããã: worktree äœæ â composer ã«å®è£
å§è² â diff ã¬ãã¥ãŒ â cherry-pick
Step 1 â banner + plan ãåºãåã (1 ç§ä»¥å
)
åŒæ° $ARGUMENTS ãã¿ã¹ã¯èª¬æãšããŠåãããåŒæ°ã空ãªã以äžã®ããŒã«ãŒãåºåããŠãŠãŒã¶ãŒã« 1 è¡ã¿ã¹ã¯ãèŠæ±ããå
¥ååŸã« Step 2 ãžé²ã:
CURSOR_DO_AWAITING_TASK: provide a one-line task description as $ARGUMENTS
åŒæ°ãããã°ãå³ 1 è¡ echo:
ð cursor / composer-2.5-fast / <current-branch> / <task-first-60-chars>
<current-branch> 㯠Step 2 ã§ååŸããå€ã ããStep 1 ã§ã¯æªååŸã®ãã ⊠ã§ãå¯ãStep 2 çŽåŸã«ç¢ºå®å€ã 1 è¡ã§ååºåãããStep 0 ã® banner + å®è¡èšç» (5 è¡ä»¥å
) ã¯ããã§åºãåãã以éã¯åã¹ãããã® 1 è¡ã¹ããŒã¿ã¹ã§é²æãèŠãããåé·ãªç¹°ãè¿ãã®ã¿é¿ããã
Step 2 â 䞊å pre-check (1 bash)
1 ã€ã® bash åŒã³åºãã§ä»¥äžã䞊åã«åããçµæã ãã 1 ãããã¯ã§åãããåå¥ã®èª¬æã¯åºããªãã
bash -c '
set +e
echo "==BRANCH=="; git branch --show-current
echo "==VERSION=="; cat VERSION 2>/dev/null
echo "==PLANS_TAIL=="; tail -n 12 Plans.md 2>/dev/null
echo "==CURSOR_AGENT=="
CURSOR_AGENT_BIN="${CURSOR_AGENT_BIN:-}"
if [ -z "$CURSOR_AGENT_BIN" ]; then
# `agent`ïŒå
¬åŒã®æ°è¡šèšïŒâ `cursor-agent`ïŒlegacy aliasïŒã®é ã«æ¢ãã
# `agent` ã¯æ±çšçãªååãªã®ã§ãsymlink 解決åŸã®å®ãã¹ã®ãæåãã«
# cursor-agent ãå®å
šäžèŽã§çŸããå Žåã ãæ¡çšããïŒéšåæååäžèŽã ãš
# /x/cursor-agent-not-really/agent ã®ãããªãã£ã¬ã¯ããªåã§çªç ŽãããïŒã
for _c in agent cursor-agent; do
_p="$(command -v "$_c" 2>/dev/null)" || continue
[ -n "$_p" ] || continue
_r="$(realpath "$_p" 2>/dev/null || readlink -f "$_p" 2>/dev/null || echo "$_p")"
case "/$_r/" in */cursor-agent/*) CURSOR_AGENT_BIN="$_p"; break ;; esac
done
if [ -z "$CURSOR_AGENT_BIN" ] && [ -x "$HOME/.local/bin/cursor-agent" ]; then
CURSOR_AGENT_BIN="$HOME/.local/bin/cursor-agent"
fi
fi
if [ -z "$CURSOR_AGENT_BIN" ]; then
echo "NOT_INSTALLED"
else
"$CURSOR_AGENT_BIN" --version 2>/dev/null || echo "NOT_INSTALLED"
fi
'
å€å®:
CURSOR_AGENT=NOT_INSTALLED â ERROR: cursor-agent not found (exit 3 expected from companion). Install via setup-cursor.sh. ãåºãçµäºã
BRANCH ã main / master â WARN: on protected branch â cherry-pick target is HEAD of this branch. Confirm intent or switch. ãåºãç¶ç¶ã
Step 3 â plugin root + backend + model resolve (1 bash)
HARNESS_PLUGIN_ROOT / CLAUDE_PLUGIN_ROOT ãæªèšå®ã ãš :-. fallback ã consumer repo ã® cwd ã«è§£æ±ºããscripts/cursor-companion.sh ãèŠããèµ·åäžèœã«ãªã (Issue #193 §2)ãhooks.json ãšåã valid_root ãã¿ãŒã³ã§å
ç¢ã«è§£æ±ºããã
bash -c '
set -euo pipefail
valid_root() {
[ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
}
HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
ROOT="$HARNESS_PLUGIN_ROOT"
if ! valid_root "$ROOT"; then
ROOT=""
if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
while [ "$probe" != "/" ] && ! valid_root "$probe"; do
probe="$(cd "$probe/.." && pwd)"
done
valid_root "$probe" && ROOT="$probe"
fi
fi
if ! valid_root "$ROOT"; then
ROOT=""
for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
"$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
"$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
if valid_root "$c"; then ROOT="$c"; break; fi
done
fi
if ! valid_root "$ROOT"; then
echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
exit 2
fi
HARNESS_PLUGIN_ROOT="$ROOT"
BACKEND=$(bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --backend cursor --role worker)
MODEL=$(bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model)
echo "PLUGIN_ROOT=${HARNESS_PLUGIN_ROOT}"
echo "BACKEND=$BACKEND"
echo "MODEL=$MODEL"
'
è¿åŽå€: PLUGIN_ROOT (Step 5 ã§äœ¿ã) / BACKEND (å¿
ã cursor) / MODEL (éåžž composer-2.5-fast)ãBACKEND ãŸã㯠MODEL ã空ãªã ERROR: backend/model resolution failed ã 1 è¡ã§åºããŠçµäºãPLUGIN_ROOT 解決倱æã¯äžèšã¹ã¯ãªããã exit 2 ã§å ±åããã
Step 4 â å°çš worktree äœæ
è¡çªããªã id ãäœã£ãŠ worktree ãåããmain tree ã $HOME ãæããŠã¯ãªããªã (companion åŽ guard ã§ exit 2 ã«ãªã)ãWT_DIR ã¯çµ¶å¯Ÿãã¹ã§äœã (Step 5 ã® --workspace 㯠companion ã® is not a directory ã¬ãŒãã§çžå¯Ÿãã¹ã exit 2 ã«ããããšããããããIssue #193 §4)ã
bash -c '
set -euo pipefail
REPO_ROOT="$(git rev-parse --show-toplevel)"
cd "$REPO_ROOT"
ID="$(date +%Y%m%d-%H%M%S)-$$"
WT_DIR="$REPO_ROOT/.claude/worktrees/cursor-do-${ID}"
BASE_REF="$(git rev-parse HEAD)"
BASE_BRANCH="$(git branch --show-current)"
WT_BRANCH="cursor-do/${ID}"
mkdir -p "$REPO_ROOT/.claude/worktrees"
git worktree add -b "${WT_BRANCH}" "${WT_DIR}" "${BASE_REF}"
echo "REPO_ROOT=${REPO_ROOT}"
echo "WT_DIR=${WT_DIR}"
echo "WT_BRANCH=${WT_BRANCH}"
echo "BASE_REF=${BASE_REF}"
echo "BASE_BRANCH=${BASE_BRANCH}"
'
è¿åŽããã WT_DIR / WT_BRANCH / BASE_REF / BASE_BRANCH ã以éã® Step ã§äœ¿ããå€±ææ (branch åè¡çªç) 㯠ID ãäœãçŽã㊠1 åã ã retryã2 åé£ç¶å€±æã§ ERROR: worktree creation failed ãåºãçµäºã
Step 5 â cursor-companion.sh task --write ã§å§è²
Lead ãçŽæ¥ companion ãåŒã¶ (references/cursor-cli-only.md Topology ç¯ â é claude backend ã§ã¯ Worker ä»åšãªã)ãããã³ããã¯åŒæ°ã® task ãã®ãŸãŸ + å¿
èŠãªè¿œè£ã®ã¿ãåé·ãªå眮ãã¯ä»ããªãã
bash -c '
set -euo pipefail
valid_root() {
[ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
}
HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
ROOT="${PLUGIN_ROOT:-$HARNESS_PLUGIN_ROOT}"
if ! valid_root "$ROOT"; then
ROOT=""
if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
while [ "$probe" != "/" ] && ! valid_root "$probe"; do
probe="$(cd "$probe/.." && pwd)"
done
valid_root "$probe" && ROOT="$probe"
fi
fi
if ! valid_root "$ROOT"; then
ROOT=""
for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
"$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
"$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
if valid_root "$c"; then ROOT="$c"; break; fi
done
fi
if ! valid_root "$ROOT"; then
echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
exit 2
fi
HARNESS_PLUGIN_ROOT="$ROOT"
PROMPT="<task-description>
Constraints:
- Modify only files relevant to the task.
- Keep existing tests green. Add tests when the task is verifiable.
- Match existing code style and naming.
- Create exactly one git commit if your environment supports it; otherwise leave one dirty changeset for Lead auto-commit.
- Do not touch .claude-plugin/settings*, .claude/settings*, .eslintrc*, biome.json, tsconfig*.json."
bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task \
--write \
--workspace "${WT_DIR}" \
"${PROMPT}"
' 2>&1
å€å®:
- exit 0 + result text â Step 6 ãž
- exit 1 (result-error) â companion stderr ã 1 è¡èŠçŽããŠ
ERROR: cursor returned is_error/empty result ãåºãçµäºãworktree 㯠Step 8 ã®ã¯ãªãŒã³ã¢ããã§åé€
- exit 2 (bad-guard) â èšå®äžåãåå (workspace æå®èª€ãç) ã 1 è¡ã§ç€ºãçµäº
- exit 3 (not-found) â Step 2 ã§æ€åºæžã¿ã®ã¯ãã ããå床ééãããåæ§ã«çµäº
Step 6 â Lead diff review
worktree å
ã§ Composer ãäœæãã倿Žãèªã¿ãç®èŠã¬ãã¥ãŒ + contract grep ã®äºæ®µã²ãŒããéã (harness-work ãLead ã® cherry-pick åã²ãŒãããšåãå¥çŽ)ã
泚æ (Issue #193 §1): Cursor Composer 㯠--write ã§ãã¡ã€ã«ç·šéãè¡ãã commit ã¯äœããªãããšããããworktree ã dirty ãªãŸãŸæŸçœ®ãããš Step 7 ã® cherry-pick 察象ããæŒãããŠãŒã¶ãŒèŠç¹ã§ãå®äºããã®ã« main ã«äœãå
¥ããªããç¶æ
ã«ãªããæ¬ Step åé ã§ dirty ãªããæ¢å commit ãããå Žå㯠amendãcommit ããªãå Žå㯠Lead åŽã§ 1 commit ã«ãŸãšããã
bash -c '
set -euo pipefail
cd "${WT_DIR}"
# Composer 㯠dirty changeset ãè¿ãããšããããããæ¢å commit ã« fold ãã
if [ -n "$(git status --porcelain)" ]; then
git add -A
if [ "$(git rev-list --count "${BASE_REF}..HEAD")" -gt 0 ]; then
git -c user.name="cursor-composer" -c user.email="cursor-composer@local" \
commit --amend --no-edit --no-verify
echo "==AUTO_AMENDED=="
else
git -c user.name="cursor-composer" -c user.email="cursor-composer@local" \
commit --no-verify -m "cursor: ${TASK_SUMMARY:-cursor-do delegated change}"
echo "==AUTO_COMMITTED=="
fi
git log -1 --oneline
fi
echo "==LOG=="
git log --oneline "${BASE_REF}..HEAD"
echo "==STAT=="
git diff --stat "${BASE_REF}..HEAD"
echo "==DIFF=="
git diff "${BASE_REF}..HEAD"
'
TASK_SUMMARY ã¯åŒæ° task ã®å
é 60 æå以å
ã«å§çž®ããæååã Lead ãäºåã« export ããŠãã (äŸ: TASK_SUMMARY="Add login form validation")ãæªèšå®ãªã fallback ã¡ãã»ãŒãž cursor-do delegated change ã䜿ãã--no-verify ãä»ããã®ã¯ worktree å
ã®ç·šéããLead ã¬ãã¥ãŒåã®äžé commitããšããŠæ±ããã (cherry-pick åŸã® main commit ã§ R01-R13 ãš pre-commit hook ãéã)ã
Lead 㯠diff å
šæã Read ãã以äžã確èªãã:
å€å®:
- åé¡ãªã â Step 7 ãž
- ç¯å²å€å€æŽãã â è©²åœ commit ã
git reset ã§å·»ãæ»ãããCursor ã«åå§è² (Step 5 ã 1 åã ã retry)ã2 å倱æã§ REQUEST_CHANGES: <çç±> ãåºããworktree ãæ®ãããŸãŸçµäº
- protected path / secret æ€åº â å³ abortã
ABORT: protected path violation ãåºã worktree åé€
Step 7 â cherry-pick + Plans.md cc:done æŽæ°
worktree ãã main tree ã« cherry-pick ãããCursor prompt 㯠exactly one commit å¥çŽã ããComposer 㯠dirty changeset ãè¿ãããšããããã Step 6 ã§ commit/amend ãããè€æ° commit ãæ®ã£ãå Žå㯠main tree ãè§Šãåã«åæ¢ããã
ããã« cherry-pick åã« Plans.md ã® staged / unstaged å·®åããªãããšã確èªãããçç±: æ¢åå·®åãããç¶æ
ã§åŸç¶ã® git add Plans.md && git commit --amend ãè¡ããšãtask ãšç¡é¢ä¿ãª plan/status ç·šéã Cursor ã® code commit ã«å·»ã蟌ãããã
SHA çŽæ¥æå® (branch åçµç±ã§ã¯ãªã) ã§ reviewer state drift ãé¿ãã (MEMORY: reviewer_state_drift)ã
bash -c '
set -euo pipefail
COMMIT_COUNT="$(cd "${WT_DIR}" && git rev-list --count "${BASE_REF}..HEAD")"
if [ "${COMMIT_COUNT}" -eq 0 ]; then
echo "ERROR: no commits to cherry-pick"
exit 1
fi
if [ "${COMMIT_COUNT}" -ne 1 ]; then
echo "ERROR: cursor returned ${COMMIT_COUNT} commits; expected exactly one. Keep worktree for manual review: ${WT_DIR}"
exit 1
fi
if ! git diff --quiet -- Plans.md || ! git diff --cached --quiet -- Plans.md; then
echo "ERROR: Plans.md has pre-existing local edits; refusing to cherry-pick before the cursor:do marker amend"
exit 1
fi
SHA="$(cd "${WT_DIR}" && git rev-parse HEAD)"
git cherry-pick "${SHA}"
echo "==CHERRY_PICKED=="
git log --oneline -n 1
'
cherry-pick ã§ conflict ãåºãã git cherry-pick --abort ããCHERRY_PICK_CONFLICT: <files> ã 1 è¡ã§ç€ºããŠçµäº (worktree ã¯æ®ãããŠãŒã¶ãŒå€æ)ã
cherry-pick åŸãPlans.md ã«å¯Ÿå¿è¡ãããã°è©²åœã¿ã¹ã¯ã®ããŒã«ãŒãæŽæ°ããã
äžèšã® clean precondition ãééããŠãããããããã§çºçãã Plans.md å·®å㯠marker-only diff ãšããŠæ±ã:
| <task> | ... | cc:done [<merged-sha>] |
該åœè¡ã®ç¹å®: åŒæ° task æååã®å
é 40 æåã§ grep ãããããããæåã® cc:TODO / cc:WIP / cc:todo è¡ã cc:done [<sha>] ã«çœ®æãããããããªããªãæŽæ°ã¹ããã (Plans.md å€ã®ã¿ã¹ã¯ãšããŠæ±ã)ã
ããŒã«ãŒãæŽæ°ããå Žåããã®ç·šé㯠cherry-pick commit ã«å«ãããæªã³ãããã® Plans.md ãæ®ã㊠cleanup / å®äºå ±åãžé²ãã§ã¯ãªããªãã
以äžã® amend block ã¯ãäžèš precondition ééåŸã«å®è¡ãã marker-only diff ã ãã察象ã«ãã:
bash -c '
set -euo pipefail
if git diff --quiet -- Plans.md; then
echo "PLANS_UPDATED=0"
else
git add Plans.md
git commit --amend --no-edit
echo "PLANS_UPDATED=1"
echo "MERGED_SHA=$(git rev-parse HEAD)"
fi
'
Step 8 â worktree cleanup + å®äºå ±å (1 ãããã¯)
cherry-pick æååŸãworktree ã delete ããã倱æ path ã§ã¯åŒã°ããªãïŒworktree ãæ®ããŠãŠãŒã¶ãŒå€æïŒã
bash -c '
set -euo pipefail
git worktree remove --force "${WT_DIR}"
git branch -D "${WT_BRANCH}" 2>/dev/null || true
echo "==CLEANUP=="
git worktree list | grep -v "cursor-do-" || true
'
å®äºå ±å㯠1 ããã㯠ã§åºããäžéãã¬ãŒã·ã§ã³ãªã:
cursor:do completed
task: <task-first-60-chars>
commits: <count>
base: <BASE_REF> â cherry-picked into <BASE_BRANCH>
plans: <updated|skipped (no match)>
files: <changed-file-count> changed, +<inserts> -<deletes>
Full Containment (write mode å¿
é )
| å±€ | åœ¹å² | skip å¯åŠ |
|---|
å°çš .git worktree | cursor ã®æžèŸŒã main tree ããéé¢ | äžå¯ïŒå¿
é ïŒ |
| Lead diff review | untrusted cursor åºåã®å質ã²ãŒã | äžå¯ïŒå¿
é ïŒ |
| contract-grep ã²ãŒã | docs / locale / matrix åºå®æååã®ä¿è· | äžå¯ïŒå¿
é ïŒ |
| cherry-pick â main | R01-R13 guard rail ãéãå¯äžã®çµè·¯ | äžå¯ïŒå¿
é ïŒ |
| Plans.md cc:done æŽæ° | å°åž³ãšã® sync | 該åœè¡ãªããã° skip å¯ |
Prohibited
--force / --yolo ã companion ã«æž¡ãïŒCursor å
¬åŒ "Never use"ïŒ
- cursor åºåã Lead ã¬ãã¥ãŒåã« main ãžçŽæ¥ commit ãã
- protected path (
.claude-plugin/settings*, .eslintrc*, tsconfig*.json, etc.) ã Step 5 ã® prompt ã§èš±å¯ãã
$HOME / / / main tree ã --workspace ã«æå®ãã
- Plans.md ã®
cc:* ããŒã«ãŒã task ãšç¡é¢ä¿ã«æžãæãã
Related Skills / Rules
cursor:ask â èªåå°çšã®è³ªåã»èª¿æ»ã»æµå¯ŸçèŠç¹ (worktree äžèŠ)
breezing --cursor â è€æ°ã¿ã¹ã¯ã team ãããŒã§ cursor å§è²ããå Žå
harness-work â claude backend ã® default ãã㌠(Worker agent çµç±)
references/cursor-cli-only.md â Cursor backend governance + Topology (æ§ .claude/rules/cursor-cli-only.md ã®å
šæãããã«ç§»èšæžã¿)