GitHub Copilot のようなコーディングエージェントを作成するプロジェクト。GitHub や GitLab の Issue、Pull Request、Merge Request を自動処理し、LLM を使って様々なタスクを実行します。
このプロジェクトは、以下の特徴を持つ汎用的な LLM エージェントです:
- マルチプラットフォーム対応: GitHub と GitLab の両方をサポート
- MCP (Model Context Protocol) 統合: 外部サービスとの連携に MCP サーバーを使用
- 複数 LLM プロバイダ対応: OpenAI、LM Studio、Ollama をサポート
- タスクベースワークフロー: ラベル付きの Issue/PR/MR をタスクとして処理
- Docker 対応: コンテナでの実行をサポート
- キューベース処理: RabbitMQ を使用したタスクキューイング
- コンテキスト管理: 会話履歴の永続化と自動圧縮
- 一時停止・再開機能: タスク処理の一時停止と状態保存からの再開
- 計画実行モード: 構造化されたタスク処理のためのPlanning機能
- 継続動作モード: Docker Composeによる継続的なタスク処理
- 新規コメント検知: 処理中のユーザーコメントをリアルタイムに検知
- ✅ GitHub/GitLab の Issue、PR、MR の自動処理
- ✅ 複数の LLM プロバイダ(OpenAI、LM Studio、Ollama)
- ✅ MCP サーバーを通じた外部ツール連携
- ✅ ラベルベースのタスク管理
- ✅ Docker コンテナでの実行
- ✅ RabbitMQ を使用したキューイング
- ✅ 設定可能なロギングシステム
- ✅ コンテキストファイルによる会話履歴の永続化
- ✅ 自動コンテキスト圧縮(トークン数制御)
- ✅ タスクの一時停止と再開
- ✅ 処理中の新規コメント検知
- ✅ 計画実行モード(Planning)
- ✅ アサイン解除によるタスク停止
- ✅ プロジェクト固有のエージェントルール
- GitHub: Issue、Pull Request の処理
- GitLab: Issue、Merge Request の処理
- OpenAI: GPT-4o など
- LM Studio: ローカル LLM サーバー
- Ollama: ローカル LLM 実行環境
- OS: macOS、Linux(Docker 使用時は Windows も対応)
- Python: 3.13+
- Node.js: 18+ (MCP サーバー用)
- Git: バージョン管理
- Docker: コンテナ実行(オプション)
- Python パッケージ(
condaenv.yamlを参照) - Node.js パッケージ(
package.jsonを参照) - MCP サーバー各種
git clone --recursive https://github.com/notfolder/coding_agent.git
cd coding_agent
# または、既にクローン済みの場合
git submodule update --init --recursiveconda env create -f condaenv.yaml
conda activate coding-agentnpm installGitHub MCP サーバーをビルド:
cd github-mcp-server/cmd/github-mcp-server
go build -o ../../../github-mcp-server main.go
cd ../../..その後、config.yaml の GitHub MCP サーバーのコマンドパスを更新:
mcp_servers:
- mcp_server_name: "github"
command:
- "./github-mcp-server" # ローカルでビルドした実行ファイル
- "stdio"Docker ビルド時に自動的に /bin/github-mcp-server にビルドされるため、追加設定不要。
メインの設定は環境変数で行います。.env ファイルを作成して設定してください:
# 必須設定
TASK_SOURCE=github # タスクソース: "github" または "gitlab"
GITHUB_PERSONAL_ACCESS_TOKEN=your_github_token_here # GitHub Personal Access Token
GITLAB_PERSONAL_ACCESS_TOKEN=your_gitlab_token_here # GitLab Personal Access Token (GitLab使用時)
# LLM プロバイダ設定
LLM_PROVIDER=openai # LLMプロバイダ: "openai", "lmstudio", "ollama"
FUNCTION_CALLING=true # 関数呼び出し機能の有効/無効
# OpenAI 設定
OPENAI_API_KEY=your_openai_api_key # OpenAI API キー
OPENAI_BASE_URL=https://api.openai.com/v1 # OpenAI API ベースURL
OPENAI_MODEL=gpt-4o # 使用するモデル
# LM Studio 設定 (LM Studio使用時)
LMSTUDIO_BASE_URL=localhost:1234 # LM Studio ベースURL
LMSTUDIO_MODEL=qwen3-30b-a3b-mlx # 使用するモデル
# Ollama 設定 (Ollama使用時)
OLLAMA_ENDPOINT=http://localhost:11434 # Ollama エンドポイント
OLLAMA_MODEL=qwen3-30b-a3b-mlx # 使用するモデル
# GitHub/GitLab 設定
GITHUB_BOT_NAME=your_bot_name # GitHubボット名
GITLAB_BOT_NAME=your_bot_name # GitLabボット名
GITLAB_API_URL=https://gitlab.com/api/v4 # GitLab API URL
# MCP サーバー設定
GITHUB_MCP_COMMAND="./github-mcp-server.cmd stdio" # GitHub MCP サーバーコマンド
# RabbitMQ 設定 (オプション)
RABBITMQ_HOST=localhost # RabbitMQ ホスト
RABBITMQ_PORT=5672 # RabbitMQ ポート
RABBITMQ_USER=guest # RabbitMQ ユーザー
RABBITMQ_PASSWORD=guest # RabbitMQ パスワード
RABBITMQ_QUEUE=coding_agent_tasks # RabbitMQ キュー名
# ログ設定
LOGS=./logs/agent.log # ログファイルパス
DEBUG=false # デバッグモード(true/false)TASK_SOURCE: タスクソース("github" または "gitlab")GITHUB_PERSONAL_ACCESS_TOKEN: GitHub Personal Access TokenGITLAB_PERSONAL_ACCESS_TOKEN: GitLab Personal Access Token(GitLab使用時)
LLM_PROVIDER: LLMプロバイダ("openai", "lmstudio", "ollama")FUNCTION_CALLING: 関数呼び出し機能(true/false、デフォルト: true)
OPENAI_API_KEY: OpenAI APIキーOPENAI_BASE_URL: OpenAI APIベースURL(デフォルト: https://api.openai.com/v1)OPENAI_MODEL: 使用するOpenAIモデル(デフォルト: gpt-4o)
LMSTUDIO_BASE_URL: LM StudioベースURL(デフォルト: localhost:1234)LMSTUDIO_MODEL: 使用するLM Studioモデル
OLLAMA_ENDPOINT: Ollamaエンドポイント(デフォルト: http://localhost:11434)OLLAMA_MODEL: 使用するOllamaモデル
GITHUB_BOT_NAME: GitHubボット名GITLAB_BOT_NAME: GitLabボット名GITLAB_API_URL: GitLab APIURL(デフォルト: https://gitlab.com/api/v4)
GITHUB_MCP_COMMAND: GitHub MCPサーバーコマンド
RABBITMQ_HOST: RabbitMQホストRABBITMQ_PORT: RabbitMQポートRABBITMQ_USER: RabbitMQユーザーRABBITMQ_PASSWORD: RabbitMQパスワードRABBITMQ_QUEUE: RabbitMQキュー名
LOGS: ログファイルパス(デフォルト: logs/agent.log)DEBUG: デバッグモード(true/false、デフォルト: false)
プロジェクトには複数の設定ファイルが用意されています:
- config.yaml: デフォルト設定(Docker環境向け)
- config_github.yaml: GitHub専用設定
- config_gitlab.yaml: GitLab専用設定
# GitHub設定で実行
python main.py --config config_github.yaml
# GitLab設定で実行
python main.py --config config_gitlab.yaml# Conda 環境で実行
conda activate coding-agent
python main.py
# または run.sh を使用
./run.sh# Docker コンテナでビルド・実行
docker-compose up
# または Docker run スクリプトを使用
./run-docker.sh- GitHub/GitLab で Issue または PR/MR を作成
coding agentラベルを付与- エージェントが自動的に検知して処理開始
- タスク検知: ラベル付きの Issue/PR/MR を検索
- ラベル更新:
coding agent→coding agent processing - LLM 処理: システムプロンプトに基づいて自動処理
- MCP ツール実行: 必要に応じて外部ツールを呼び出し
- 完了通知: 処理完了時にラベルを
coding agent doneに更新
classDiagram
class TaskGetter {
<<abstract>>
+get_task_list()
+from_task_key()
}
class Task {
<<abstract>>
+prepare()
+get_prompt()
+comment()
+finish()
}
class MCPToolClient {
+call_tool()
}
TaskGetter <|-- TaskGetterFromGitHub
TaskGetter <|-- TaskGetterFromGitLab
Task <|-- TaskGitHubIssue
Task <|-- TaskGitLabIssue
- main.py: エントリーポイント、全体のオーケストレーション
- handlers/: タスク処理のコアロジック
- clients/: LLM および MCP クライアント
- config.yaml: 設定ファイル
- system_prompt.txt: LLM 用のシステムプロンプト
- 上記のインストール手順を実行
- 開発用設定ファイルを作成
- ログレベルを DEBUG に設定
# ログファイルの確認
tail -f logs/agent.log
# Debug モードでの実行
DEBUG=true python main.py.
├── main.py # メインエントリーポイント
├── config.yaml # 設定ファイル
├── system_prompt.txt # システムプロンプト(通常モード)
├── system_prompt_function_call.txt # システムプロンプト(関数呼び出しモード)
├── system_prompt_planning.txt # システムプロンプト(計画実行モード)
├── condaenv.yaml # Conda 環境定義
├── docker-compose.yml # Docker 構成
├── SETUP.md # セットアップガイド
├── clients/ # LLM・MCP クライアント
│ ├── llm_base.py # LLMクライアント基底クラス
│ ├── openai_client.py # OpenAIクライアント
│ ├── lmstudio_client.py # LM Studioクライアント
│ ├── ollama_client.py # Ollamaクライアント
│ ├── mcp_tool_client.py # MCPツールクライアント
│ ├── github_client.py # GitHubクライアント
│ └── gitlab_client.py # GitLabクライアント
├── handlers/ # タスク処理ハンドラー
│ ├── task.py # タスク基底クラス
│ ├── task_key.py # タスクキークラス
│ ├── task_factory.py # タスクファクトリー
│ ├── task_getter.py # タスク取得基底クラス
│ ├── task_getter_github.py # GitHub用タスク取得
│ ├── task_getter_gitlab.py # GitLab用タスク取得
│ ├── task_handler.py # タスクハンドラー
│ ├── planning_coordinator.py # 計画実行コーディネーター
│ ├── planning_history_store.py # 計画履歴ストア
│ └── project_agent_rules_loader.py # プロジェクトルールローダー
├── context_storage/ # コンテキスト管理
│ ├── task_context_manager.py # タスクコンテキストマネージャー
│ ├── message_store.py # メッセージストア
│ ├── summary_store.py # 要約ストア
│ ├── tool_store.py # ツールストア
│ └── context_compressor.py # コンテキスト圧縮
├── pause_resume_manager.py # 一時停止・再開マネージャー
├── task_stop_manager.py # タスク停止マネージャー
├── comment_detection_manager.py # コメント検知マネージャー
├── queueing.py # タスクキュー管理
├── filelock_util.py # ファイルロックユーティリティ
├── github-mcp-server/ # GitHub MCP サーバー(サブモジュール)
├── user_config_api/ # ユーザー設定管理API
│ ├── server.py # FastAPIサーバー
│ ├── streamlit_app.py # Streamlit管理画面
│ └── ...
├── tests/ # テスト
│ ├── unit/ # ユニットテスト
│ ├── integration/ # 統合テスト
│ └── real_integration/ # 実際の環境でのテスト
└── docs/ # ドキュメント
├── spec_all.md # 仕様書統合ドキュメント
├── spec/ # 仕様ドキュメント
├── external-api/ # 外部API仕様
└── setup/ # セットアップ説明
1. MCP サーバーが起動しない
# GitHub MCP サーバーの再ビルド
cd github-mcp-server/cmd/github-mcp-server
go build -o ../../../github-mcp-server main.go
cd ../../..
# 権限の確認
chmod +x github-mcp-server
# Go のインストール確認
go version2. 認証エラー
# GitHub トークンの確認
echo $GITHUB_TOKEN
# GitLab トークンの確認
echo $GITLAB_TOKEN
# 必要な権限
# GitHub: repo, issues, pull_requests
# GitLab: api, read_api, read_repository, write_repository3. LLM 接続エラー
# OpenAI API キーの確認
echo $OPENAI_API_KEY
# LM Studio の起動確認(LM Studio 使用時)
curl http://localhost:1234/v1/models
# Ollama の起動確認(Ollama 使用時)
curl http://localhost:11434/api/version4. Python 依存関係エラー
# Conda 環境の再作成
conda env remove -n coding-agent
conda env create -f condaenv.yaml
conda activate coding-agent
# 個別パッケージの確認
pip list | grep mcp5. Node.js MCP サーバーエラー
# Node.js パッケージの再インストール
npm install
# GitLab MCP サーバーの確認
npx @zereight/mcp-gitlab --version
# Google Search MCP サーバーの確認
npx @adenot/mcp-google-search --version6. Docker 関連エラー
# Docker コンテナのログ確認
docker-compose logs
# RabbitMQ の状態確認
docker-compose exec rabbitmq rabbitmqctl status
# コンテナの再起動
docker-compose down && docker-compose up --build7. ラベル設定エラー GitHub/GitLab リポジトリに以下のラベルが存在することを確認:
coding agent(初期ラベル)coding agent processing(処理中ラベル)coding agent done(完了ラベル)
8. ログの確認
# ログファイルの確認
tail -f logs/agent.log
# Debug モードでの実行
DEBUG=true python main.py
# 特定コンポーネントのログ
grep "MCP" logs/agent.log
grep "LLM" logs/agent.log- このリポジトリをフォーク
- 機能ブランチを作成 (
git checkout -b feature/amazing-feature) - 変更をコミット (
git commit -m 'Add amazing feature') - ブランチにプッシュ (
git push origin feature/amazing-feature) - Pull Request を作成
Creative Commons Attribution 4.0 International (CC BY 4.0). 詳細は LICENSE を参照してください。
- 仕様書統合ドキュメント - 全機能の概要と仕様へのリンク
- 基本仕様書 - プロジェクトの基本仕様
- クラス設計 - アーキテクチャ詳細
- コンテキストファイル化仕様 - 会話履歴の永続化
- 計画実行モード仕様 - Planning機能の詳細
- 一時停止・再開仕様 - タスクの一時停止と再開
- タスク停止仕様 - アサイン解除による停止
- コメント検知仕様 - 新規コメントの検知
- 継続動作モード仕様 - Docker継続実行
- セットアップガイド - インストールと設定の概要
- 一時停止・再開の使い方 - 一時停止機能の使用方法
- OpenAI API - OpenAI設定詳細
- LM Studio API - LM Studio設定詳細
- Ollama API - Ollama設定詳細
- GitHub MCP Server - GitHub連携
- GitLab MCP Server - GitLab連携
問題や質問がある場合は、GitHub Issues で報告してください。
Planning 履歴の保存場所が統合されました:
変更前:
planning_history/{task_uuid}.jsonl # 独立したディレクトリ
contexts/running/{task_uuid}/ # 会話履歴のみ
変更後:
contexts/running/{task_uuid}/
├── current.jsonl # 会話履歴
├── planning/
│ └── {task_uuid}.jsonl # Planning履歴
└── metadata.json # タスクメタデータ
移行手順:
- 古い
planning_history/ディレクトリは削除可能です config.yamlからplanning.history.directory設定が削除されました- 既存のタスク実行では自動的に新しい構造が使用されます
メリット:
- タスクに関連する全データが1箇所に集約
contexts/completed/への移動時にすべてのデータが一緒に移動- ディレクトリ構造の一貫性向上