Skip to content

feat: cursor-agent対応#403

Merged
nrslib merged 5 commits intonrslib:mainfrom
j5ik2o:feature/cursor-agent-cli-provider-spec
Feb 26, 2026
Merged

feat: cursor-agent対応#403
nrslib merged 5 commits intonrslib:mainfrom
j5ik2o:feature/cursor-agent-cli-provider-spec

Conversation

@j5ik2o
Copy link
Contributor

@j5ik2o j5ik2o commented Feb 26, 2026

概要

cursor-agent CLI を使う新しい provider cursor を追加しました。Claude / Codex / OpenCode に続く4番目の provider として、--provider cursor または設定ファイルの provider: cursor で利用できます。

変更内容

cursor provider の新規実装

  • src/infra/cursor/client.tscursor-agent CLI を spawn ベースで呼び出すクライアント実装
    • stdin: ignore + stdout/stderr の明示的収集、バッファ上限・abort・close/error の取り扱いを整備
    • 認証エラー(Workspace Trust Required 等)の分類と分かりやすいエラーメッセージ
  • src/infra/cursor/types.ts, index.ts — cursor provider の型定義とエントリポイント
  • src/infra/providers/cursor.ts — Provider インターフェース実装
  • src/infra/providers/index.ts, types.tscursor を provider 一覧に追加

スキーマ・設定の拡張

  • src/core/models/schemas.ts, piece-types.ts, provider-profiles.ts, persisted-global-config.ts — provider 型に cursor を追加
  • src/agents/types.ts, src/core/piece/types.ts — エージェント・movement の provider 型を拡張
  • src/infra/config/types.tscursor_api_key フィールドを追加
  • src/infra/config/global/globalConfig.ts, index.ts, initialization.ts — cursor_api_key の読み込みと設定初期化
  • src/infra/config/env/config-env-overrides.tsTAKT_CURSOR_API_KEY 環境変数サポート
  • src/app/cli/program.ts--provider オプションのヘルプに cursor を追加
  • src/core/piece/permission-profile-resolution.ts — cursor の permission mode 対応(full--force

エンジン修正

  • src/core/piece/engine/MovementExecutor.ts — Phase1 の応答が done 以外の場合、Phase2/3 に進まず終了するガードを追加(cursor エラー時の二次エラー防止)

ドキュメント更新

  • docs/agents.md, docs/cli-reference.md, docs/cli-reference.ja.md, docs/configuration.md, docs/configuration.ja.md — 全 provider 一覧・設定例・API キー設定に cursor を追記

テスト

  • src/__tests__/cursor-client.test.ts — spawn モック前提の cursor クライアントテスト(新規)
  • src/__tests__/cursor-provider.test.ts — provider 統合テスト(新規)
  • src/__tests__/cli-provider-option.test.ts--provider オプションに cursor が含まれることを確認(新規)
  • src/__tests__/config-env-overrides.test.tsTAKT_CURSOR_API_KEY 環境変数の適用テストを追加
  • src/__tests__/provider-resolution.test.ts, globalConfig-resolvers.test.ts, opencode-config.test.ts — cursor を含む provider 解決テストを更新
  • src/__tests__/report-phase-blocked.test.ts — Phase1 が error のときに report phase を実行しない回帰テストを追加(新規)

背景

cursor-agent CLI は Cursor エディタが提供するエージェント実行コマンドです。TAKT から cursor-agent を呼び出すことで、Cursor の AI モデル(gpt-5.3-codex 等)を使ったタスク実行が可能になります。

また、cursor エラー(例: Workspace Trust Required / 無効モデル)発生時に Phase1 失敗後も report phase に進んで sessionId 不在の二次エラーが出る問題があったため、MovementExecutor にガードを追加しました。

使い方

# CLI オプション
takt --pipeline --provider cursor --model gpt-5.3-codex --task "..."

# グローバル設定
# ~/.takt/config.yaml
provider: cursor
model: gpt-5.3-codex

# API キー(cursor-agent login 済みなら省略可)
export TAKT_CURSOR_API_KEY=...

確認結果

  • npx vitest run src/__tests__/cursor-client.test.ts
  • npx vitest run src/__tests__/cursor-provider.test.ts
  • npx vitest run src/__tests__/report-phase-blocked.test.ts
  • npm run build
  • ./bin/takt --pipeline --skip-git --provider cursor --model gpt-5.3-codex --task "Output exactly: hello world"hello world 応答を確認 ✅

補足

  • cursor-agent 利用時は環境に存在する有効モデル名(例: gpt-5.3-codex)の指定が必要です。
  • 初回は Workspace Trust 設定が必要です(cursor-agent --trust ...)。
  • API キーなしでも cursor-agent login が済んでいれば動作します。

@j5ik2o j5ik2o force-pushed the feature/cursor-agent-cli-provider-spec branch from d7daed2 to 2479492 Compare February 26, 2026 11:21
@j5ik2o j5ik2o changed the title fix: cursor-agent実行安定化とPhaseエラー処理の修正 feat: cursor-agent CLI provider対応と安定化 Feb 26, 2026
j5ik2o and others added 2 commits February 26, 2026 20:58
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@j5ik2o j5ik2o force-pushed the feature/cursor-agent-cli-provider-spec branch from 29c0b89 to 45bca95 Compare February 26, 2026 11:59
@j5ik2o j5ik2o marked this pull request as ready for review February 26, 2026 12:00
@j5ik2o j5ik2o changed the title feat: cursor-agent CLI provider対応と安定化 feat: cursor-agent対応 Feb 26, 2026
Copy link
Owner

@nrslib nrslib left a comment

Choose a reason for hiding this comment

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

一点対応いただけますと幸いです!

@j5ik2o
Copy link
Contributor Author

j5ik2o commented Feb 26, 2026

Issue #404 の対応として、MovementExecutor の早期リターン条件を status === 'error' のみに限定しました。これによって blocked や interrupted が誤って error 扱いで処理打ち切りになる問題を避けています。

あわせて blocked 時は Phase 2(report)をスキップしつつ、previous_response スナップショットは必ず保存するようにして、再実行時に最新の文脈を引き継げるようにしました。

さらに、report は Phase 1 が done の場合にのみ実行するように制御を明確化しています。関連して engine-blocked / engine-error / report-phase-blocked のテストを追加・更新し、blocked・interrupted 系の挙動を回帰防止しています。

また、E2E テストに Cursor を専用スイートとして追加しました。test:e2e:provider:cursor と test:e2e:cursor スクリプトを新設し、vitest.config.e2e.cursor.ts で Cursor 向けに add-and-run / worktree を対象化しています。docs/testing/e2e.md には Cursor 実行条件(cursor-agent CLI と認証)を追記し、e2e 用設定には provider_profiles.cursor.default_permission_mode: full を追加して、Cursor を opencode と同等に明示的に扱えるようにしました。

@nrslib
Copy link
Owner

nrslib commented Feb 26, 2026

ありがとうございます!
拝見しました
こちら問題なさそうと思いつつ、Movement 周りの影響を見る意味でドッグフーディングしたいので、alpha で出しますね!

Copy link
Owner

@nrslib nrslib left a comment

Choose a reason for hiding this comment

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

LGTM!

@nrslib nrslib merged commit 204843f into nrslib:main Feb 26, 2026
3 checks passed
@nrslib nrslib mentioned this pull request Feb 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants