Skip to main content

Scheduler for unattended Codex tasks with Telegram notifications

Project description

Yotei

Yotei is a small scheduler for unattended Codex tasks.

Install

uv tool install -U yotei-runner

Yotei expects the codex CLI to already be installed and authenticated on the machine where scheduled runs execute. The scheduler invokes the configured Codex binary directly and does not manage Codex login state for you.

The published package name is yotei-runner. The installed command remains yotei.

Quick Start

Initialize a user-level config file:

yotei config init

Schedule a task in the current directory:

yotei schedule \
  --task repo-review \
  --when "weekdays 09:30" \
  --prompt "Review the latest repository changes."

Run one scheduler pass:

yotei run --once

Inspect current tasks:

yotei status

Config Discovery And Paths

Config discovery order is:

  1. --config <path>
  2. YOTEI_CONFIG
  3. SCHEDULED_AGENT_RUNNER_CONFIG
  4. .automation/yotei/config.toml in the current directory or a parent
  5. .automation/scheduled-agent-runner/config.toml in the current directory or a parent
  6. ${XDG_CONFIG_HOME:-~/.config}/yotei/config.toml

By default, yotei config init writes:

  • config: ${XDG_CONFIG_HOME:-~/.config}/yotei/config.toml
  • state DB: ${XDG_STATE_HOME:-~/.local/state}/yotei/state.sqlite3
  • logs: ${XDG_STATE_HOME:-~/.local/state}/yotei/logs/

Yotei uses the same XDG-style defaults on Linux and macOS when the XDG variables are unset. That keeps installs portable and predictable across machines.

Workspace Semantics

Each task stores its own absolute workspace_root.

  • yotei schedule defaults --workspace to the current directory
  • yotei schedule --workspace <path> stores an explicit workspace
  • yotei edit --workspace <path> repairs or changes a task workspace later
  • yotei status shows each task's stored workspace
  • yotei run executes Codex with that persisted workspace as cwd

If a stored workspace no longer exists on a machine, Yotei fails that run cleanly and tells you to repair it with yotei edit --workspace.

Scheduler Ownership

Yotei's first portable release expects one active scheduler process per state database. Do not run multiple long-lived yotei run processes against the same state.sqlite3; the current baseline documents this ownership contract instead of using cross-platform lock files or database leases.

Use yotei run for the normal long-running scheduler. It polls for due tasks, runs them from each task's persisted workspace, writes run logs, and keeps polling until interrupted.

Use yotei run --once for tests, smoke checks, service hooks, or manual maintenance. It performs one scheduler pass, including due tasks and at most one queued run, then exits. The same single-runner policy applies while that pass is running.

Telegram

Telegram notifications are optional. Set telegram.bot_token and telegram.chat_id, then keep notifications.send_on_start, send_on_success, and send_on_failure enabled only for the events you want.

Use a literal token or an environment reference such as:

[telegram]
bot_token = "env:TG_BOT_TOKEN"
chat_id = "env:TG_CHAT_ID"

yotei schedule --chat-id <id> overrides telegram.chat_id for one task.

Notification delivery failures do not fail Codex runs. Yotei records concise notification errors in run metadata and scheduler logs without writing the bot token back into summaries or logs.

Schedule Grammar

yotei schedule --when and yotei edit --when accept these forms:

  • in <int>m, in <int>h, once in <int>m, once in <int>h
  • every <int>m, every <int>h
  • daily H:MM, weekdays H:MM
  • <day-list> H:MM, where days are mon,tue,wed,thu,fri,sat,sun
  • cron "<minute> <hour> <day-of-month> <month> <day-of-week>"

Clock times must use 24-hour H:MM or HH:MM form. Cron expressions use five numeric fields. Supported cron field syntax is *, comma lists, ranges, and slash steps. Names, ?, L, W, #, wraparound ranges, and advanced cron semantics are not supported. Day-of-month and day-of-week both have to match.

Backup And Restore

Back up these paths together:

  • ${XDG_CONFIG_HOME:-~/.config}/yotei/config.toml
  • ${XDG_STATE_HOME:-~/.local/state}/yotei/state.sqlite3
  • ${XDG_STATE_HOME:-~/.local/state}/yotei/logs/

To restore on another machine:

  1. Install yotei-runner and make sure the target machine has a working codex CLI.
  2. Restore the config file, state DB, and logs into the same XDG locations or pass --config explicitly.
  3. Run yotei status and repair any task whose stored workspace path is no longer valid on the new machine with yotei edit --workspace.
  4. Start the scheduler with yotei run or test one pass with yotei run --once.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yotei_runner-0.1.2.tar.gz (32.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yotei_runner-0.1.2-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file yotei_runner-0.1.2.tar.gz.

File metadata

  • Download URL: yotei_runner-0.1.2.tar.gz
  • Upload date:
  • Size: 32.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for yotei_runner-0.1.2.tar.gz
Algorithm Hash digest
SHA256 1d7167091306861d30006ba651c40870abca18047d94110b2a3e63543c2ab37f
MD5 4c06155475dbac38e2193578f12d1a73
BLAKE2b-256 0c9c00c5b8da3a6434f0a314cc92b0d7d66312558cb05827eded430d802c3c93

See more details on using hashes here.

Provenance

The following attestation bundles were made for yotei_runner-0.1.2.tar.gz:

Publisher: publish.yml on massun-onibakuchi/yotei

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file yotei_runner-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: yotei_runner-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 20.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for yotei_runner-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 3d05d64a97d4acc46927f9ac03506710eef2d770e9bad92da45d8a3f6bb7d56c
MD5 e0ba66f138fb702288eab6d2132d79ba
BLAKE2b-256 90430c88e6008cbb5db0c024c8329c8216e450a70a3056dc2e57a42383a0e88b

See more details on using hashes here.

Provenance

The following attestation bundles were made for yotei_runner-0.1.2-py3-none-any.whl:

Publisher: publish.yml on massun-onibakuchi/yotei

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page