Why my AI agent was slow: 61 skills and 27 tool schemas
My new Telegram agent felt slow even on simple requests. On 29 July 2026 I measured what it loaded before my first instruction and separated that fixed weight from the other causes of delay. I turned the result into a checklist for a leaner profile.

My new agent was carrying 61 enabled skills and 27 tool schemas before it read my first instruction.
The delay started before the task
The agent’s assembled system prompt was about 18,000 characters, and the serialised tool definitions added roughly 47 KB outside that text. A short personality prompt could change its tone. It could not remove the layers the framework owns.
The size showed the profile was not lean, though on its own it could not explain the delay. Model speed, provider routing, reasoning effort, retries, network conditions, tool calls and session state all stayed on the list of possible causes. I could measure the fixed prompt directly, while the slow reply was a symptom of the whole request path, so I kept the two questions apart.
Measure the fixed prompt the runtime sends
At first I looked only at the visible prompt: the identity, style and instructions I had written for the new profile. The runtime was assembling much more than that. In Hermes, this command reports the size of each part of the fixed prompt:
hermes -p PROFILE prompt-size --platform telegram --json
The exact output changes with the runtime version and configuration. The categories to read are the base system instructions, the enabled-skill index, memory, the user profile, platform-specific instructions, the tool count and the serialised tool schemas. I measure them together before deciding that the model is slow or that the personality prompt needs another rewrite.
The runtime assembles several layers before the first user message arrives.
- Runtime policyCore behaviour, safety, file, memory and platform instructions.
- IdentityThe profile prompt that defines role, tone and working style.
- Skills indexDescriptions of capabilities the model may decide to invoke.
- Tool schemasNames, arguments, descriptions and response contracts.
- MemoryStored facts or retrieved context added for continuity.
- ConversationThe current message and earlier turns enter the stack last.
What the new profile was carrying
I compared the new Telegram profile with the main profile on the same live runtime. The figures are one diagnostic snapshot from 29 July 2026 and describe only my two profiles. Character counts and serialised bytes let me compare the profiles, but they are not model-token counts or billing figures.
| Fixed layer | New profile | Main profile | What it told me |
|---|---|---|---|
| System prompt | 17,852 characters | 27,426 characters | The main profile was heavier on text. |
| Skills index | 61 skills · 6,077 characters | 12,276 characters | The new profile still inherited a broad capability menu. |
| Memory | 0 | 3,950 characters | Memory was not causing the new-profile weight. |
| User profile | 0 | 1,555 characters | Personalisation was not the cause either. |
| Tools | 27 schemas · 46,854 bytes | 29 schemas · 49,301 bytes | The tool contract was almost as broad as the main agent’s. |
The 18,000-character total mattered less than the overlap. An agent meant for one job carried almost the same tools as the general agent, plus dozens of skills unrelated to that job. The profile was separate in name, but its capabilities had barely been narrowed.
The heavier agent felt faster
The main profile had a larger fixed text prompt and still felt faster in use. That counted against my first theory: if prompt size alone explained the delay, the new profile should have felt faster.
The end-to-end delay can have other parts:
- Model and provider: first-token latency and generation speed vary across models, routes and current load.
- Reasoning policy: a model asked to deliberate longer may pause before producing visible text.
- Tool behaviour: the agent may inspect, select or call a tool before it answers.
- Retries and fallbacks: a failed attempt that never shows in the chat can make the successful reply after it look slow.
- Session state: a warm, established session and a new profile may take different paths.
- Gateway and network: Telegram delivery adds another system boundary after model inference.
Tool schemas stay when the personality shrinks
I still wanted the new agent to be as direct as my main one, so I wrote a concise identity prompt. It removed ceremonial language, over-explanation and automatic planning from ordinary replies. That changed its behaviour.
The prompt left what the agent could load untouched. Rewriting “be concise” cannot unload a media-generation skill, remove a calendar tool, stop an automatic skill seed or shrink a schema injected by the runtime. Those controls live in the profile configuration and the framework. Repeated prompt edits can make the visible instructions shorter while the fixed context stays nearly the same size.
For current runtime behaviour, check the public Hermes Agent repository. My measurements describe my own profile as it was configured on the day I measured it.
The lean profile I want
A Telegram coding agent with one job needs fewer capabilities than a general research assistant. I define its profile by that job and enable only the framework features the job uses.
- One primary job: coding and technical operations from a private Telegram bot.
- A small default toolset: files, shell, search and the few remote operations the job requires.
- Skills loaded by need: keep recurring coding and verification skills; disable unrelated media, office, social and publishing skills.
- One tool per system: if two tools reach the same system, keep the one I use.
- Minimal memory: keep stable preferences and operating limits, and leave out a log of every finished task.
- Explicit safety limits: approval gates and secret handling stay in the lean profile.
- Observable performance: record profile size and simple latency checks after each material change.
I turned those decisions into a lean AI agent profile checklist. It covers pruning a profile while keeping the checks and safety controls that make it trustworthy.
Prove the change with a before-and-after measurement
I count an edit as finished when the profile is smaller, behaves as intended, still completes its core tasks and comes back the same after a restart. A saved config or a restarted gateway shows none of those things.
- Capture the before-state with the prompt-size report and a redacted profile inventory.
- Disable one group of unrelated skills or tools.
- Restart only the affected profile or gateway using its supported control path.
- Capture the after-state with the same report.
- Time a direct no-tool answer, a reasoning answer and one representative tool task.
- Verify the Telegram path, allowlist, model identity and required tool still work.
- Restart once more and confirm the lean configuration persists.
Keep bot tokens, provider credentials, private paths and complete raw configurations out of the test record. If a bot token reaches a chat, issue, screenshot or public log, rotate it; deleting the message leaves the token valid.
Questions I would ask first
Does a long system prompt always make an AI agent slow?
No. It is fixed overhead, but model and provider latency, reasoning effort, tool calls, retries, network conditions, and session state can matter more. Measure each layer before assigning cause.
Does rewriting the agent personality remove prompt bloat?
Only partly. It can simplify instructions and behaviour. It does not remove tool schemas, skill indexes, memory, platform instructions, or framework policy injected elsewhere.
What should I remove from a slow AI agent first?
Start with capabilities the agent will not use: unrelated skills, duplicate tools, broad memory, repeated instructions, and automatic skill seeding. Keep the tools and safety boundaries required by the actual job.
Should two agents have the same prompt and tools?
Only if they have the same job and authority. A separate profile is most valuable when its model, tools, memory, budget, files, or permission boundary is deliberately different.
Use this

← Previous: Voice-driven development: directing AI agents by dictation
Want this inside your team’s workflow? The Verified AI Operations Sprint tests one workflow in ten business days. See the sprint →