# OSRS Codex — Universal Action Grammar The action grammar is the **bridge** between codex entries (client-agnostic) and real scripts (client-specific). An entry never names a client API; it uses a **verb** from this file. Each agent maintains the mapping table for its own client. A `verb` is one primitive, atomic capability. Compound behaviour is built by chaining verbs in the entry's `actions[]` list and wiring the state machine. Legend for the mapping table: - `DB` = DreamBot (tblkit / OSBot-style Java) - `MB` = Microbot - `RL` = RuneLite plugin - `—` = not expressible as a single primitive; entry should decompose. > Columns are filled by each client owner as their client support lands. > `—` is a legal value: it means "decompose into smaller verbs." --- ## A. World / presence | verb | meaning | DB | MB | RL | |-----------------|------------------------------------------------|--------------|-------------|----| | `login` | authenticate the account | — | — | — | | `select_world` | join a specific world by id/type | — | — | — | | `hop_world` | switch worlds (F2P or P2P hop) | — | — | — | | `is_logged_in` | predicate: authenticated & in-game | — | — | — | ## B. Movement | verb | meaning | DB | MB | RL | |-----------------|--------------------------------------------------|----|----|----| | `move_to` | get to a named location (teleport-or-walk) | — | — | — | | `walk_to` | path-walk to a tile | — | — | — | | `teleport` | use a teleport (spell/item/scroll/portal) | — | — | — | | `enter_region` | assert we are inside a named area (predicate) | — | — | — | | `open_door` | open/lock an interactable door | — | — | — | ## C. Interaction (the core) | verb | meaning | DB | MB | RL | |--------------------|----------------------------------------------------|----|----|----| | `use_item_on` | use inventory item `X` on target `Y` (or itself) | — | — | — | | `click_object` | left-click a world object (NPC/NPC tile/thing) | — | — | — | | `right_click` | click a specific menu option on a target | — | — | — | | `talk_to` | open an NPC dialogue and pick a line | — | — | — | | `click_button` | click a UI widget by stable reference | — | — | — | | `menu_option` | select from an in-game menu (F-keys, menus) | — | — | — | ## D. Inventory / bank | verb | meaning | DB | MB | RL | |--------------------|----------------------------------------------------|----|----|----| | `bank_inventory` | open bank, deposit/withdraw per params, close | — | — | — | | `deposit_all` | deposit every bankable item | — | — | — | | `withdraw` | withdraw a named item up to a quantity | — | — | — | | `has_item` | predicate: inventory holds item ≥ qty | — | — | — | | `count_item` | read inventory quantity of an item | — | — | — | | `move_to_inv` | move item from bank/ground into inventory | — | — | — | | `sort_inventory` | reorder inventory into a known layout | — | — | — | ## E. Exchange (Grand Exchange) | verb | meaning | DB | MB | RL | |--------------------|----------------------------------------------------|----|----|----| | `ge_open` | open GE at a bank | — | — | — | | `ge_buy` | buy `qty` of `item` at offer price, paced | — | — | — | | `ge_sell` | sell `qty` of `item`, confirm | — | — | — | | `ge_cancel` | abort an offer (quote_age_policy only — stale edge or strategy reallocation, never a 4h limit-window reset): BUY — filled items + refunded CASH (unspent remainder) enter the GE COLLECTION BOX; SELL — unsold units + proceeds received so far enter the box; NEVER directly to inventory; the 4h buy limit is NOT renewed | — | — | — | | `ge_offers_done` | predicate: no pending buy/sell offers | — | — | — | | `ge_collect` | withdraw from the GE collection box: bought (filled) items, refunded CASH, unsold units, sale proceeds; reconcile the SIDE-AWARE per-slot ledger (buy: quoted = filled + still_open + cancelled_unfilled; sell: quoted = sold + still_open + returned_unsold) before any slot reuse; a completed cycle closes with the ledger reconciled + ARCHIVED and the same pass releases the physical slot to free (`closed -> free` archival transition), so the slot immediately runs the next flip (governor 10471) | — | — | — | | `ge_check_price` | read current buy/sell price of an item | — | — | — | ## F. Combat | verb | meaning | DB | MB | RL | |--------------------|----------------------------------------------------|----|----|----| | `attack` | start/continue attacking a target | — | — | — | | `prayer` | toggle a prayer on/off | — | — | — | | `buff` | apply a buff item/potion | — | — | — | | `eat` | heal when HP < threshold | — | — | — | | `retreat` | disengage and reposition | — | — | — | | `is_dead` | predicate: account is dead | — | — | — | | `respawn` | return to a spawn/bank after death | — | — | — | ## G. Observation (predicates) Predicates return a boolean and drive `state_machine.transitions`. They are **free** (no anti-ban cost) and may be polled every tick. | verb | meaning | |------------------|------------------------------------------| | `is_at` | at a named location | | `has_item` | inventory holds item ≥ qty | | `item_count` | quantity of an item in inv/bank | | `level_is` | a skill is at/above a level | | `xp_is` | a skill's xp at/above a threshold | | `hp_is` | HP below a threshold | | `is_dead` | dead | | `ge_clear` | no pending GE offers | | `bank_open` | a bank is open | | `quest_state` | a quest is started/completed | | `npc_present` | a named NPC is in range/visible | ## H. Housekeeping / safety | verb | meaning | DB | MB | RL | |-----------------|--------------------------------------------------|----|----|----| | `log` | write a sentinel log line (RESULT/DONE/ERROR) | — | — | — | | `alert` | raise a humanised alert (operator inbox) | — | — | — | | `sleep` | humanised pause `delay:[min,max]` | — | — | — | | `human_move` | anti-ban mouse wander / cursor nudge | — | — | — | | `take_break` | scheduled AFK pause (run_control.break) | — | — | — | --- ## Parameter conventions `params` are key/value and client-agnostic. Recognised keys: - `location` — a **named** place. Must resolve to a real, named OSRS location (never a bare coordinate in the entry; coordinates live in the client mapping). - `item` / `on` — canonical item names (exact wiki names). - `qty`, `buffer` — counts. - `method` — ordered preference list for how to achieve the verb (e.g. `[teleport, walk]`); the client tries in order. - `menu`, `option` — the exact right-click/option string. - `price` / `max_price` — GP ceiling for a GE buy (anti-loss). - `threshold` — a level/xp/hp cutoff for predicates and `eat`. ## Anti-ban hints (optional, per action) - `delay: [min, max]` — randomised ms to sleep after the action. - `mouse` — free-text humanisation directive (wander, jitter, bezier). - `jitter` — randomise click offset in px. These are **hints**, not guarantees. The translating agent may strengthen them, never weaken a codex-mandated value.