soba-cli 0.1.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.
Files changed (101) hide show
  1. checksums.yaml +7 -0
  2. data/.claude/commands/osoba/add-backlog.md +173 -0
  3. data/.claude/commands/osoba/implement.md +151 -0
  4. data/.claude/commands/osoba/plan.md +217 -0
  5. data/.claude/commands/osoba/review.md +133 -0
  6. data/.claude/commands/osoba/revise.md +176 -0
  7. data/.claude/commands/soba/implement.md +88 -0
  8. data/.claude/commands/soba/plan.md +93 -0
  9. data/.claude/commands/soba/review.md +91 -0
  10. data/.claude/commands/soba/revise.md +76 -0
  11. data/.devcontainer/.env +2 -0
  12. data/.devcontainer/Dockerfile +3 -0
  13. data/.devcontainer/LICENSE +21 -0
  14. data/.devcontainer/README.md +85 -0
  15. data/.devcontainer/bin/devcontainer-common.sh +50 -0
  16. data/.devcontainer/bin/down +35 -0
  17. data/.devcontainer/bin/rebuild +10 -0
  18. data/.devcontainer/bin/up +11 -0
  19. data/.devcontainer/compose.yaml +28 -0
  20. data/.devcontainer/devcontainer.json +53 -0
  21. data/.devcontainer/post-attach.sh +29 -0
  22. data/.devcontainer/post-create.sh +62 -0
  23. data/.devcontainer/setup/01-os-package.sh +19 -0
  24. data/.devcontainer/setup/02-npm-package.sh +22 -0
  25. data/.devcontainer/setup/03-mcp-server.sh +33 -0
  26. data/.devcontainer/setup/04-tool.sh +17 -0
  27. data/.devcontainer/setup/05-soba-setup.sh +66 -0
  28. data/.devcontainer/setup/scripts/functions/install_apt.sh +77 -0
  29. data/.devcontainer/setup/scripts/functions/install_npm.sh +71 -0
  30. data/.devcontainer/setup/scripts/functions/mcp_config.sh +14 -0
  31. data/.devcontainer/setup/scripts/functions/print_message.sh +59 -0
  32. data/.devcontainer/setup/scripts/setup/mcp-markdownify.sh +39 -0
  33. data/.devcontainer/sync-envs.sh +58 -0
  34. data/.envrc.sample +7 -0
  35. data/.rspec +4 -0
  36. data/.rubocop.yml +70 -0
  37. data/.rubocop_airbnb.yml +2 -0
  38. data/.rubocop_todo.yml +74 -0
  39. data/.tool-versions +1 -0
  40. data/CLAUDE.md +20 -0
  41. data/LICENSE +21 -0
  42. data/README.md +384 -0
  43. data/README_ja.md +384 -0
  44. data/Rakefile +18 -0
  45. data/bin/soba +120 -0
  46. data/config/config.yml.example +36 -0
  47. data/docs/business/INDEX.md +6 -0
  48. data/docs/business/overview.md +42 -0
  49. data/docs/business/workflow.md +143 -0
  50. data/docs/development/INDEX.md +10 -0
  51. data/docs/development/architecture.md +69 -0
  52. data/docs/development/coding-standards.md +152 -0
  53. data/docs/development/distribution.md +26 -0
  54. data/docs/development/implementation-guide.md +103 -0
  55. data/docs/development/testing-strategy.md +128 -0
  56. data/docs/development/tmux-management.md +253 -0
  57. data/docs/document_system.md +58 -0
  58. data/lib/soba/commands/config/show.rb +63 -0
  59. data/lib/soba/commands/init.rb +778 -0
  60. data/lib/soba/commands/open.rb +144 -0
  61. data/lib/soba/commands/start.rb +442 -0
  62. data/lib/soba/commands/status.rb +175 -0
  63. data/lib/soba/commands/stop.rb +147 -0
  64. data/lib/soba/config_loader.rb +32 -0
  65. data/lib/soba/configuration.rb +268 -0
  66. data/lib/soba/container.rb +48 -0
  67. data/lib/soba/domain/issue.rb +38 -0
  68. data/lib/soba/domain/phase_strategy.rb +74 -0
  69. data/lib/soba/infrastructure/errors.rb +23 -0
  70. data/lib/soba/infrastructure/github_client.rb +399 -0
  71. data/lib/soba/infrastructure/lock_manager.rb +129 -0
  72. data/lib/soba/infrastructure/tmux_client.rb +331 -0
  73. data/lib/soba/services/ansi_processor.rb +92 -0
  74. data/lib/soba/services/auto_merge_service.rb +133 -0
  75. data/lib/soba/services/closed_issue_window_cleaner.rb +96 -0
  76. data/lib/soba/services/daemon_service.rb +83 -0
  77. data/lib/soba/services/git_workspace_manager.rb +102 -0
  78. data/lib/soba/services/issue_monitor.rb +29 -0
  79. data/lib/soba/services/issue_processor.rb +215 -0
  80. data/lib/soba/services/issue_watcher.rb +193 -0
  81. data/lib/soba/services/pid_manager.rb +87 -0
  82. data/lib/soba/services/process_info.rb +58 -0
  83. data/lib/soba/services/queueing_service.rb +98 -0
  84. data/lib/soba/services/session_logger.rb +111 -0
  85. data/lib/soba/services/session_resolver.rb +72 -0
  86. data/lib/soba/services/slack_notifier.rb +121 -0
  87. data/lib/soba/services/status_manager.rb +74 -0
  88. data/lib/soba/services/test_process_manager.rb +84 -0
  89. data/lib/soba/services/tmux_session_manager.rb +251 -0
  90. data/lib/soba/services/workflow_blocking_checker.rb +73 -0
  91. data/lib/soba/services/workflow_executor.rb +256 -0
  92. data/lib/soba/services/workflow_integrity_checker.rb +151 -0
  93. data/lib/soba/templates/claude_commands/implement.md +88 -0
  94. data/lib/soba/templates/claude_commands/plan.md +93 -0
  95. data/lib/soba/templates/claude_commands/review.md +91 -0
  96. data/lib/soba/templates/claude_commands/revise.md +76 -0
  97. data/lib/soba/version.rb +5 -0
  98. data/lib/soba.rb +44 -0
  99. data/lib/tasks/gem.rake +75 -0
  100. data/soba-cli.gemspec +59 -0
  101. metadata +430 -0
