Skip to main content

awewarm: Subscription Window Warmer

Keep AI coding-plan windows warm with one minimal request.

Connect once; awewarm detects what your Claude Code / Codex account or subscription endpoint can do, then makes sure the next usage window is always already open.

English · 简体中文

Version Python

Status pip install Platform

Connect once, then never think about 5-hour resets again: awewarm detects what it can do and only then keeps the next window open.

awewarm manages two kinds of connections:

  • Account — your local claude / codex CLI logins. awewarm reuses their login state and sends one minimal headless request (Reply with exactly: ok). No credentials are stored.
  • Subscription plan — any OpenAI Chat / OpenAI Responses / Anthropic-compatible endpoint with a base URL + token. The token goes to the macOS Keychain, never to disk.

It schedules those requests in three modes — fixed (absolute times, e.g. 06:35 / 11:40 / 16:45), interval (renew 5 h + a grace margin after each success), and hybrid (fixed anchor + interval renewal, the recommended default). Interval mode stays locked until the window semantics are verified or user-confirmed; fixed mode is always safe.

Install

Requires Python ≥ 3.9. Until the first PyPI release, install from source:

git clone <repo-url> && cd awewarm
pip install .

Quick Start

awewarm init        # scan local accounts, pick a schedule, install the scheduler
awewarm status      # see what will happen next

For a subscription endpoint instead:

awewarm add plan

You will be asked for the API base URL, token, protocol, and model; awewarm tests the endpoint with one minimal request, then stores the token in the Keychain.

Config

Users never hand-edit config; init / add plan generate it at ~/.config/awewarm/config.json (state at ~/.local/state/awewarm/state.json). The shape, for reference:

{
  "version": 1,
  "connections": {
    "claude-code": {
      "kind": "account",
      "enabled": true,
      "transport": {"kind": "claude-cli", "cliCommand": "claude"},
      "window": {"status": "verified", "durationMinutes": 300},
      "schedule": {
        "mode": "hybrid",
        "fixed": {"at": ["06:35"], "days": "weekday", "catchUpWindowMinutes": 45},
        "interval": {"graceSeconds": 75, "jitterSeconds": 30}
      }
    }
  }
}

Commands

awewarm init                     # interactive onboarding
awewarm discover                 # read-only scan of local CLIs and logins
awewarm add plan                 # add a subscription endpoint
awewarm status                   # human-readable summary
awewarm run [--dry-run]          # one scheduler tick (launchd calls this)
awewarm activate <id> --confirm  # send one real request now
awewarm verify <id> [--confirm] [--duration N --user-confirm]
awewarm enable <id> [--mode fixed|interval|hybrid]
awewarm times <id> [HH:MM...]  # show or set fixed times, e.g. 06:35 11:40 16:45
awewarm disable <id>
awewarm remove <id>
awewarm install / uninstall      # launchd scheduler agent (macOS)
awewarm inspect [<id>] [--json]  # redacted capability dump

Development

pip install -e .
python3 -m unittest discover -s tests

See docs/CONTRIBUTING.md for the engineering doctrine and docs/CHANGELOG.md for release history.

Download files

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

Source Distribution

awewarm-0.1.5.tar.gz (45.6 kB view details)

Uploaded Source

Built Distribution

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

awewarm-0.1.5-py3-none-any.whl (29.4 kB view details)

Uploaded Python 3

File details

Details for the file awewarm-0.1.5.tar.gz.

File metadata

  • Download URL: awewarm-0.1.5.tar.gz
  • Upload date:
  • Size: 45.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.15

File hashes

Hashes for awewarm-0.1.5.tar.gz
Algorithm Hash digest
SHA256 52d8f10833fe5cc1128f4f7d4845e29e534cdc6270ea6a724259426488fcad4a
MD5 94264a67d0bec061a62ffd0f30679bae
BLAKE2b-256 6abc0cd3c068a54fe2aab704294eee3ac39605a12591bf86444e028192b5d251

See more details on using hashes here.

File details

Details for the file awewarm-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: awewarm-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 29.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.15

File hashes

Hashes for awewarm-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 1899088c709dc7375a14c754fd150246e1672c6aa538fddd84c31e5617c28b44
MD5 843fb96f54a43fe44df1ce1152c25f7d
BLAKE2b-256 fe77c0abc45cf080c1dd1853ff8822d17dc0996232b66355f66cf24d2710e021

See more details on using hashes here.

Supported by

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