AI-native cron task runner for per-project scheduled prompts and commands.
Project description
kage 影 - AI Native Cron Task Runner
English | 日本語
kage is a tool for running scheduled tasks using AI CLIs (codex, claude, gemini, etc.) or standard shell commands, managed on a per-project basis.
Features
- AI Native: Run AI prompts directly from a
cronschedule. - Flexible AI Providers: Built-in support for
codex,claude,gemini, andcopilotwith easy customization. - Inline Overrides: Customize commands, AI models, or parsers (like jq) for each specific task.
- 3-Layer Configuration: Configuration is merged from library defaults, user overrides (~/.kage), and workspace-specific settings (.kage).
- Web UI: Monitor task execution and logs through a sleek browser dashboard.
Installation
The easiest way to install kage is via the interactive installer:
curl -sSL https://raw.githubusercontent.com/igtm/kage/main/install.sh | bash
Or install from PyPI:
pip install kage-ai
Alternatively, install with uv:
uv tool install git+https://github.com/igtm/kage.git
kage onboard
Getting Started
-
Global Setup (First time only):
kage onboardThis initializes
~/.kage/, the database, and the crontab entries. -
Configure AI Engine: Create
~/.kage/config.tomland specify your default engine.default_ai_engine = "codex"
-
Initialize Project: Run this in your project directory.
kage initThis creates
.kage/tasks/sample.toml.
Task Definition Samples
Define tasks in .toml or .md files under .kage/tasks/.
*.toml: existing format (single or multiple tasks per file)*.md: front matter + markdown body, one file = one prompt task only
# Auto-refactor using AI
[task_refactor]
name = "Daily Refactor"
cron = "0 3 * * *"
prompt = "Please clean up the code in src/"
provider = "claude"
# Classification with JSON/JQ parsing
[task_labels]
name = "Ticket Labeling"
cron = "*/30 * * * *"
prompt = "Classify this issue as JSON '{\"label\":\"...\"}': 'Cannot login'"
provider = "codex_json"
parser_args = ".label"
# Standard Shell Command
[task_cleanup]
name = "Log Cleanup"
cron = "0 0 * * 0"
command = "rm -rf ./logs/*.log"
shell = "bash"
---
name: Nightly Research
cron: "0 2 * * *"
provider: codex
---
Collect benchmark updates and summarize differences.
Add comparison points for quality, speed, and cost.
In markdown tasks, the entire body after front matter is treated as the prompt.
Commands
kage onboard: Initialize global settings and OS-level daemon.kage init: Initialize current directory as a kage project.kage daemon install: Register kage to system scheduler (cron/launchd).kage daemon remove: Unregister kage from system scheduler.kage daemon status: Check daemon registration status.kage config <key> <value> [--global]: Update configuration via CLI.kage config-show [--workspace <path>]: Show resolved config (merged defaults/user/workspace), including loadedprovidersandcommands.kage doctor: Check setup health and validate config/task files (unknown keys, type errors, invalid cron, missing front matter, etc).kage ui: Launch web dashboard (default: http://localhost:8484).kage logs: View execution history.kage run: Force run all scheduled tasks (normally executed by cron/launchd).kage task list: List all tasks across all registered projects.kage task show <name>: Show details for one task.kage task run <name>: Run one task immediately.kage project list: List registered projects.kage project remove [path]: Unregister a project.
Release / Publish
# 1) Build package
uv build
# 2) Create release (example: v0.0.1)
gh release create v0.0.1 --title "kage v0.0.1" --generate-notes
# 3) Publish to PyPI (token auth)
TWINE_USERNAME=__token__ \
TWINE_PASSWORD='<pypi-token>' \
uvx twine upload dist/*
Codex Provider Note (Headless / launchd)
When defining a custom codex command template, place global flags before exec:
[commands.codex]
template = ["codex", "--ask-for-approval", "never", "--sandbox", "workspace-write", "exec", "{prompt}"]
codex exec --ask-for-approval ... may fail depending on CLI version.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kage_ai-0.0.9.tar.gz.
File metadata
- Download URL: kage_ai-0.0.9.tar.gz
- Upload date:
- Size: 1.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b64e8d0c9d1744d0f39f354d42f0686f848f85b2bb8187883df41333ac94c639
|
|
| MD5 |
e0fecf800a4959455e6ad4936b92234d
|
|
| BLAKE2b-256 |
67fbeb4ebd274eeb452de796026bb4faa48a61777000b9010db1331e8d313c8c
|
File details
Details for the file kage_ai-0.0.9-py3-none-any.whl.
File metadata
- Download URL: kage_ai-0.0.9-py3-none-any.whl
- Upload date:
- Size: 32.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39002a8bf9a0c2c877f934c18c2a2cffa1393ca5fa3738a3ab96e5c6b00aac99
|
|
| MD5 |
c20d4f1a903118ec395af8f5485c68a7
|
|
| BLAKE2b-256 |
64c5137943f59d06c7ede426ab673e2891df695bcb30e0c9951fe0d89d4021ae
|