Stop Writing Tools

Old Charon's ferryman, drawn in magenta ASCII characters on a dark terminal background.

Tools are functions that let an LLM act as an agent. Calculating a sum or getting today’s date are the classic examples. They have been useful for a long time, and they’re still the most common way to build an agent.

At Loka, most agentic projects use them. Say you’re building a personal assistant. You’d use an agent framework and build tools for it to use. To check your calendar. To add items to it. If there are too many tools, you might define “agents as tools” that work as subagents under an orchestrator. And this would work. I remember the first time I did it. It felt great. Giving your chatbot agency, so it can do more than just write text.

Old Charon#

In August 2025, I built a personal assistant called Charon as my internship capstone project. It was a three-layer agent architecture: an orchestrator with two subagents, each with three subagents of its own. Nine agents and around 40 tools all in all (including the GitHub MCP). It managed my calendar, kept a journal, recommended newsfeeds, movies and books, and read me code (local and on GitHub). The reason for this many agents was that back then, models were far more likely to pick the wrong tool or mangle the input, especially the more tools you added.

Old Charon's terminal welcome screen: a magenta ASCII drawing of the ferryman beside the word CHARON in block letters, the title The Ferryman's Assistant, and a double-bordered panel labelled Welcome Aboard.
Old Charon’s welcome screen, rendered from the capstone’s own banner code. Click for full size.

This behemoth genuinely worked. I used Sonnet 4, but because it was too expensive, sometimes I also used Devstral Medium (talk about a trip down memory lane), and when I tested it, it generally worked. And yet if you made this today and showed it to a serious person, you’d get laughed out of the room.

big_boss_orchestrator ··········· journal · sleep tracking  (4)
├── task_agent
│   ├── file_search_agent ······· file_read · find_folder_from_name
│   ├── google_calendar_agent ··· create_event · get_events
│   └── github_agent ············ the GitHub MCP server
└── home_agent ·················· create_event · get_events
    ├── books_agent ············· search · add · mark read · list  (4)
    ├── movies_agent ············ OMDb · add · mark watched · list  (4)
    └── recommender_agent ······· Substack + YouTube feeds  (6)

# every edge in this tree is a tool as well: eight *_agent_query tools
# that pass a request down and a summary back up
Old Charon's nine agents, read from the capstone code. Tools are listed next to the agent that owns them.

Every tool was a predetermined action. The model never had to do anything other than know which button to press (with the correct parameters, of course). That is what tools are for. They let a weak model look competent by having predetermined actions. They also make the model unable to do anything I hadn’t written a tool for.

What changed#

The issue here is that recent models have been far from weak, starting almost an entire year ago. With the jump in capability that came with models like Opus 4.5, Claude Code and Codex finish hour-long tasks on their own. The idea that you need a hand-built tool that specifically does one job is wasteful at best and a limitation to the model at worst.

So, how did we get here? Anthropic hasn’t published it, so this is my guess, but I think it’s a credible one. Think about your past experiences with Claude Code. Up until mid-2025, you would ask for a feature, and the model would begin building it. But the experience was a bit different than it is now. The user would intervene constantly. Either to suggest other improvements. Or to point out issues and problems. Now imagine you removed the human turns from this transcript and used it as training data. So, train the model to reach the end state by the path it took with the user. Just fully autonomously. Give negative rewards if it doesn’t reach the end state, or if it treats some of the intermediate steps as end goals, and that way you end up with a model with far better scores on long-horizon tasks.

> add a session switcher to the CLI
⏺ Added a sessions command and a table
> it crashes when there are no sessions
⏺ Handled the empty case, added a test
> show the description next to each id
⏺ Added a description column. Done.
  task: add a session switcher to the CLI
⏺ Added a sessions command and a table
  ✗ stopping here is penalised
  > it crashes when there are no sessions
⏺ Handled the empty case, added a test
  > show the description next to each id
⏺ Added a description column. Done.
  ✓ end state reached: reward
