The actual breakdown of how a Soar analysis template works before anyone tells you it's magic

Most people trying to build a Soar production system hit the same wall on day two. They understand the basic concept—goals trigger productions, which fire in working memory—but the moment they try to write a reusable template for analyzing a new problem domain, the whole thing collapses into a thousand half-written productions that don't compose. A Soar Analysis Template Free doesn't fix this automatically, but it does give you a structured starting point that forces you to think about state descriptors before you write any productions, which is the mistake most beginners make. The core idea is simpler than the documentation makes it sound. You define a goal object in working memory, you specify the subgoals it decomposes into, and you map the productions that transition between those states. The template just lays this out in a spreadsheet or document so you aren't trying to hold it all in your head while also debugging why your reread loop is firing wrong. I've been building Soar agents since the mid-2000s, and the template format hasn't changed much because the problem it solves hasn't changed much.

Soar Analysis Template Free - what you actually get when you download it

The free version typically includes a set of blank tables for goal hierarchy, operator selection criteria, and production rules with their conditions and effects. It won't include any domain-specific productions, which some people seem surprised by. You still have to write your own rules. The template is structure, not content. I've seen people treat these templates like they're a complete solution, which is why they end up frustrated when they download one and realize they still have 200 lines of production code to write. What the template does save you is the organizational overhead. Without one, I've watched people spend three days writing productions and another four realizing their state descriptor naming was inconsistent across modules. The template forces consistent field names and makes it obvious when a production is missing a required condition. That's worth something even if it feels mundane.

How to actually use the template without making it useless

Start by filling in the goal decomposition section before you write a single production. This means listing every subgoal your main goal will need to achieve and the expected state of working memory when each subgoal completes. If you can't describe the termination condition for a subgoal in one sentence, you haven't decomposed it finely enough. I learned this the hard way on a scheduling agent project where I tried to write productions for a "find optimal route" subgoal without defining what optimal meant in terms of working memory attributes. The agent would loop for hours because no production ever matched a completion condition that was clearly specified nowhere. Next, map your operators. Each operator needs a name, a precondition check, and an effect description. The effects section is where most templates and most people fail. You need to be explicit about what changes in working memory when the operator fires, not just what it produces as output. Soar's rereading mechanism depends on these state transitions being precise. Vague effect descriptions like "updates the solution" will get you stuck in infinite loops or wrong decisions, and debugging reread cycles is not enjoyable. Then fill in the production table row by row. Each row should correspond to one production. Column headers typically include the production name, the matching conditions on working memory elements, and the resulting effects. Keep the conditions minimal. Beginners tend to write productions that match on everything they think might be relevant, which creates fragile rule sets that break when the working memory state shifts slightly. Match on what actually matters for the decision, nothing more.

Get the Full Details

SOAR Analysis Template - Free Download | HiSlide.io
SOAR Analysis Template - Free Download | HiSlide.io

A specific edge case that the template documentation never covers

I ran into this on a diagnostic reasoning agent for industrial equipment fault detection. The template worked fine for the standard diagnosis flow, but I hit a problem where multiple fault hypotheses were active simultaneously and the agent needed to dynamically demote one subgoal and promote another based on sensor data that arrived late. The template has no section for goal promotion or demotion logic. There's a brief mention in the Soar textbook about this, but the free template doesn't give you a structured way to plan for it. My workaround was to add a separate column in the production table called "goal management action" and mark which productions triggered restructuration versus standard rereading. It wasn't in the original template, so I had to modify it myself, but it prevented me from writing productions that I couldn't track across the goal hierarchy. This kind of adaptation is normal. The free template is a starting point, not a finished workflow document. I've modified mine every project since to include sections for impasses, reread counts, and goal stack depth, because those are the things that actually tell you when your agent is spiraling.

Counter-intuitive things about Soar analysis that nobody mentions in tutorials

First, spending more time on the template usually doesn't make your agent smarter. It makes your agent debuggable. The template quality correlates with development speed, not with agent performance. A beautifully filled-out template for a poorly designed production set is still a poorly designed production set. I've seen teams spend a week on template documentation and then two months debugging the actual rules because the template gave them a false sense of completeness. Second, the most useful section of any Soar analysis template is the one nobody fills out: the impasse log. When your agent gets stuck, the production rules that fired right before the impasse matter more than the rules you planned. I keep a running log of every impasse type encountered during development and cross-reference it with the template's goal hierarchy. This is how you find the gap between what the template predicted and what actually happened in working memory. The template is a hypothesis. The impasse log is the data that revises it.

Where the Soar Analysis Template Free falls apart

It doesn't handle non-monotonic reasoning well. If your problem domain requires retracting or revising hypotheses based on new evidence, the static goal hierarchy in the template becomes misleading. You'll fill out a clean decomposition and then realize halfway through implementation that three of those subgoals need to be dynamically restructured, not just completed sequentially. The template format doesn't accommodate that gracefully. It also assumes a single main goal per analysis pass. Multi-agent scenarios, where several Soar agents interact through shared working memory or messaging, require a different organizational structure that the free template doesn't provide. I ended up using a modified version with agent-level sections and inter-agent message logs, which was basically rebuilding part of the template from scratch. If you're working in a multi-agent setup, expect to adapt the template significantly rather than using it as-is. For simple procedural tasks, the template works adequately. For anything involving learning, adaptation, or real-time decision changes, you'll outgrow it quickly. In those cases, a tool like JSoar's built-in debugger with its production trace and state history features will give you more practical insight than any filled-out template. The template is best used as a planning document during the design phase, not as a living artifact throughout the project.

[Free] SOAR Analysis Template & Step-by-Step Guide - AIHR
[Free] SOAR Analysis Template & Step-by-Step Guide - AIHR

What to do if the free template isn't enough for your project

There are a few commercial Soar development tools that include more sophisticated analysis templates, but they're expensive and often overkill for small projects. A practical middle ground is to export your working memory snapshots from JSoar during test runs and use those to reverse-engineer a more accurate template. This is slower than starting with a blank template, but it produces something that actually reflects your agent's behavior rather than your intentions for it. Another option is to abandon the traditional template format entirely and use a production graph visualization. Tools like Graphviz or even hand-drawn state transition diagrams can make impasse patterns and reread loops more visible than any spreadsheet. I switched to this approach on my last project and cut debugging time by roughly half compared to my previous template-driven workflow. The template still has its place for initial design, but the visualization approach is where I end up spending most of my time after the first implementation cycle.