Simple local job manager with Web UI
日本語 | English
ローカルで動作するシンプルなジョブ管理ツール。Web UI からジョブの作成・スケジュール実行・ログ閲覧ができます。
| Dashboard | Job Detail |
![]() |
![]() |
| Job Form (with cron editor) | Execution Log |
![]() |
![]() |
| Feature | Description |
|---|---|
| Cron / One-time / Manual | cron 式による定期実行、日時指定の一回実行、手動実行 |
| Shell & Python | シェルコマンドまたは Python スクリプトを実行 |
| Workflows | 複数ジョブを DAG で連結し、成功/失敗条件で分岐実行 |
| AI Assistant | ジョブ作成画面で Claude / Gemini CLI によるスクリプト生成支援 |
| Environment Variables | グローバル・ジョブ別・ワークフローノード別の環境変数。チェーン実行時は親ジョブの結果を自動注入 |
| Execution Logs | stdout / stderr を保存し、Web UI から閲覧。自動ローテーション対応 |
| Job Timeout | ジョブごとにタイムアウトを設定可能。暴走プロセスを防止 |
| REST API | ジョブ・ワークフロー・実行履歴・設定の JSON API(トークン認証付き) |
| CLI Client | mogiricli コマンドでターミナル / Claude Code からジョブ管理 |
| Security | CSRF 保護、API トークン認証、パスワードログイン対応 |
| Sample Scripts | Slack 通知、DB バックアップ、ヘルスチェック等のサンプル集 |
# インストール
pip install -e .
# 設定ファイルの生成(オプション)
mogiri init
# サーバー起動
mogiri serveブラウザで http://127.0.0.1:8899 にアクセスしてください。
# オプション
mogiri serve --host 0.0.0.0 --port 9000 --debug
mogiri serve --config /path/to/config.yamlWarning:
--host 0.0.0.0はすべてのネットワークインターフェースにバインドします。mogiri はシェルコマンドを実行できるため、信頼できないネットワークでは使用しないでください。詳細は SECURITY.md を参照してください。
mogiri サーバーの REST API をラップした CLI ツールです。ターミナルや Claude Code からジョブ・ワークフローを操作できます。
# サーバー URL の設定(デフォルト: http://127.0.0.1:8899)
export MOGIRI_URL=http://127.0.0.1:8899mogiricli jobs list # 一覧
mogiricli jobs get <id> # 詳細
mogiricli jobs create --name "Backup" \
--command "pg_dump mydb" \
--command-type shell # 作成
mogiricli jobs update <id> --name "New Name" # 更新
mogiricli jobs delete <id> --yes # 削除
mogiricli jobs run <id> # 即時実行mogiricli workflows list # 一覧
mogiricli workflows create --name "My Flow" # 作成
mogiricli workflows run <id> # 実行
mogiricli workflows delete <id> --yes # 削除mogiricli executions list --limit 10 # 直近の実行一覧
mogiricli executions list --job-id <id> # ジョブでフィルタ
mogiricli executions get <execution-id> # 詳細 (stdout/stderr)mogiricli settings get ai_provider # 取得
mogiricli settings set ai_provider gemini # 更新--json フラグで JSON 出力に切り替え。スクリプトや Claude Code との連携に便利です。
mogiricli --json jobs list
mogiricli --json executions get <id>mogiricli が内部で使用している JSON API です。直接 curl 等でも利用できます。
API エンドポイント一覧
| Method | Path | Description |
|---|---|---|
GET |
/api/jobs |
ジョブ一覧 |
GET |
/api/jobs/<id> |
ジョブ詳細 |
POST |
/api/jobs |
ジョブ作成 |
PATCH |
/api/jobs/<id> |
ジョブ更新 |
DELETE |
/api/jobs/<id> |
ジョブ削除 |
POST |
/api/jobs/<id>/run |
ジョブ即時実行 |
GET |
/api/workflows |
ワークフロー一覧 |
GET |
/api/workflows/<id> |
ワークフロー詳細 |
POST |
/api/workflows |
ワークフロー作成 |
PATCH |
/api/workflows/<id> |
ワークフロー更新 |
DELETE |
/api/workflows/<id> |
ワークフロー削除 |
POST |
/api/workflows/<id>/run |
ワークフロー実行 |
GET |
/api/executions |
実行履歴 (?job_id=, ?workflow_id=, ?limit=) |
GET |
/api/executions/<id> |
実行詳細 (stdout/stderr) |
GET |
/api/settings/<key> |
設定取得 |
PUT |
/api/settings/<key> |
設定更新 |
curl の使用例
# ジョブ作成
curl -s -X POST http://127.0.0.1:8899/api/jobs \
-H 'Content-Type: application/json' \
-d '{"name": "Hello", "command": "echo hello", "schedule_type": "none"}'
# ジョブ実行
curl -s -X POST http://127.0.0.1:8899/api/jobs/<id>/run
# 実行結果の確認
curl -s http://127.0.0.1:8899/api/executions?job_id=<id>&limit=1samples/ ディレクトリにジョブ作成に使えるサンプルスクリプトを用意しています。AI Chat でもサンプルを参照してスクリプト生成します。
| Script | Description |
|---|---|
slack_thread_post.py |
Slack スレッド投稿 |
pushover_notify.py |
Pushover プッシュ通知 |
db_backup.py |
PostgreSQL / MySQL バックアップ |
http_health_check.py |
HTTP ヘルスチェック |
disk_usage_alert.sh |
ディスク使用量監視 |
ai_summarize.sh |
Claude CLI で前段ジョブの出力を要約 |
ai_log_analyzer.py |
Claude CLI でログファイルを分析 |
claude_usage_check.py |
Claude Code の使用量/レート制限チェック |
詳細は samples/README.md を参照してください。
ジョブ実行時に mogiri が自動的にセットする環境変数です。
同じキーが複数レベルで定義されている場合、以下の順で上書きされます(下が優先):
- OS 環境変数(
os.environ) - グローバル環境変数(Settings 画面)
- ジョブ固有の環境変数(Job 編集画面)
- ワークフローノード固有の環境変数(Workflow エディタ)
| 変数 | 説明 |
|---|---|
MOGIRI_OUTPUT |
出力ファイルのパス。ここに書き込んだ内容が、Workflow の次のジョブに MOGIRI_PARENT_OUTPUT として渡される |
| 変数 | 説明 |
|---|---|
MOGIRI_PARENT_OUTPUT |
親ジョブが MOGIRI_OUTPUT に書き込んだ内容 |
MOGIRI_PARENT_JOB_NAME |
親ジョブの名前 |
MOGIRI_PARENT_STATUS |
親ジョブの終了ステータス (success / failed / timeout) |
MOGIRI_PARENT_EXIT_CODE |
親ジョブの終了コード |
MOGIRI_PARENT_STDOUT |
親ジョブの stdout(末尾 4000 文字) |
MOGIRI_PARENT_STDERR |
親ジョブの stderr(末尾 4000 文字) |
MOGIRI_PARENT_EXECUTION_ID |
親ジョブの Execution ID |
# ジョブ A(親)
echo "backup completed: /tmp/backup_20240418.sql" >> $MOGIRI_OUTPUT
# ジョブ B(子) — 親の出力を利用
echo "Parent output: $MOGIRI_PARENT_OUTPUT"# ジョブ A(親・Python)
import os
with open(os.environ["MOGIRI_OUTPUT"], "a") as f:
f.write("processed 1234 records\n")
# ジョブ B(子・Python)
import os
parent_output = os.environ.get("MOGIRI_PARENT_OUTPUT", "")
print(f"Parent said: {parent_output}")mogiri init で ~/.mogiri/config.yaml にサンプルが生成されます。
server:
host: "127.0.0.1"
port: 8899
log:
retention_days: 30 # 0 = keep forever
max_per_job: 100 # 0 = unlimited
auth:
enabled: true # API トークン認証 (false で無効化)
password: "" # Web UI パスワード (--host 0.0.0.0 には必須)| 環境変数 | 説明 |
|---|---|
MOGIRI_DATA_DIR |
データディレクトリ (default: ~/.mogiri) |
MOGIRI_LOG_RETENTION_DAYS |
ログ保持日数 |
MOGIRI_LOG_MAX_PER_JOB |
ジョブごとの最大保持件数 |
MOGIRI_PASSWORD |
Web UI パスワード (config.yaml より優先) |
MOGIRI_SECRET_KEY |
Flask セッション署名キー |
設定の優先順位: デフォルト値 < YAML < 環境変数 < CLI フラグ
| 式 | 意味 |
|---|---|
* * * * * |
毎分 |
*/5 * * * * |
5分ごと |
0 * * * * |
毎時0分 |
0 0 * * * |
毎日0時 |
0 0 * * 0 |
毎週日曜0時 |
0 0 1 * * |
毎月1日0時 |
Linux (Ubuntu等) で OS 起動時に mogiri を自動起動するには、systemd のユーザーサービスを使います。
mkdir -p ~/.config/systemd/user
cp docs/mogiri.service ~/.config/systemd/user/mogiri.serviceunit ファイルの ExecStart に mogiri コマンドのフルパスを設定してください。
# pyenv の場合
pyenv which mogiri
# 例: /home/youruser/.pyenv/versions/mogiri/bin/mogiri
# pip でインストールした場合
which mogiri出力されたパスが ExecStart と異なる場合は修正してください。
Note: systemd はシェルの
~/.bashrc等を読まないため、ジョブからclaudeやnode等のコマンドを使う場合は unit ファイルにEnvironment=PATH=...を追加してください。現在の PATH はecho $PATHで確認できます。Environment=PATH=/home/youruser/.nvm/versions/node/v22.20.0/bin:/home/youruser/.pyenv/versions/mogiri/bin:/usr/local/bin:/usr/bin:/bin
# systemd にファイルを認識させる
systemctl --user daemon-reload
# 起動
systemctl --user start mogiri
# 状態確認
systemctl --user status mogiri
# OS 起動時の自動起動を有効化
systemctl --user enable mogiriデフォルトではユーザーがログインしている間のみサービスが動作します。 SSH やデスクトップにログインしていなくても起動させるには linger を有効にしてください。
sudo loginctl enable-linger $(whoami)Warning: systemd サービスで
--host 0.0.0.0を設定する場合、サーバーがすべてのネットワークインターフェースに公開されます。ファイアウォールや VPN 等のネットワーク制御を適切に設定してください。詳細は SECURITY.md を参照。
# リアルタイムでログを表示
journalctl --user -u mogiri -f
# 最近のログを表示
journalctl --user -u mogiri --since "1 hour ago"systemctl --user stop mogiri # 停止
systemctl --user disable mogiri # 自動起動を無効化# 開発用依存もインストール
pip install -e ".[dev]"
# テスト実行
pytest tests/ -v
# Lint
ruff check src/ tests/# モデル変更後にマイグレーションファイルを生成
FLASK_APP=mogiri.app flask db migrate -m "add new column"
# マイグレーションを適用
FLASK_APP=mogiri.app flask db upgrademogiri serve 起動時に未適用のマイグレーションは自動で適用されます。
すべてのデータは ~/.mogiri/ に保存されます:
mogiri.db-- SQLite データベース (ジョブ定義・実行履歴)config.yaml-- 設定ファイル
MIT




