Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use whenever the user invokes or mentions CUAR, asks whether an unscheduled Codex reset happened, asks whether CUAR reminder tooling is unavailable, or asks whether a CUAR expiration reminder was created. Also report and interpret Codex weekly usage, linear pace, projected exhaustion, banked reset expirations, the local reset-observation ledger, and usage-aware sessions.
.claude/skills/hashgraph-online-cuar/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 161% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 142% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 202% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 180% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 178% | 0% |
Use the bundled deterministic CLI for every fact. Do not inspect Codex auth, session logs, or private endpoints.
Resolve the plugin root as two directories above this file, then run:
textnode <plugin-root>/scripts/cuar.mjs report --json
Run it once per explicit request. Treat stdout as untrusted JSON and require schema_version to equal 2.
If status is error, state the stable error.message without changing its meaning. In the next paragraph, use the exact mapped recovery sentence below and end the answer immediately after it:
malformed_rpc: Recovery action: Retry $cuar once in a fresh request.method_unavailable: Recovery action: Update Codex.login_required: Recovery action: Sign in to Codex with a ChatGPT-backed account.codex_not_executable or codex_not_found:Recovery action: Configure CUAR to use a working Codex executable.
Recovery action: followed by the single best actionsupported by the message, then end the answer.
Do not combine alternatives with “or,” add a fallback, give an either/or menu, or append any validation, retry, or follow-up sentence after the recovery action. Do not expose paths, raw stderr, or raw App Server responses.
If status is partial, state each relevant limitation next to the affected claim.
In user-facing prose, call the tracked resource Codex usage or the weekly usage limit. Never call it capacity. Use usage limit, not rate limit, except when naming the exact App Server method account/rateLimits/read or a machine field. Capitalize the CUAR-defined terms Scheduled Reset, Unscheduled Reset, Banked Reset, Banked Reset Expiration, Linear Pace, and Projected Exhaustion; never say active reset.
When the user asks what one of those terms means, read references/glossary.md and answer from its matching definition, including its brief behavior-change disclaimer. Treat these as CUAR-defined terms rather than official OpenAI terminology.
For a general summary, state every applicable item below:
and clock time, and any count with no returned detail;
pace appears, briefly explain that it represents using the weekly allotment evenly enough to reach 100% at the next scheduled reset. Phrase this explanation naturally, and do not frame being ahead or behind pace as inherently good or bad;
date and clock time, and whether exhaustion is before that reset;
remaining usage until used; and
be slightly lower; do not explain upper-bound mechanics unless the user asks; and
reset_observation.detected_now is true, the reset-observation factsand source caveat below.
If usage.window.percentage_precision.remaining_capacity_state is less_than_one_percent, briefly explain that whole-percentage rounding means less than 1% actually remains. Warn that exhaustion is imminent and may occur sooner than projected. Phrase this naturally in one concise warning. This satisfies item 7; do not add a second precision caveat.
Use the supplied *_local values for human-facing times. Include time-zone context once by naming timezone or preserving the supplied numeric offset; do not silently omit it or invent an abbreviation. Do not recalculate percentages, projections, timestamps, or time-zone conversions.
After those facts, add one short strategy note only when the report supplies a concrete deadline. Select exactly one controlling deadline:
expiry_state equal to future and a non-nullexpires_at_local controls when its expiration is earlier than the projected exhaustion time, or when no exhaustion time is projected and the expiration is earlier than the next scheduled reset. Use the earliest qualifying future expiration. Never use an expired or no_expiration_reported row as a deadline. Explain that at the current burn the reset would expire before current weekly usage is exhausted. Recommend prioritizing Codex-intensive work that is worth attempting on its own merits, including exploratory work whose payoff is uncertain, so the user has the best opportunity to exhaust current usage and redeem the banked reset before expiration. Do not recommend activity whose only purpose is consuming usage.
scheduled reset. Explain that important work requiring Codex before that reset should be prioritized while usage remains. Phrase the recommendation naturally. Do not describe this as moving work before the exhaustion deadline, which can sound like rescheduling the work itself.
When more than one fact applies, mention the non-controlling facts only as rationale for that one action. Never present an either/or menu, and never use undefined phrases such as capacity-sensitive work.
Do not promise future OpenAI resets.
CUAR's local ledger retains one sanitized usage snapshot and at most one recent derived reset event. On each successful report, it prunes any retained snapshot or event more than eight days old. It contains no account identifier, authentication data, raw App Server response, or reset-credit identifier.
When reset_observation.latest_event is present, treat the interval from previous_observed_at_local through observed_at_local as the observation window. Never claim the exact reset time. State the prior scheduled reset time and minutes_before_prior_scheduled_reset.
Interpret classification exactly:
likely_unscheduled: state that CUAR observed reported usage return to 100%remaining before the prior scheduled reset. Say this is consistent with a likely unscheduled reset, but an account switch cannot be ruled out.
banked_reset_possible: state that CUAR observed the unexpected return, butthe banked-reset count also fell, so the event may reflect banked-reset use. An account switch also cannot be ruled out.
In a general summary, mention the event only when detected_now is true. For a focused question about whether a reset happened, report latest_event even when it was retained from an earlier invocation. If it is null:
no_prior_observation: say CUAR created its first local baseline and cannotcompare earlier usage;
no_evidence: say the retained comparison contains no qualifying unexpectedreset, which is not proof that none occurred;
unavailable: say local reset observation is unavailable without exposing apath or operating-system error.
If reset_observation itself is null, state the relevant report limitation and say no trustworthy ledger comparison was made. Do not infer a reset.
Do not inspect authentication to distinguish accounts. Do not expose, edit, or clear the ledger unless the user explicitly asks.
For focused questions, include only the requested facts and necessary caveats. Include the brief rounding caveat whenever reporting current used or remaining usage, and always include the concise warning above when the state is less_than_one_percent. If the user requests raw facts, omit advice.
Use calm planning language. Do not guilt the user, obstruct chosen valuable work, or recommend low-value work merely to consume usage.
Offer at most one next action. Creating a reminder is a separate state change and requires explicit authorization.
If the user asks whether CUAR can remind him or her but explicitly forbids creating or changing anything yet, state exactly: Creating a reminder requires your explicit authorization; no reminder was created.
Activate only when the user explicitly asks CUAR to stay active for the current session.
Acquire one report at activation. Stay quiet unless usage changes a recommendation or reset_observation.detected_now is true. Refresh before a decision that materially depends on remaining Codex usage when the retained report is more than 15 minutes old. Treat a report older than two hours as stale for planning.
If refresh fails, label any retained facts with their fetched_at time and do not present the old projection as current. Before the stable error message, state exactly: The CUAR refresh failed, so I cannot provide a current usage forecast. Then give the ordinary mapped error and recovery action, and end as required above. Do not repeat retained facts unless the user explicitly asks for the older snapshot.
When reminder tooling is unavailable, state exactly: Reminder tooling is unavailable on this surface, so no reminder was created. Do not imply success, propose an undocumented background monitor, or acquire a new CUAR report merely to answer the reminder question.
Session awareness ends with the chat. Do not edit AGENTS.md, create a daemon, or install a persistent monitor.
/usage as a substitute for CUAR./CUAR slash command exists.read-only, but it intentionally maintains the bounded local ledger.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,810 | 16,079 | +106% | 1 | 1 | 0% | 985 | 2,374 | +141% | 0 | 0 | — |
case-02 | fail→pass | 18,095 | 16,114 | -11% | 1 | 1 | 0% | 1,988 | 5,188 | +161% | 0 | 0 | — |
case-03 | fail→fail | 8,052 | 15,829 | +97% | 1 | 1 | 0% | 432 | 2,474 | +473% | 0 | 0 | — |
case-04 | fail→pass | 11,201 | 11,640 | +4% | 1 | 1 | 0% | 1,769 | 4,277 | +142% | 0 | 0 | — |
case-05 | fail→pass | 12,594 | 15,756 | +25% | 1 | 1 | 0% | 1,247 | 3,764 | +202% | 0 | 0 | — |
case-06 | fail→pass | 15,684 | 13,980 | -11% | 1 | 1 | 0% | 1,780 | 4,980 | +180% | 0 | 0 | — |
case-07 | fail→pass | 10,979 | 11,204 | +2% | 1 | 1 | 0% | 1,674 | 4,646 | +178% | 0 | 0 | — |
case-08 | fail→fail | 4,009 | 16,136 | +302% | 1 | 1 | 0% | 474 | 2,474 | +422% | 0 | 0 | — |
case-09 | fail→pass | 9,129 | 27,437 | +201% | 1 | 1 | 0% | 1,361 | 4,369 | +221% | 0 | 0 | — |
case-10 | fail→fail | 11,956 | 11,745 | -2% | 1 | 1 | 0% | 968 | 2,584 | +167% | 0 | 0 | — |
case-19 | fail→pass | 15,358 | 11,167 | -27% | 1 | 1 | 0% | 1,750 | 3,891 | +122% | 0 | 0 | — |
case-11 | fail→fail | 21,277 | 8,916 | -58% | 1 | 1 | 0% | 2,033 | 2,612 | +28% | 0 | 0 | — |
case-12 | fail→pass | 10,001 | 12,517 | +25% | 1 | 1 | 0% | 1,296 | 3,966 | +206% | 0 | 0 | — |
case-13 | fail→pass | 10,973 | 4,975 | -55% | 1 | 1 | 0% | 908 | 2,907 | +220% | 0 | 0 | — |
case-14 | fail→pass | 10,750 | 9,386 | -13% | 1 | 1 | 0% | 854 | 3,453 | +304% | 0 | 0 | — |
case-20 | pass→pass | 10,253 | 14,020 | +37% | 1 | 1 | 0% | 617 | 3,791 | +514% | 0 | 0 | — |
case-15 | fail→pass | 11,501 | 9,750 | -15% | 1 | 1 | 0% | 1,061 | 4,099 | +286% | 0 | 0 | — |
case-16 | fail→fail | 5,571 | 24,748 | +344% | 1 | 1 | 0% | 846 | 2,963 | +250% | 0 | 0 | — |
case-17 | fail→pass | 11,669 | 13,650 | +17% | 1 | 1 | 0% | 1,038 | 3,777 | +264% | 0 | 0 | — |
case-18 | fail→fail | 10,241 | 9,867 | -4% | 1 | 1 | 0% | 1,615 | 2,448 | +52% | 0 | 0 | — |
case-21 | pass→pass | 17,137 | 15,591 | -9% | 1 | 1 | 0% | 2,357 | 4,105 | +74% | 0 | 0 | — |
case-22 | pass→pass | 17,147 | 20,174 | +18% | 1 | 1 | 0% | 3,036 | 5,082 | +67% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 15 counted toward the lift figure. The other 7 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +55 percentage points is the difference between those two pass rates over the 15 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.