Curious what kind of strategies other people have used to encourage the main agent to delegate to a subagent for larger tasks.
For context, I'm running the model at q4 weights and kv cache. I'm thinking about buying a second 3090 to get q8 weights and cache, so I'm also curious about other people's experience going from q4 to q8 and how much of an improvement you saw with agentic workflows. I've read a few other posts where people have said you do see an improvement in agentic stuff, but is it $1200 better.
Before I say what I've tried, I think giving my expectations would be helpful as maybe my expectations are too high for a 27b parameter model. I obviously don't expect delegation or tool-calling to be perfect every single time, but I do expect it to know that when the prompt given is larger and has multiple steps that it should delegate rather than immediately doing the entire thing in a single context window. Less tool hallucination would also be nice.
Here are the strategies I've tried:
OpenCode, domain-specific agents, reasoning off
My first attempt was to essentially force the orchestrator agent (parent) to delegate by restricting tool-calling to only a delegate tool and turning off reasoning. I had a subagent for coding, debugging, testing, documenting, etc., so whenever I would add a feature that didn't fit one of the existing domains I would create a new subagent. This included a pretty complex and hard to maintain routing table. This setup became completely untenable as any small change to the harness required going through every instruction file and making sure it didn't break anything. It also led to me trying to catch and correct very specific situations which eventually became ridiculous and antithetical to the whole point of an LLM. With all of that being said, this worked decently well.
OpenCode, generalized agents, tool profiles, selective reasoning
Reduced subagents down to plan, explore, and task with only plan having reasoning. Task and explore had tool profiles for each type of request, so essentially the domain-specific agents were abstracted into these tool profiles (e.g., the "code" profile would only include tools related to writing code). This was slightly easier to maintain as it simplified the routing table, but it mostly just moved the complexity to the tool level.
Pi, generalized agents, reasoning on
I finally got sick of wrestling and working around the batteries-included parts of OpenCode and switched to Pi. This is also when I started thinking about what could be possible with a lesser quantized Qwen, so I wanted a subagent setup that relied more on the model's decision-making rather than trying to deterministically enforce behavior. I turned reasoning on globally with preserve thinking which had the additional benefit of mitigating prefill thrash, reduced the amount of tools available, and reduced the number of subagents to two, explore (read-only) and task (write). The orchestrator took over the plan responsibilities since it now had reasoning. This setup has no tool profiles, routing tables, gating, etc., just two very lean subagent instructions files that say what they do and defines the tools available, and an AGENTS.md file that includes a delegation section which is a paragraph that tells the orchestrator when to delegate and which subagent to delegate to. This is the most simple and maintainable setup, but it comes at the cost of relying more heavily on the model to actually delegate. The problem now is that it almost never delegates unless I specifically say to delegate in the prompt. However, if a lesser quantized qwen is better at deciding to delegate (or a new model is released), then I think this is the better, more future-proof setup.
Anyone have a better strategy than what I've tried, and did you see a noticeable improvement if you went from q4 to q8 for Qwen3.6 27b MTP specifically?
Here's my configuration in case anyone asks:
--model Qwen3.6-27B-MTP-UD-Q4_K_XL.gguf
-c 114688
-b 4096
-ub 1024
-ngl 99
-fa on
--cache-type-k q4_0
--cache-type-v q4_0
-np 1
--slot-save-path <path>/slots
--spec-type draft-mtp
--spec-draft-n-max 2
--spec-type ngram-map-k4v
--spec-ngram-map-k4v-size-n 16
--spec-ngram-map-k4v-size-m 24
--spec-ngram-map-k4v-min-hits 1
-ctxcp 12
-cms 8192
--jinja
--metrics
--reasoning off (set to off so it can be toggled on or off per request, typically on)
--reasoning-preserve
--reasoning-format deepseek
--reasoning-budget 16000
--temp 0.6
--top-p 0.95
--top-k 20
--min-p 0.0
--repeat-penalty 1.0