My guess, not a published method: take a session where a person kept steering, strike out the person's turns, and reward only reaching the end state.

What does “better” mean?#

I want to quantify this “the models got better” claim. More so than pointing out how today’s models can break out of their eval environments and take over parts of Hugging Face and OpenAI. Or how they can now solve Millennium Prize problems. I think the following two benchmarks matter most for our use case.

ARC-AGI#

ARC-AGI is a benchmark that tests the model’s ability to generalize by giving it novel puzzles. The idea is to see if the model can acquire a skill it hasn’t been trained on. When OpenAI o3 scored 75.7% on ARC-AGI-1 in December 2024 (87.5% with 172 times the compute), vs GPT-4o’s single digits, it was read across the field as a sign that scaling reasoning hadn’t hit a wall. Since then we have moved on to a harder successor, ARC-AGI-2.

View numeric chart data
SeriesCategoryARC-AGI-2 score (%)
ARC-AGI-2Opus 4 (May '25)8.6%
ARC-AGI-2Sonnet 4.5 (Sep '25)13.6%
ARC-AGI-2Opus 4.5 (Nov '25)37.6%
ARC-AGI-2Sonnet 4.6 (Feb '26)60.4%
ARC-AGI-2Opus 4.6 (Feb '26)69.2%
ARC-AGI-2Opus 4.7 (Apr '26)75.8%
ARC-AGI-2Opus 4.8 (May '26)72.1%
ARC-AGI-2Fable 5 (Jun '26)89.2%
ARC-AGI-2Opus 5 (Jul '26)90.4%
ARC-AGI-2 scores for Claude models. The two jumps are highlighted: Opus 4.5 in November 2025, and Fable 5 in June 2026, the first Mythos-class model Anthropic released for general use. The dashed line marks the Mythos Preview announcement on April 7, 2026. Each score is the model's best setting on the ARC Prize leaderboard (Semi-Private set): Opus 4.7, Fable 5 and Opus 5 at Max effort; Sonnet 4.6, Opus 4.6 and Opus 4.8 at High.

You can see the November jump, from 13.6% to 37.6%. (You can probably see this new post-Mythos jump too.) So this benchmark tells us that the models have become much better at generalizing. Much better at understanding structures they have never seen (I am not even mentioning GPT-6 Astra and how it has saturated ARC-AGI-3). So models have become much better at solving things not in the training data. Like being able to navigate your previously unseen CLI without needing tools for it.

METR Long Horizon#

The METR Long Horizon benchmark measures how long a task, in human expert hours, the model can finish. At the 50% horizon, Opus 4 (May 2025) is at 1.7 hours, Opus 4.5 (November) is at about 4.9 hours and Opus 4.6 (February 2026) at about 12 hours. Claude Mythos Preview (April 2026) came in at “at least 16 hours”, beyond what METR’s task suite can reliably measure (it saturated the benchmark). Since then, models like Mythos 5.1 and especially GPT-6 Astra (which has saturated a bunch of benchmarks) have become even more powerful. This is what I mean when I say models have become much more powerful since the summer of 2025.

View numeric chart data
SeriesCategoryHours
50% time horizonOpus 4 (May '25)1.7 h
50% time horizonOpus 4.5 (Nov '25)4.9 h
50% time horizonOpus 4.6 (Feb '26)12 h
50% time horizonMythos Preview (Apr '26)16 h
METR 50% time horizon, in human expert hours. Mythos Preview's 16 hours is a lower bound: it went past what METR's task suite can reliably measure.

Anthropic’s own usage data shows that Claude Code’s longest turns (the 99.9th percentile) nearly doubled between October 2025 and January 2026, from under 25 minutes to over 45. Also, internally at Anthropic from August to December, Claude Code’s success rate on the hardest tasks doubled while human interventions per session fell from 5.4 to 3.3.

Longest Claude Code turns99.9th percentile, Oct 2025 → Jan 2026
<25 min → >45 min
Success rate on the hardest tasksinternal, Aug → Dec 2025
1× → 2×
Human interventions per sessioninternal, Aug → Dec 2025
5.4 → 3.3
From Anthropic's Measuring agent autonomy. The success rate is only reported as a ratio, so its row shows it doubling.

We don’t need that anymore#

The issues with forcing a competent model to follow a tool structure are plentiful. It can’t chain two tools without a round trip through its context. It can’t save an intermediate result to disk and come back to it. It can’t do anything other than what I anticipated. Everything it can do is predetermined by the person who wrote the tools. And everything has to be explained. And coded.

Request 1 from the comparison below, on Opus 5.5. Old Charon's logs record tool names without arguments, so its calls are grouped by the agent that owns them. Both versions picked the same first episode.

What the assistant would look like today#

I remade Charon the way I would make it today, to compare a year-old app with a brand-new one. The idea here is to replace every tool with a CLI, a curl from a public endpoint, or lastly just bash for reading and writing local files.

The new Charon is a folder:

petar@loka:~/Documents/charon$ tree
charon/
├── AGENTS.md          44  # who Charon is, where my data lives, which CLIs to use
├── CLAUDE.md           2  # two lines: @AGENTS.md and my preferences file
├── .agent/skills/planning/
│   └── SKILL.md       45  # the scheduling and estimation playbook
└── .claude/
    └── settings.json  51  # the boundary
New Charon. The yellow numbers are line counts.

AGENTS.md holds short instructions for what it can use:

- Calendar: `gcalcli` (timezone Europe/Skopje). `gcalcli agenda "today" "7 days from now" --tsv`
  for reading. `gcalcli add` to create events. Always confirm before creating, moving or
  deleting an event.
- GitHub: `gh` (logged in as PetarKalinovski).
- Books: Open Library, e.g.
  `curl -s 'https://openlibrary.org/search.json?title=piranesi&limit=3&fields=title,author_name,first_publish_year,number_of_pages_median,subject'`
- Movies and shows: OMDb, `curl -s "https://www.omdbapi.com/?apikey=$OMDB_API_KEY&t=severance"`
- Substack: every newsletter has an RSS feed at `<newsletter url>/feed`.
- YouTube: `yt-dlp --flat-playlist -I 1:5 --print '%(title)s | %(url)s' <channel url>/videos`

That’s roughly 3,080 lines of agents, tools, prompts and schemas, replaced by 89 lines of instructions and a 51-line settings file, mostly permission rules.

One square is ten lines.

Comparing the two versions#

I ran both versions on the same four requests. First on Opus 5.5, then on Sonnet 5.5 (closer to what Charon was originally built for). The old one ran on Strands through OpenRouter, while the new one ran in Claude Code headless mode (claude -p).

Model calls
Opus 5.5
72 → 31
Sonnet 5.5
53 → 29
Tool calls
Opus 5.5
116 → 25
Sonnet 5.5
82 → 23
Time
Opus 5.5
7.8 min → 3.1 min
Sonnet 5.5
4.4 min → 1.2 min
Cost
Opus 5.5
≈$7.35 → $0.88
Sonnet 5.5
$0.45 → $0.31
All four requests together. Each row is scaled to old Charon's total, so the solid dot shows how much of it new Charon needed. Sonnet 5.5 totals add up the mean of three runs per request.
View numeric chart data
SeriesCategoryTool calls
Old Charon · Opus 5.5Feeds: pick two31
Old Charon · Opus 5.5Book + sleep8
Old Charon · Opus 5.5Two free hours11
Old Charon · Opus 5.5Estimate + schedule66
New Charon · Opus 5.5Feeds: pick two8
New Charon · Opus 5.5Book + sleep3
New Charon · Opus 5.5Two free hours5
New Charon · Opus 5.5Estimate + schedule9
Old Charon · Sonnet 5.5Feeds: pick two23
Old Charon · Sonnet 5.5Book + sleep9
Old Charon · Sonnet 5.5Two free hours19
Old Charon · Sonnet 5.5Estimate + schedule31
New Charon · Sonnet 5.5Feeds: pick two5
New Charon · Sonnet 5.5Book + sleep3
New Charon · Sonnet 5.5Two free hours8
New Charon · Sonnet 5.5Estimate + schedule7
Tool calls per request. Opus 5.5 is one run per request; Sonnet 5.5 is the mean of three.
View numeric chart data
SeriesCategorySeconds
Old Charon · Opus 5.5Feeds: pick two99s
Old Charon · Opus 5.5Book + sleep60s
Old Charon · Opus 5.5Two free hours75s
Old Charon · Opus 5.5Estimate + schedule236s
New Charon · Opus 5.5Feeds: pick two85s
New Charon · Opus 5.5Book + sleep23s
New Charon · Opus 5.5Two free hours31s
New Charon · Opus 5.5Estimate + schedule45s
Old Charon · Sonnet 5.5Feeds: pick two53s
Old Charon · Sonnet 5.5Book + sleep39s
Old Charon · Sonnet 5.5Two free hours51s
Old Charon · Sonnet 5.5Estimate + schedule118s
New Charon · Sonnet 5.5Feeds: pick two19s
New Charon · Sonnet 5.5Book + sleep11s
New Charon · Sonnet 5.5Two free hours17s
New Charon · Sonnet 5.5Estimate + schedule26s
Wall-clock time per request, in seconds.
View numeric chart data
SeriesCategoryUSD
Old Charon · Opus 5.5Feeds: pick two1.89
Old Charon · Opus 5.5Book + sleep0.24
Old Charon · Opus 5.5Two free hours0.38
Old Charon · Opus 5.5Estimate + schedule4.84
New Charon · Opus 5.5Feeds: pick two0.23
New Charon · Opus 5.5Book + sleep0.14
New Charon · Opus 5.5Two free hours0.19
New Charon · Opus 5.5Estimate + schedule0.32
Cost per request on Opus 5.5, in US dollars. Old Charon's costs are approximate. The full table below has the Sonnet 5.5 costs.
Full results, old → new
RequestModelModel callsTool callsTimeCost
What’s new from my Substacks and YouTube channels? Pick two.Opus 5.524 → 931 → 899s → 85s≈$1.89 → $0.23
Sonnet 5.513 → 623 → 553s → 19s$0.145 → $0.062
Add Piranesi to my reading list. How did I sleep last week?Opus 5.59 → 48 → 360s → 23s≈$0.24 → $0.14
Sonnet 5.59 → 49 → 339s → 11s$0.035 → $0.053
I have 2 hours free tonight. What should I do?Opus 5.59 → 711 → 575s → 31s≈$0.38 → $0.19
Sonnet 5.513 → 1019 → 851s → 17s$0.104 → $0.098
How long will a session viewer for project-charon take, and when can I fit it in?Opus 5.530 → 1166 → 9236s → 45s≈$4.84 → $0.32
Sonnet 5.518 → 931 → 7118s → 26s$0.163 → $0.101
TotalOpus 5.572 → 31116 → 257.8 min → 3.1 min≈$7.35 → $0.88
Sonnet 5.553 → 2982 → 234.4 min → 1.2 min$0.45 → $0.31
How the comparison was run
  • Old Charon is the August 2025 capstone code on Strands Agents, with all nine agents pointed at the same model through OpenRouter. New Charon runs in Claude Code’s headless mode (claude -p --output-format stream-json).
  • Opus 5.5 is one run per request. Sonnet 5.5 is three runs per request, and the table shows the mean.
  • Nobody approves anything in a headless run, so writes were refused on both sides: old Charon’s calendar inserts and GitHub write tools, and new Charon’s ask rules.
  • Model calls count every call across old Charon’s nine agents, and Claude Code’s turns for new Charon. Tool calls count every tool use, blocked ones included.
  • Old Charon’s Opus costs are approximate: the $8.60 OpenRouter bill for five runs (the four requests plus one rerun of the first) split by each run’s token-priced cost at $4 and $20 per million input and output tokens. Its Sonnet costs are token-priced at $2 and $10.
  • Claude Code’s first call in every run already carried about 20,000 input tokens (19.9k on Opus, 21.9k on Sonnet): its system prompt, tool definitions and Charon’s own instructions.
  • New Charon’s costs are what Claude Code reports, and they include prompt caching. Priced at the full input rate instead, new Charon would have cost about $2.42 on Opus (against $7.35) and $1.14 on Sonnet (against $0.45).

Answer quality was comparable on both new and old Charon. But you can see old Charon had different issues.

Issues with old Charon#

You can see the huge cost and latency margins here. But more than that, the issue is structural. In the fourth task, old Charon made 66 tool calls: 35 GitHub MCP calls (29 of them reading files) and 22 local read calls of the same repo, because the local agent and the GitHub agent read it separately.

Every tool call in the fourth request on Opus 5.5, in the order they ran. Hover a square for the tool name.

New Charon read the repo with two shell commands. The whole task was 9 tool calls instead of 66 (3 of them blocked by Claude Code’s permission checks), and it took a fifth of the time it took old Charon.

This is one of the big recurring issues with structuring subagents as tools. Stuff gets constantly re-read. It is a fundamental problem in agents as tools. Subagents get sent what the orchestrator decides. A summary, or a description of the task. It almost invites this token waste because the system is set up to lose context.

 you
  │  the whole conversation
  ▼
 big_boss_orchestrator
  │  a task description
  ▼
 task_agent
  ├──────────────────────────┐
  │  a task description      │  a task description
  ▼                          ▼
 file_search_agent          github_agent
 22 × file_read             29 × get_file_contents
  │                          │
  ▼                          ▼
 project-charon (local)     project-charon (GitHub)
  └────── the same repo ─────┘

# neither agent knows what the other read, and the orchestrator
# can't tell the GitHub agent to skip the repo
Each layer only gets what the layer above decided to send.

The orchestrator has the conversation with the user, so it has full context on what the user asks. The subagent has the specialized tool results. But the orchestrator doesn’t know what the local files agent read, so it can’t tell the GitHub agent to skip the repo. There can also be a case where the subagent misinterprets instructions from the orchestrator. In any case, when an instruction from the orchestrator is unclear to the specialist, it can ask a clarifying question, or it can try to gain as much context as possible itself. And given the way models are post-trained, gathering as much information as possible is practically demanded of them. And it’s something we as users like.

Maybe I can fix this one case by grouping the subagents differently. So instead of a GitHub and a local files agent, I make one repo-reader agent. But that only works because I have seen the overlap. Grouping them this way will most likely create the same problem in a different place. It will be a constant battle to make this way of scaffolding work, when in truth you probably don’t have to. It is the same problem as with the tools. It can’t do stuff you didn’t plan for.

Better on old Charon#

The small requests were genuinely good on the old version too. And it was only slightly worse on the bigger requests. Also, because Claude Code starts every run with 20k tokens of system prompt, one request was actually cheaper on old Charon. The tasks on a personal assistant like this are easy for most models. I never expected there to be any big difference in the quality of the answers. Just like I said above, this has worked since I first made it. It’s all of the other things, excluding the quality of the answer, that can be worse.

The main problem with this new design#

The upside, as I have stated, to removing rails is that the agent has more freedom in solving the task, which tends to lead to better results (on non-trivial tasks), latency and cost. But there is also a downside. I removed rails. The old agent had a create_event tool. It was the only way to write to my calendar. In new Charon, Claude has to ask me before it runs a gcalcli command that adds, changes or deletes an event. The issue here is that the new agent can, in theory, write a Python script to a scratch folder and run it without asking, and that script could call the Calendar API directly. It can do far more than that. Once you give the agent the ability to run scripts it wrote, it can bypass a lot of safeguards you might have implemented. I honestly don’t really care about this for a personal assistant. But not all projects are personal assistants.

# old Charon
⏺ create_event(title, start, end)           the only code that writes to the calendar

# new Charon, .claude/settings.json
"ask":   ["Bash(gcalcli add *)", "Bash(gcalcli edit *)", "Bash(gcalcli delete *)", …]
"allow": [ …, "Edit(//tmp/charon/**)", "Bash(python3 /tmp/charon/*)" ]

# new Charon, what those settings let through
⏺ Bash(gcalcli add …)                       asks me first
⏺ Write(/tmp/charon/add_event.py)           allowed
⏺ Bash(python3 /tmp/charon/add_event.py)    allowed: Calendar API, no question asked
The settings lines are copied from new Charon. The last two steps never happened in a run, but nothing in the settings stops them.

A client project#

Let’s think of a typical client project where the issue I just described matters much more than it does for my personal assistant. Let’s say a company wants users to be able to query multiple databases in different systems, all in plain English. There needs to be a chat front end, and different users need to see different types of data.

The most common way to design this is to make an orchestrator agent that picks the domain and routes to specialist agents, one per data source, each with their own tools for each of the tasks. And perhaps, before a query gets routed to the orchestrator, an authentication layer that decides what subagents the user might have access to.

This is the old Charon of B2B. This is also writing scaffolding where the model’s thinking is done for it. The existence of a tool for each task is us making the steps in advance, and the existence of every specialist (as an agent as tool) creates a bottleneck where information gets passed along. How good a job the specialist does depends on the words the orchestrator sends.

Let’s remove the orchestrator. Each specialist becomes a skill. A skill that will be read when a question needs that information. The tool per task becomes a CLI with good --help instructions. And let’s keep a workspace per user, so the files the agent created are always there. The agent should also have access to bash, so it can read the skills and write any logs or documentation.

The usual design
Chat front end
Authentication layerdecides which specialists you get
Orchestrator agentpicks the domain
a task description
Sales DBagent, a tool per task
CRMagent, a tool per task
Warehouseagent, a tool per task
Sales DB
CRM
Warehouse
Without the orchestrator
Chat front end
login
Identity provideryour login maps to a database role
Sandbox, one workspace per user
One agent with bash
Skillsone per data source, read when needed
CLIswith good --help
Fileslogs, notes and results that stay
SQL through a CLI, the only way out
Data proxyholds the real credentialsread-only rolelogin → DB rolelogs every query
Sales DB
CRM
Warehouse
The same product, two ways. On the right, the agent can't reach anything except the proxy, and the proxy can't write.

And because changing your entire architecture can be a bit challenging, at least for starting out, I recommend using the Strands harness.

How do you safeguard something that has this level of agency?#

So how do we stop the agent from editing or deleting parts of the database? You cannot give it access to the database itself. Ever.

The main idea here is to make a data proxy (a small web service outside of the sandbox). So the agent can’t connect to the database. It can only send queries to a middleman. It writes SQL and sends it through a CLI. Then the proxy, which has the real credentials, forwards that to the DB. And the proxy connects with a read-only role, so an update or delete fails automatically. If the credentials were kept in the sandbox, the agent could connect directly and bypass the proxy’s identity checks and audit logs. Database-enforced read-only permissions would still apply. The sandbox can also reach the proxy and nothing else. That keeps the proxy the only way to the database, and it stops the agent from sending data anywhere else, by mistake or because something it read told it to. Even Strands, the framework old Charon is built on, now says this in the docs for its new harness: “To isolate what the agent can touch, run it under a sandbox rather than trying to restrict the tools themselves.”

Besides making sure the agent can’t change the DB, we need to make sure that we know who is querying the DB, and we need to know what the agent did. We do the first thing by checking the login from the identity provider and mapping it to a database role, which decides which tables and rows that user can see. That replaces the authentication layer that picked subagents. We do the second thing by just logging the queries themselves when they reach the proxy.

Give it a year#

At the start I said you’d get laughed out of the room for building old Charon today. I wonder what this folder will look like in a year. As I write this, skills are one year and four days old. A year ago they didn’t exist, and now half of new Charon’s instructions are one. AGENTS.md, skills, permission files. I wonder how much will change in a year. I wonder what models will outgrow. Will it be most of what we do today? Or almost nothing? Will we have specialized swarms? Will specialized subagents be viable again? I don’t know what changes next. I think the guardrails give out last. The proxy. The sandbox. But a year ago I wouldn’t have guessed correctly either.

I’ll let new Charon have the last word. One of the four requests asked how I slept last week. This is what it said:

That was the last week of my internship.

References#

  1. GitHub. GitHub MCP Server. github.com/github/github-mcp-server
  2. OpenAI (2026). OpenAI – Hugging Face Incident Technical Report. On agents in a cyber evaluation escaping their sandbox and compromising parts of Hugging Face’s production infrastructure in July 2026. cdn.openai.com
  3. Hugging Face (2026). Security incident disclosure, July 2026. 16 July 2026. huggingface.co/blog
  4. OpenAI (2026). Navier–Stokes announcement. 8 September 2026. A Lean-checked proof that the 3D Navier–Stokes equations can blow up in finite time under a smooth external force. openai.com
  5. Scientific American (2026). Did OpenAI Solve the Wrong Navier-Stokes Problem? 21 September 2026. scientificamerican.com
  6. ARC Prize (2024). OpenAI o3 Breakthrough High Score on ARC-AGI-Pub. 20 December 2024. arcprize.org
  7. ARC Prize Foundation (2025). ARC-AGI-2. Benchmark description and paper (arXiv:2505.11831). arcprize.org/arc-agi/2
  8. Anthropic (2026). Claude Fable 5 and Claude Mythos 5. 9 June 2026. Describes Fable 5 as a Mythos-class model made safe for general use. anthropic.com/news
  9. Anthropic (2026). Project Glasswing. 7 April 2026. Announces Claude Mythos Preview. anthropic.com/glasswing
  10. ARC Prize. ARC-AGI Leaderboard. Semi-Private set, accessed 19 October 2026. arcprize.org/leaderboard
  11. ARC Prize (2026). OpenAI’s GPT-6 Astra on ARC-AGI-3. 3 September 2026. arcprize.org
  12. METR (2025). Measuring AI Ability to Complete Long Software Tasks. arXiv:2503.14499. arxiv.org/abs/2503.14499
  13. METR. Time horizons of frontier models (Time Horizon 1.1). Opus 4 1.67 h, Opus 4.5 4.88 h, Opus 4.6 11.98 h. Accessed 19 October 2026. metr.org/time-horizons
  14. METR (2026). Time horizon estimate for an early version of Claude Mythos Preview. Post on X, May 2026. x.com/METR_Evals
  15. Anthropic (2026). Claude Fable and Mythos 5.1. 1 September 2026. anthropic.com
  16. Anthropic (2026). Measuring agent autonomy. 18 February 2026. anthropic.com/research
  17. gcalcli: Google Calendar command line interface. github.com/insanum/gcalcli
  18. GitHub. GitHub CLI. cli.github.com
  19. Open Library. Search API. openlibrary.org
  20. OMDb API: the Open Movie Database. omdbapi.com
  21. yt-dlp. github.com/yt-dlp/yt-dlp
  22. Strands Agents. Open-source agent SDK. strandsagents.com
  23. OpenRouter. openrouter.ai
  24. Anthropic. Claude Code headless mode. code.claude.com/docs
  25. Strands Agents (2026). Introducing Strands harness: frontier performance with 28% lower token cost. 21 September 2026. strandsagents.com/blog
  26. Strands Agents. Harness: shell and files. Quoted from the section “Everything routes through the sandbox”. strandsagents.com/docs
  27. Anthropic (2025). Introducing Agent Skills. 16 October 2025. claude.com/blog/skills

Tags

Topics