Declaring objectives
Closing gaps is reactive: an ask falls short, and you route the miss. Objectives are the standing version of the same instinct: write down what a pack must be able to answer before anyone asks it, and let the pack converge on its own. Each objective is a question the pack owns; its exercise loop asks it, records which tier answered, and keeps working until the answer is cheap.
Getting objectives in
Section titled “Getting objectives in”The main entry point is paste-a-blob. People develop their questions somewhere else (a doc, a meeting note, a Claude session) and hand the whole thing over; one LLM call splits it into questions, extracts any inline hints, and topics each one.
edisyl pack objectives structure growth-metrics -f questions.md --dry-run # preview — nothing is writtenedisyl pack objectives structure growth-metrics -f questions.md # create thempbpaste | edisyl pack objectives structure growth-metricsedisyl pack objectives structure growth-metrics --text "how many swaps last week? and by chain?"When the user doesn’t yet know what to ask, work from the data instead:
edisyl pack objectives examples growth-metrics --limit 10 # drafts sample questions, creates nothingedisyl pack objectives brainstorm growth-metrics --seed "revenue and churn" # a chat session proposing candidatesexamples reads one data source’s catalog and returns a menu to pick from. brainstorm opens a chat session where an agent proposes candidates against that schema. Neither creates anything; approve what survives with add:
edisyl pack objectives add growth-metrics --question "How many active wallets last week?" --topic activity \ --hint "active = a swap in 30d; use the wallet_daily table"A hint is human knowledge the pack can’t guess, the same instinct as teach, aimed at one question.
Watching them converge
Section titled “Watching them converge”edisyl pack objectives list growth-metrics # every objective: status, asks, last tieredisyl pack objectives list growth-metrics --status pending # what hasn't landed yetedisyl pack objectives asks <objective-id> # the timeline for oneasks is the one to read: every attempt the pack made at that question, oldest first.
ASKED STATUS TIER PLANE DURATION IN OUT COST2026-08-13 21:28:50 resolved deep data 102.6s 647252 11039 $0.9332026-08-13 21:43:32 resolved rank data 881ms — — —That is convergence in two rows. The first attempt went to the deep tier, a full agentic navigation costing 102 seconds and 93 cents. Fifteen minutes later the same question came back from rank in under a second, because the pack had learned the route and cached it. That’s the whole payoff of declaring objectives: you pay for the walk once, and every later ask rides it.
Editing and retiring
Section titled “Editing and retiring”edisyl pack objectives get <objective-id>edisyl pack objectives update <objective-id> --hint "<better steering>"edisyl pack objectives archive <objective-id> # soft delete; stops the exercise loopAn objective’s status stays pending until answerable, then answered. blocked means the pack gave up; read asks for the reason beneath the table, or take blockedReason from get <objective-id> -j. Archive a bad objective rather than leaving it pending: while it’s live it keeps buying deep navigations.
See pack objectives for the full command reference.
Was this page helpful?
Thanks for the feedback.
