Direct tools vs. skill-backed tools
Direct tools are the workflow verbs. Skill-backed tools are the data sources. The agent always starts with a direct tool (
session_context) and ends with direct tools (propose_strategy, backtest_run).| Family | What they do | Examples | Count |
|---|---|---|---|
| Direct tools | First-class workflow verbs implemented in the Ithaca service. They mutate state, create runs, or gate approvals. | session_context, propose_strategy, backtest_run, run_skill, get_run, subscribe_run, cancel_run, list_approvals, decide_approval, get_artifact, search_skills, describe_skill, market_get_ohlcv | 13 |
| Skill-backed tools | Data-fetching capabilities backed by entries in the skills catalog. Each one resolves to a versioned skill manifest and runs through the durable run system. | market_screener, congress_trades, insider_transactions, analyst_ratings, fear_greed_index, options_flow, short_interest, … | 50+ |
Why the split matters
- Direct tools have a fixed, small schema. They are the verbs the agent must use to drive the workflow. Their arguments never change between releases.
- Skill-backed tools are discovered progressively. The agent doesn’t know all 50+ skill names up front — it uses
search_skillsto find relevant ones, thendescribe_skillto read the manifest, thenrun_skillto execute. This keeps the tool list small while letting the catalog grow without breaking older agents. - Both are traced identically. The human sees every call, argument, and result in the web UI regardless of family.
Progressive discovery with search_skills
Agents should never hard-code skill names. The catalog grows over time, and skills can be deprecated or versioned. Always discover skills through
search_skills → describe_skill → run_skill.search_skills— pass a natural-languagequery(plus optionalasset_classandintent) and get back a ranked list of matching skill IDs with one-line summaries.describe_skill— pass askill_id(and optionalversion) to fetch the full manifest: input schema, output schema, cost, latency profile, and provider.run_skill— pass theskill_id,inputdict, andmodeto create a durable run. Poll withget_runor stream withsubscribe_run.
Tool catalog by category
Session
| Tool | Description | Required args |
|---|---|---|
session_context | Open a traced research run and attach the user’s question. Always called first. | prompt |
Data & research
| Tool | Description | Required args |
|---|---|---|
market_get_ohlcv | Fetch OHLCV bars with a provenance envelope (points + quote). | symbol, range |
search_skills | Progressive discovery — find skills matching a natural-language query. | query |
describe_skill | Fetch the full manifest for a skill (input/output schema, provider, cost). | skill_id |
market_screener | Screen equities by technical/fundamental filters. | filters |
congress_trades | Pull congressional trading disclosures. | symbol or member |
insider_transactions | Pull Form 4 insider transactions. | symbol |
analyst_ratings | Pull analyst ratings and price targets. | symbol |
fear_greed_index | Fetch the CNN Fear & Greed index. | — |
options_flow | Pull unusual options activity. | symbol |
short_interest | Pull short interest and days-to-cover. | symbol |
Strategy
| Tool | Description | Required args |
|---|---|---|
propose_strategy | Validate a StrategySpec dict against the frozen contract, stamp tenant_id, and store an immutable versioned row. | spec |
Backtest
| Tool | Description | Required args |
|---|---|---|
backtest_run | Run a deterministic backtest over a spec and date range. Returns run_id, equity curve, stats, and a risk attestation. | spec, range |
Run management
| Tool | Description | Required args |
|---|---|---|
run_skill | Create a durable run for a skill. Returns run_id. | skill_id, input |
get_run | Fetch the full run record — status, jobs, artifacts, events. | run_id |
subscribe_run | Poll for new events since a cursor. | run_id |
cancel_run | Cancel a queued or running run with a reason. | run_id |
Approvals
| Tool | Description | Required args |
|---|---|---|
list_approvals | List pending approval requests for the tenant. | — |
decide_approval | Approve or deny a pending request. Human-only. | approval_id, decision |
Artifacts
| Tool | Description | Required args |
|---|---|---|
get_artifact | Fetch artifact metadata + download URI by artifact_id. | artifact_id |
Skills (execution)
Skill-backed tools are invoked throughrun_skill. See the Skills Catalog for the full list of available skills.
The canonical workflow
Open a session
Call
session_context with the user’s prompt. This opens a traced research run and attaches the question. Every subsequent call is scoped to this session.Discover and run data skills
Call
search_skills to find relevant data sources, describe_skill to read each manifest, then run_skill to fetch data. Poll get_run or stream subscribe_run for results.Propose a strategy
Call
propose_strategy with a declarative StrategySpec. The service validates it against the frozen contract and stores an immutable versioned row.Backtest
Call
backtest_run with the spec and a date range. The engine runs a deterministic backtest and returns metrics, an equity curve, and a risk attestation.Session tools
session_context — open a traced research run.Data tools
market_get_ohlcv, search_skills, describe_skill — fetch data and discover skills.Strategy tools
propose_strategy — validate and store a declarative spec.Backtest tools
backtest_run — deterministic backtest with full metrics.Run management
run_skill, get_run, subscribe_run, cancel_run — durable run lifecycle.Approval tools
list_approvals, decide_approval — the human’s promotion workflow.Artifact tools
get_artifact — fetch the 8-file backtest artifact bundle.