data/README_ja.md ADDED
@@ -0,0 +1,384 @@
1
+ # soba CLI
2
+
3
+ [![GitHub Release](https://img.shields.io/github/v/release/douhashi/soba-cli)](https://github.com/douhashi/soba-cli/releases)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![Ruby Version](https://img.shields.io/badge/ruby-%3E%3D%203.0-red)](https://www.ruby-lang.org/)
6
+
7
+ [English version](README.md)
8
+
9
+ GitHub IssueとClaude Codeを連携させる自律的ワークフロー実行CLIツール。AI駆動の開発サイクルを実現します。
10
+
11
+ ## 概要
12
+
13
+ soba CLIは、Issueの作成からプルリクエストのマージまで、開発ワークフロー全体を自動化します。GitHub Issueを監視し、Claude Code AIの支援により計画、実装、レビュー、マージの各フェーズを自動的に処理します。
14
+
15
+ ## 主な機能
16
+
17
+ - 🤖 **自律ワークフロー**: Issue作成からマージまで完全自動化
18
+ - 🏷️ **ラベル駆動の状態管理**: GitHubラベルによる進捗追跡
19
+ - 🔄 **継続的処理**: 自動ポーリングとフェーズ遷移
20
+ - 🎯 **優先順位管理**: Issue番号による順次処理
21
+ - 🪟 **Tmux統合**: AIプロセスの可視化監視
22
+ - 🔀 **Git Worktreeサポート**: 独立したブランチ管理
23
+ - 🚀 **自動マージ**: 承認後の自動PRマージ
24
+
25
+ ## ワークフロー
26
+
27
+ ```mermaid
28
+ graph TD
29
+ A[複数のsoba:todo] -->|soba: 優先度判定| B[1つをsoba:queued]
30
+ B -->|soba: 即座に| C[soba:planning]
31
+ C -->|Claude: 計画策定| D[soba:ready]
32
+ D -->|soba: 自動検出| E[soba:doing]
33
+ E -->|Claude: 実装・PR作成| F[soba:review-requested]
34
+ F -->|soba: 自動検出| G[soba:reviewing]
35
+ G -->|Claude: レビュー承認| H[soba:done + PR:soba:lgtm]
36
+ G -->|Claude: 修正要求| I[soba:requires-changes]
37
+ I -->|soba: 自動検出| K[soba:revising]
38
+ K -->|Claude: 修正対応| F
39
+ H -->|soba: 自動マージ| J[soba:merged]
40
+ J -->|次のキューイング| A
41
+ ```
42
+
43
+ ## インストール
44
+
45
+ ### Ruby Gemとして
46
+
47
+ ```bash
48
+ gem install soba-cli
49
+ ```
50
+
51
+ ### ソースから
52
+
53
+ ```bash
54
+ # リポジトリのクローン
55
+ git clone https://github.com/douhashi/soba-cli.git
56
+ cd soba-cli
57
+
58
+ # 依存関係のインストール
59
+ bundle install
60
+
61
+ # ソースから実行
62
+ bin/soba --help
63
+ ```
64
+
65
+ ## クイックスタート
66
+
67
+ ### ⚠ 重要な注意 ⚠
68
+
69
+ soba はAIによる自律的な開発を支援するため、デフォルトの設定で `--dangerously-skip-permissions` を使用します。(設定ファイルで無効化することができます)
70
+
71
+ デフォルト設定で利用する場合、devcontainerの利用や外部アクセスの制限など、可能な限りの保全作業を行ったうえで使用してください。
72
+
73
+ ---
74
+
75
+ 1. **設定の初期化**
76
+ ```bash
77
+ soba init
78
+ ```
79
+
80
+ 2. **設定ファイルの編集**
81
+ `.soba/config.yml`を編集:
82
+ ```yaml
83
+ github:
84
+ token: ${GITHUB_TOKEN}
85
+ repository: owner/repo
86
+ ```
87
+
88
+ 3. **自動化の開始**
89
+ ```bash
90
+ soba start
91
+ ```
92
+
93
+ 4. **ラベル付きIssueの作成**
94
+ GitHub Issueに`soba:todo`ラベルを付けて自動処理を開始。
95
+
96
+ ## 設定
97
+
98
+ 設定ファイルの場所: `.soba/config.yml`(プロジェクトルート)
99
+
100
+ ### 完全な設定例
101
+
102
+ ```yaml
103
+ # GitHub設定
104
+ github:
105
+ # Personal Access Token(環境変数可)
106
+ token: ${GITHUB_TOKEN}
107
+ # ターゲットリポジトリ(形式: owner/repo)
108
+ repository: douhashi/soba-cli
109
+
110
+ # ワークフロー設定
111
+ workflow:
112
+ # Issueポーリング間隔(秒)(デフォルト: 20)
113
+ interval: 20
114
+ # Claude実行にtmuxを使用(デフォルト: true)
115
+ use_tmux: true
116
+ # 自動PRマージ有効化(デフォルト: true)
117
+ auto_merge_enabled: true
118
+ # クローズ済みIssueのtmuxウィンドウクリーンアップ(デフォルト: true)
119
+ closed_issue_cleanup_enabled: true
120
+ # クリーンアップ間隔(秒)(デフォルト: 300)
121
+ closed_issue_cleanup_interval: 300
122
+ # tmuxペインへのコマンド遅延(秒)(デフォルト: 3)
123
+ tmux_command_delay: 3
124
+
125
+ # Slack通知設定
126
+ slack:
127
+ # Slack通知用のWebhook URL
128
+ # Webhook URLの取得方法: https://api.slack.com/messaging/webhooks
129
+ webhook_url: ${SLACK_WEBHOOK_URL}
130
+ # フェーズ開始時の通知を有効化(デフォルト: false)
131
+ notifications_enabled: false
132
+
133
+ # Git設定
134
+ git:
135
+ # git worktreeのベースパス
136
+ worktree_base_path: .git/soba/worktrees
137
+ # フェーズ開始時の自動ワークスペース設定(デフォルト: true)
138
+ setup_workspace: true
139
+
140
+ # フェーズコマンド(オプション - カスタムClaudeコマンド用)
141
+ phase:
142
+ plan:
143
+ command: claude
144
+ options:
145
+ - --dangerously-skip-permissions
146
+ parameter: '/soba:plan {{issue-number}}'
147
+ implement:
148
+ command: claude
149
+ options:
150
+ - --dangerously-skip-permissions
151
+ parameter: '/soba:implement {{issue-number}}'
152
+ review:
153
+ command: claude
154
+ options:
155
+ - --dangerously-skip-permissions
156
+ parameter: '/soba:review {{issue-number}}'
157
+ revise:
158
+ command: claude
159
+ options:
160
+ - --dangerously-skip-permissions
161
+ parameter: '/soba:revise {{issue-number}}'
162
+ ```
163
+
164
+ ### 環境変数
165
+
166
+ | 変数名 | 説明 | 必須 |
167
+ |--------|------|------|
168
+ | `GITHUB_TOKEN` | repo/read:org/write:discussion スコープを持つGitHub Personal Access Token | はい |
169
+ | `SLACK_WEBHOOK_URL` | SlackのWebhookURL | いいえ |
170
+
171
+ ### Claudeコマンドテンプレート
172
+
173
+ Sobaは初期化時に自動的にClaudeコマンドテンプレートを `.claude/commands/soba/` に展開します。これらのテンプレートは各フェーズのワークフロー自動化コマンドを定義します:
174
+
175
+
176
+ - **plan.md** - Issue計画フェーズテンプレート
177
+ - **implement.md** - 実装フェーズテンプレート
178
+ - **review.md** - PRレビューフェーズテンプレート
179
+ - **revise.md** - 修正フェーズテンプレート
180
+
181
+ これらのテンプレートはgemパッケージに含まれており、以下で確認できます:
182
+ [lib/soba/templates/claude_commands/](lib/soba/templates/claude_commands/)
183
+
184
+ ## コマンド
185
+
186
+ ### `soba init`
187
+ 現在のプロジェクトでsoba設定を初期化。
188
+
189
+ ```bash
190
+ # 基本的な初期化
191
+ soba init
192
+
193
+ # インタラクティブモード
194
+ soba init --interactive
195
+ ```
196
+
197
+ ### `soba start`
198
+ ワークフロー自動化デーモンを開始。
199
+
200
+ ```bash
201
+ # デーモンモード(バックグラウンド)で開始
202
+ soba start
203
+
204
+ # デーモンモードで開始
205
+ soba start --daemon
206
+
207
+ # 特定のIssueを指定して開始
208
+ soba start 123
209
+
210
+ # tmuxなしで開始
211
+ soba start --no-tmux
212
+ ```
213
+
214
+ ### `soba status`
215
+ デーモンのステータスと最近のログを表示。
216
+
217
+ ```bash
218
+ # 基本ステータス
219
+ soba status
220
+
221
+ # より多くのログ行を表示
222
+ soba status --log 50
223
+
224
+ # JSON形式で出力
225
+ soba status --json
226
+ ```
227
+
228
+ ### `soba stop`
229
+ 実行中のデーモンを停止。
230
+
231
+ ```bash
232
+ # 正常停止
233
+ soba stop
234
+
235
+ # 即座に強制停止
236
+ soba stop --force
237
+
238
+ # カスタムタイムアウト
239
+ soba stop --timeout 60
240
+ ```
241
+
242
+ ### `soba open`
243
+ タスクのtmuxセッションを開くまたは一覧表示。
244
+
245
+ ```bash
246
+ # tmuxセッションを開く
247
+ soba open
248
+
249
+ # すべてのアクティブなセッションを一覧表示
250
+ soba open --list
251
+ ```
252
+
253
+ ### `soba config`
254
+ 現在の設定を表示。
255
+
256
+ ```bash
257
+ # 設定を表示
258
+ soba config
259
+
260
+ # 特定の設定ファイルを使用
261
+ soba --config /path/to/config.yml config
262
+ ```
263
+
264
+ ## ラベルシステム
265
+
266
+ ### Issueラベル(状態管理)
267
+
268
+ | ラベル | 状態 | 説明 |
269
+ |--------|------|------|
270
+ | `soba:todo` | 待機 | 新規Issue、処理待ち |
271
+ | `soba:queued` | キュー選択 | 処理対象として選択済み |
272
+ | `soba:planning` | 計画中 | Claudeが実装計画を策定中 |
273
+ | `soba:ready` | 準備完了 | 計画完了、実装待ち |
274
+ | `soba:doing` | 実装中 | Claudeが実装作業中 |
275
+ | `soba:review-requested` | レビュー待ち | PR作成済み、レビュー待ち |
276
+ | `soba:reviewing` | レビュー中 | ClaudeがPRをレビュー中 |
277
+ | `soba:done` | 完了 | レビュー承認済み、マージ可能 |
278
+ | `soba:requires-changes` | 修正要求 | レビューで修正が必要と判断 |
279
+ | `soba:revising` | 修正中 | Claudeが修正対応中 |
280
+ | `soba:merged` | マージ済み | PRマージ済み、Issueクローズ済み |
281
+
282
+ ### PRラベル
283
+
284
+ | ラベル | 説明 |
285
+ |--------|------|
286
+ | `soba:lgtm` | レビュー承認済み、自動マージ対象 |
287
+
288
+ ## 開発
289
+
290
+ ### ディレクトリ構造
291
+
292
+ ```
293
+ lib/
294
+ ├── soba/
295
+ │ ├── cli/ # CLIフレームワーク設定
296
+ │ ├── commands/ # コマンド実装
297
+ │ ├── domain/ # ドメインモデル
298
+ │ ├── services/ # ビジネスロジック
299
+ │ └── infrastructure/ # 外部連携
300
+ ```
301
+
302
+ ### テストの実行
303
+
304
+ ```bash
305
+ # 全テスト実行
306
+ bundle exec rspec
307
+
308
+ # カバレッジ付きテスト
309
+ bundle exec rake coverage
310
+
311
+ # 特定のテストスイート実行
312
+ bundle exec rspec spec/unit/
313
+ ```
314
+
315
+ ### コード品質
316
+
317
+ ```bash
318
+ # Rubocop実行(Airbnbスタイル)
319
+ bundle exec rubocop
320
+
321
+ # 自動修正
322
+ bundle exec rubocop -a
323
+
324
+ # セキュリティ監査
325
+ bundle exec bundler-audit
326
+ ```
327
+
328
+ ### Gitフック
329
+
330
+ プロジェクトはコード品質のためのpre-commitフックを使用:
331
+ - 自動的なRubocop修正
332
+ - 自動修正後の再ステージング
333
+ - 手動修正が必要な場合のコミットブロック
334
+
335
+ フックのセットアップ:
336
+ ```bash
337
+ ./scripts/setup-hooks.sh
338
+ ```
339
+
340
+ ## 要件
341
+
342
+ - Ruby >= 3.0
343
+ - Git
344
+ - tmux(オプション、推奨)
345
+ - GitHub Personal Access Token
346
+ - Claude Code CLI(`claude`コマンド)
347
+
348
+ ## アーキテクチャ
349
+
350
+ soba CLIはレイヤードアーキテクチャに従っています:
351
+ - **Commandsレイヤー**: CLIコマンド定義と解析
352
+ - **Domainレイヤー**: コアビジネスモデルとロジック
353
+ - **Servicesレイヤー**: ワークフローオーケストレーションと状態管理
354
+ - **Infrastructureレイヤー**: GitHub APIと外部ツール統合
355
+
356
+ 詳細なアーキテクチャドキュメントは[docs/development/architecture.md](docs/development/architecture.md)を参照。
357
+
358
+ ## コントリビューション
359
+
360
+ 1. リポジトリをフォーク
361
+ 2. フィーチャーブランチを作成(`git checkout -b feature/amazing-feature`)
362
+ 3. 変更をコミット(`git commit -m 'Add amazing feature'`)
363
+ 4. ブランチにプッシュ(`git push origin feature/amazing-feature`)
364
+ 5. プルリクエストを開く
365
+
366
+ 以下を確認してください:
367
+ - すべてのテストがパス(`bundle exec rspec`)
368
+ - Rubocopチェックがパス(`bundle exec rubocop`)
369
+ - 高いコードカバレッジを維持
370
+
371
+ ## ライセンス
372
+
373
+ このプロジェクトはMITライセンスの下でライセンスされています - 詳細は[LICENSE](LICENSE)ファイルを参照。
374
+
375
+ ## サポート
376
+
377
+ - **Issues**: [GitHub Issues](https://github.com/douhashi/soba-cli/issues)
378
+ - **Discussions**: [GitHub Discussions](https://github.com/douhashi/soba-cli/discussions)
379
+
380
+ ## 謝辞
381
+
382
+ - AI駆動開発を実現する[Claude Code](https://claude.ai/code)
383
+ - CLIフレームワーク[GLI](https://github.com/davetron5000/gli)
384
+ - [Airbnb Ruby Style Guide](https://github.com/airbnb/ruby)によるスタイリング
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rspec/core/rake_task"
4
+ require "rubocop/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+ RuboCop::RakeTask.new
8
+
9
+ # Load custom rake tasks
10
+ Dir.glob('lib/tasks/*.rake').each { |r| import r }
11
+
12
+ task default: [:rubocop, :spec]
13
+
14
+ desc "Run tests with coverage"
15
+ task :coverage do
16
+ ENV["COVERAGE"] = "true"
17
+ Rake::Task["spec"].invoke
18
+ end
data/bin/soba ADDED
@@ -0,0 +1,120 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "gli"
6
+ require_relative "../lib/soba"
7
+
8
+ include GLI::App
9
+
10
+ program_desc "GitHub to Claude Code workflow automation"
11
+ version Soba::VERSION
12
+
13
+ desc "Configuration file path"
14
+ flag [:c, :config]
15
+
16
+ desc "Verbose output"
17
+ switch [:v, :verbose]
18
+
19
+ desc "Initialize soba configuration"
20
+ command :init do |c|
21
+ c.desc "Interactive mode for configuration"
22
+ c.switch [:i, :interactive]
23
+
24
+ c.action do |global_options, options, _args|
25
+ require_relative "../lib/soba/commands/init"
26
+ Soba::Commands::Init.new(interactive: options[:interactive]).execute
27
+ end
28
+ end
29
+
30
+ desc "Show configuration"
31
+ command :config do |c|
32
+ c.action do |global_options, _options, _args|
33
+ require_relative "../lib/soba/commands/config/show"
34
+ Soba::Commands::Config::Show.new.execute(
35
+ config_path: global_options[:config],
36
+ )
37
+ end
38
+ end
39
+
40
+ desc "Start workflow automation"
41
+ command :start do |c|
42
+ c.desc "Issue number to process (optional)"
43
+ c.arg_name "[issue_number]"
44
+
45
+ c.desc "Disable tmux execution"
46
+ c.switch ["no-tmux"]
47
+
48
+ c.desc "Run in daemon mode (default is foreground mode)"
49
+ c.switch [:d, :daemon]
50
+
51
+ c.desc "[DEPRECATED] Run in foreground mode (now default)"
52
+ c.switch [:f, :foreground]
53
+
54
+ c.action do |global_options, options, args|
55
+ require_relative "../lib/soba/commands/start"
56
+ result = Soba::Commands::Start.new.execute(global_options, options, args)
57
+ if result.is_a?(Integer) && result != 0
58
+ exit(result)
59
+ end
60
+ end
61
+ end
62
+
63
+ desc "Show daemon status"
64
+ command :status do |c|
65
+ c.flag [:l, :log], desc: "Number of log lines to display", type: Integer, default_value: 10
66
+ c.switch [:j, :json], desc: "Output in JSON format", negatable: false
67
+
68
+ c.action do |global_options, options, args|
69
+ require_relative "../lib/soba/commands/status"
70
+ result = Soba::Commands::Status.new.execute(global_options, options, args)
71
+ if result.is_a?(Integer) && result != 0
72
+ exit(result)
73
+ end
74
+ end
75
+ end
76
+
77
+ desc "Stop daemon"
78
+ command :stop do |c|
79
+ c.switch [:f, :force], desc: "Force kill immediately without waiting", negatable: false
80
+ c.flag [:t, :timeout], desc: "Timeout in seconds", type: Integer, default_value: 30
81
+
82
+ c.action do |global_options, options, args|
83
+ require_relative "../lib/soba/commands/stop"
84
+ result = Soba::Commands::Stop.new.execute(global_options, options, args)
85
+ if result.is_a?(Integer) && result != 0
86
+ exit(result)
87
+ end
88
+ end
89
+ end
90
+
91
+ desc "Open tmux session for a task"
92
+ command :open do |c|
93
+ c.desc "Task number to open"
94
+ c.arg_name "[task_number]"
95
+
96
+ c.desc "List active task sessions"
97
+ c.switch [:l, :list]
98
+
99
+ c.action do |global_options, options, args|
100
+ require_relative "../lib/soba/commands/open"
101
+ command = Soba::Commands::Open.new
102
+ issue_number = args[0] unless args.empty?
103
+ command.execute(issue_number, list: options[:list])
104
+ end
105
+ end
106
+
107
+ pre do |global, _command, _options, _args|
108
+ if global[:verbose]
109
+ Soba.logger.level = :debug
110
+ end
111
+ true
112
+ end
113
+
114
+ on_error do |exception|
115
+ Soba.logger.error(exception.message)
116
+ Soba.logger.debug(exception.backtrace.join("\n")) if Soba.logger.debug?
117
+ false
118
+ end
119
+
120
+ exit run(ARGV)
@@ -0,0 +1,36 @@
1
+ # soba CLI configuration example
2
+ github:
3
+ # GitHub Personal Access Token
4
+ # Generate at: https://github.com/settings/tokens
5
+ token: ${GITHUB_TOKEN}
6
+
7
+ # Default repository to monitor (owner/repo format)
8
+ repository: owner/repo
9
+
10
+ claude:
11
+ # Claude API Key
12
+ api_key: ${CLAUDE_API_KEY}
13
+
14
+ # Model to use (optional)
15
+ model: claude-3-opus-20240229
16
+
17
+ workflow:
18
+ # Polling interval in seconds
19
+ interval: 60
20
+
21
+ # Use tmux for Claude execution (default: true)
22
+ # Set to false for CI/CD environments or debugging
23
+ use_tmux: true
24
+
25
+ # Maximum concurrent workflows
26
+ max_concurrent: 3
27
+
28
+ # Workflow timeout in seconds
29
+ timeout: 3600
30
+
31
+ logging:
32
+ # Log level: debug, info, warn, error
33
+ level: info
34
+
35
+ # Log file path (optional)
36
+ file: ~/.soba/logs/soba.log
@@ -0,0 +1,6 @@
1
+ # Business Documents
2
+
3
+ ## ドキュメント一覧
4
+
5
+ - `overview.md`: プロジェクトの概要と提供価値
6
+ - `workflow.md`: sobaの自動ワークフロー(計画・実装フェーズ、ラベル管理)
@@ -0,0 +1,42 @@
1
+ # soba CLI プロジェクト概要
2
+
3
+ ## プロジェクトの目的
4
+
5
+ soba CLIは、GitHub IssueをデータソースとしてClaude Codeによる自律的なワークフローを実現するコマンドラインツールです。開発者の作業を自動化し、効率的なイシュー管理とコード生成を支援します。
6
+
7
+ ## 主要機能
8
+
9
+ ### 1. Issue監視機能
10
+ - GitHub Issueの定期的な監視
11
+ - 新規・更新Issueの自動検出
12
+ - カスタマイズ可能な監視間隔
13
+
14
+ ### 2. 自律的ワークフロー実行
15
+ - Issue検出時のClaude Code自動起動
16
+ - Issueコンテンツに基づいた適切な処理実行
17
+ - コード生成、修正、テスト実行の自動化
18
+
19
+ ### 3. Claude Code最適化
20
+ - 専用コマンド群の提供
21
+ - AIエージェントテンプレート
22
+ - ワークフロー最適化ツール
23
+
24
+ ## ターゲットユーザー
25
+
26
+ - 個人開発者
27
+ - 小規模開発チーム
28
+ - AIアシスタントを活用した開発プロセスの自動化を求める組織
29
+
30
+ ## 提供価値
31
+
32
+ 1. **開発効率の向上**: 繰り返し作業の自動化
33
+ 2. **品質向上**: 一貫性のあるコード生成
34
+ 3. **迅速な対応**: Issue検出から実装までの時間短縮
35
+ 4. **柔軟性**: カスタマイズ可能なワークフロー
36
+
37
+ ## 技術スタック
38
+
39
+ - **実装言語**: Ruby
40
+ - **配布方式**: Tebako(スタンドアロンバイナリ)
41
+ - **対象プラットフォーム**: Linux, macOS, Windows
42
+ - **依存関係**: GitHub API, Claude Code API