{ "id": "codex-quota-footer", "name": "Codex Quota Footer", "description": "Appends a compact Codex usage line (the plan's own rate-limit windows, e.g. 5h/30d %) to the end of each of Adolf's outgoing replies, via the reply_payload_sending hook. Reads the LLM-free adolf-llm:8010/usage route, which drives `codex app-server`'s account/rateLimits/read; cached + background-refreshed so it never blocks the send path.", "activation": { "onStartup": true }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" }, "usageUrl": { "type": "string" }, "cacheTtlMs": { "type": "integer", "minimum": 1000, "maximum": 3600000 }, "fetchTimeoutMs": { "type": "integer", "minimum": 200, "maximum": 30000 }, "prefix": { "type": "string" }, "showPlan": { "type": "boolean" } } }, "uiHints": { "enabled": { "label": "Codex Quota Footer", "help": "Append a compact Codex usage line to the end of each reply." }, "usageUrl": { "label": "Usage URL", "help": "adolf-llm /usage endpoint (default http://adolf-llm:8010/usage)." }, "cacheTtlMs": { "label": "Cache TTL (ms)", "help": "How long a fetched usage snapshot is reused before a background refresh (default 60000)." }, "prefix": { "label": "Footer Prefix", "help": "Text before the percentages (default \"— Codex:\")." }, "showPlan": { "label": "Show Plan Name", "help": "Also show the ChatGPT plan the limits belong to (e.g. \"free\"). Off by default." } } }