agentsclimarketplace

Token budget

Skill Tibsfox/gsd-skill-creator/project-claude/skills/token-budget

Token budget tracking and enforcement for Gastown convoy-level execution. Hard limits with pre-execution checking, per-convoy and per-agent tracking, structured stop reasons.From its SKILL.md

Install
npx -y skills add Tibsfox/gsd-skill-creator --skill token-budget

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

6.4 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

Token Budget Enforcement

Pre-execution budget gating for multi-agent convoy execution. Prevents token overspend by checking budgets BEFORE API calls, not after. Identified by the 12 Primitives analysis (Primitive 5) as the #1 actionable improvement.

Activation

This skill activates when:

  • A convoy execution starts (mayor creates a convoy)
  • Agents are spawned within a convoy
  • Any agent is about to make an API call during convoy execution
  • Budget reporting is requested during or after execution

Architecture

Budget Hierarchy

Convoy Budget (hard limit, default 500K tokens)
  |
  +-- Agent A budget (hard limit, default 100K tokens)
  +-- Agent B budget (hard limit, default 100K tokens)
  +-- Agent C budget (hard limit, default 100K tokens)

The convoy budget is the aggregate ceiling. Individual agent budgets prevent any single polecat from consuming a disproportionate share.

Check-Before-Execute Pattern

Every API call in a convoy MUST follow this sequence:

  1. Estimate the projected token cost for the call
  2. Check checkBudget(budget, agentId, projectedCost) — returns BudgetCheckResult
  3. If allowed: false — stop immediately, do NOT make the API call
  4. If reason: 'warning_threshold' — proceed but log the warning
  5. If reason: 'ok' — proceed normally
  6. After execution — recordUsage(budget, agentId, actualInput, actualOutput)
  7. Persist — saveBudget(budget, budgetDir) to survive crashes

Structured Stop Reasons

ReasonMeaningAction
okUnder budget, no concernsProceed
warning_thresholdPast warning % but under hard limitProceed, log warning
convoy_budget_exceededConvoy would exceed hard limitSTOP, do not call API
agent_budget_exceededAgent would exceed its limitSTOP, do not call API

Core API

Types

interface TokenBudget {
  convoyId: string;
  maxTokensPerConvoy: number;      // Hard limit for entire convoy
  maxTokensPerAgent: number;       // Hard limit per polecat
  warningThresholdPercent: number;  // Warn at this % (e.g., 80)
  currentUsage: BudgetUsage;
  createdAt: string;               // ISO 8601
  updatedAt: string;               // ISO 8601
}

interface BudgetCheckResult {
  allowed: boolean;
  reason: 'ok' | 'warning_threshold' | 'convoy_budget_exceeded' | 'agent_budget_exceeded';
  remainingTokens: number;
  usagePercent: number;
}

Functions

FunctionSignatureDescription
createBudget(convoyId, config?) => TokenBudgetInitialize a budget for a convoy
checkBudget(budget, agentId, projectedCost) => BudgetCheckResultPre-execution gate check
recordUsage(budget, agentId, input, output) => voidTrack actual usage after execution
getBudgetReport(budget) => BudgetReportSummary for logging/display
saveBudget(budget, budgetDir) => Promise<void>Persist to .chipset/state/budgets/
loadBudget(convoyId, budgetDir) => Promise<TokenBudget | null>Load from disk
deleteBudget(convoyId, budgetDir) => Promise<void>Remove budget file
listBudgets(budgetDir) => Promise<string[]>List all persisted convoy budget IDs

Default Values

ParameterDefaultRecalibration note
maxTokensPerConvoy500,000 tokensWas set conservatively pre-INLINE-SERIAL pattern. v1.49.621 actuals: ~50-300K per convoy under inline-serial Opus/Sonnet authoring (~10-15% of this default). Default retained for safety margin; missions may explicitly cap lower based on convoy shape.
maxTokensPerAgent100,000 tokensPre-recursive-spawn-block default; with INLINE SERIAL the agent IS the convoy, so per-agent ≈ per-convoy.
warningThresholdPercent80%Unchanged.

v1.49.621 retrospective lesson 3 — projection recalibration: Wave 1+2+3+4 fleet token spend came in at ~26% of projected ceiling under INLINE SERIAL authoring. Future missions should project Opus convoys at ~75-300K and Sonnet convoys at ~30-150K based on output volume × ~1.5K tokens/100-line-of-output heuristic. Reserve 3-5× headroom over the projection for safety; do not 10× as this skill historically did.

State Persistence

Path: .chipset/state/budgets/{convoyId}.json

Follows the same durability contract as beads-state:

  • Atomic writes (write temp -> fsync -> rename)
  • JSON with sorted keys for git-friendly diffs
  • Filesystem-only, no database dependencies
  • Crash-recoverable (partial writes leave only temp files)

Integration Points

Mayor Coordinator

When the mayor creates a convoy, it should also create a token budget:

const convoy = await stateManager.createConvoy('Sprint 1', beadIds);
const budget = createBudget(convoy.id, {
  maxTokensPerConvoy: 500_000,
  maxTokensPerAgent: 100_000,
});
await saveBudget(budget, '.chipset/state/budgets');

Polecat Worker

Before each API call in GUPP autonomous mode:

const budget = await loadBudget(convoyId, '.chipset/state/budgets');
const check = checkBudget(budget!, agentId, estimatedTokens);
if (!check.allowed) {
  // Structured stop — include reason in termination message
  return { stopped: true, reason: check.reason, remaining: check.remainingTokens };
}
// ... make API call ...
recordUsage(budget!, agentId, actualInput, actualOutput);
await saveBudget(budget!, '.chipset/state/budgets');

Witness Observer

The witness can periodically check budget health:

const budget = await loadBudget(convoyId, '.chipset/state/budgets');
const report = getBudgetReport(budget!);
if (report.warningActive) {
  // Alert: convoy approaching budget limit
}

Module Location

  • Implementation: src/chipset/gastown/token-budget.ts
  • Tests: src/chipset/gastown/token-budget.test.ts
  • Barrel export: src/chipset/gastown/index.ts

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.