Back to TechSheets
Beyond Chat: Architecting Steerable AI Agents with Canvases and Robust AX Evals

Beyond Chat: Architecting Steerable AI Agents with Canvases and Robust AX Evals

Thanga MariappanSenior Architect
12 min read
Aug 21, 2026

Beyond Chat: Architecting Steerable AI Agents with Canvases and Robust AX Evals

As a Senior Front-End Architect, I've seen countless paradigms shift, but few hold the transformative power of AI agents. We're moving beyond mere chatbots and prompt engineering into a realm where AI proactively orchestrates complex tasks, making decisions, and interacting with systems autonomously. This is the promise of agentic workflows – AI systems that reason, plan, and execute multi-step processes.

However, this power comes with significant challenges. As GitHub's recent posts highlight, agent work can easily get "lost in the scroll." Imagine an AI agent autonomously managing a feature rollout across your SDLC. Without visibility, steerability, and robust evaluation, such an agent is a black box, a potential liability, or at best, an underutilized assistant.

Today, we'll dive deep into two pivotal concepts that are defining the next generation of AI agent development: canvases for visible, steerable workflows and Agent Experience (AX) Evaluations for robust, reliable agents.

The Rise of Agentic Workflows: Beyond the Chat Interface

For too long, our interaction with advanced AI has been largely confined to a chat window. We type a prompt, the AI responds. This synchronous, turn-based model works well for simple queries or content generation. But what happens when the AI needs to perform a sequence of actions, make conditional decisions, call external APIs, and even self-correct? The chat interface quickly breaks down.

Agentic workflows represent a fundamental shift. An AI agent, equipped with tools, memory, and a planning module, can decompose a high-level goal into actionable steps. It can:

  1. Understand: Interpret complex intent.
  2. Plan: Break down the intent into a series of sub-tasks.
  3. Execute: Utilize available tools (APIs, code interpreters, databases) to perform each sub-task.
  4. Observe: Monitor the outcome of its actions.
  5. Reflect & Self-Correct: Adjust its plan based on observations, identifying and resolving issues.

Consider an agent tasked with "Onboard a new developer." This isn't a single chat response; it's a multi-stage process involving creating accounts, granting permissions, assigning initial tasks, sending welcome emails, and more. Each step might involve different internal systems and potentially human approvals.

Canvases: Visualizing and Steering the Invisible

The GitHub Blog's emphasis on "how canvases make agentic workflows visible, steerable, and cost-efficient" is a critical insight. When an agent executes a complex plan, its internal monologue and step-by-step actions get buried in logs or a rapidly scrolling chat history. This leads to several problems:

  • Lack of Transparency: You don't know what the agent is doing or why.
  • Debugging Nightmare: When things go wrong, pinpointing the failure point is incredibly difficult.
  • Loss of Control: How do you intervene if the agent is going off-track or needs human input?
  • Cost Inefficiency: Blind execution can lead to wasted API calls or compute cycles.

A canvas paradigm addresses these issues by providing a visual, interactive representation of the agent's journey. Think of it not as a literal HTML canvas, but as a dynamic dashboard that renders the agent's thought process and actions as a flow, a graph, or a sequence diagram.

How Canvases Transform Agent Interaction:

  1. Visibility: Each planned step, executed action, tool call, and its output is a node on the canvas. You see the agent's real-time progress, decision points, and the data flowing between steps.
  2. Steerability: Canvases introduce explicit intervention points. If an agent proposes a plan, you can review it before execution. If it encounters ambiguity, it can pause and prompt you for clarification, displaying the context directly on the canvas. You might even be able to "rewind" to a previous state and guide it down a different path.
  3. Explainability: By visualizing the internal state and reasoning, canvases help users understand how the agent arrived at a particular conclusion or action, fostering trust and enabling learning.
  4. Debugging & Optimization: Developers can replay agent runs, inspect the state at each node, and identify bottlenecks or errors much faster than sifting through text logs. This directly translates to cost efficiency by preventing erroneous or redundant executions.

A Conceptual Canvas for a "Feature Rollout Agent" (Fictional Scenario)

Imagine a canvas for an agent tasked with releasing a new feature:

  • Node 1: Plan Generation: Agent receives "Release Feature X." It generates a multi-step plan.
  • Node 2: Plan Review (Human-in-the-Loop): The canvas displays the proposed plan (e.g., "1. Build; 2. Test; 3. Deploy to Staging; 4. Await QA Approval; 5. Deploy to Production"). A human can approve, modify, or reject it.
  • Node 3: Build & Test (Automated): Agent triggers CI/CD pipeline, outputting build status and test results to the canvas.
  • Node 4: Deploy to Staging (Automated): Agent calls deployment tool, updates canvas with URL and status.
  • Node 5: QA Approval (Human-in-the-Loop): Agent pauses, canvas shows staging environment link, and waits for a human "Approve" or "Reject" action. If rejected, it might branch to a "Fix Bug" sub-plan.
  • Node 6: Deploy to Production (Automated): Upon approval, agent proceeds, updating canvas with production status.

This visual flow transforms a opaque process into a transparent, collaborative one.

The Crucial Role of Agent Experience (AX) Evals

Building these complex agents demands a new approach to testing and quality assurance. As the Microsoft Dev Blog wisely states, "Most changes you think will improve AI agent behavior won't." Traditional unit tests, while still valuable, don't capture the nuanced, often non-deterministic, and context-dependent behavior of an AI agent.

This is where Agent Experience (AX) Evaluations come in. AX Evals are about measuring the end-to-end effectiveness of an agent in real-world scenarios, simulating user interactions and system responses to determine if the agent truly works and improves the user's experience. It's not just about if a function returns the correct value, but if the agent successfully achieves its high-level goal, handles edge cases gracefully, and provides a positive interaction.

Challenges in Testing AI Agents:

  • Non-Determinism: LLMs introduce variability. The same prompt might yield slightly different outputs.
  • External Dependencies: Agents heavily rely on external APIs, databases, and tools. Hitting these in every test run is slow, costly, and can have unintended side effects on production data.
  • Context Sensitivity: Agent behavior is highly dependent on its internal state, memory, and the history of interactions.
  • Subjective Outcomes: "Correctness" for an agent can be subjective (e.g., a good summary, a helpful next step).

Practical Approaches to Robust AX Evals:

  1. Mocking External APIs Transparently: As the Microsoft Dev Blog suggests, mock your APIs! This is paramount for fast, repeatable, and isolated agent skill testing. Instead of hitting a live payment gateway, you mock its response to simulate success, failure, or specific error codes. This allows extensive testing without financial cost or data mutation.
  2. Emulating Environment Changes Locally: Test how your agent behaves if an API schema changes, or if a specific configuration is present/absent. Local emulation of documentation, API, or server changes allows you to validate hypotheses before shipping to production.
  3. Scenario-Based Testing: Define a rich suite of realistic user scenarios, including happy paths, edge cases, and failure modes. Each scenario should have a clear expected outcome, which could be a specific action, a generated output, or a state change.
  4. Golden Runs & Regression Testing: Establish a set of "golden runs" – successful agent executions for critical scenarios. Regularly run these and compare outputs/behaviors to detect regressions caused by model updates or code changes.
  5. Human-in-the-Loop Evaluation: For subjective aspects, human review of agent outputs remains crucial. Automated metrics can guide, but human judgment validates.

Code Example: Mocking an Agent Skill

Here's a conceptual Python example demonstrating how to mock an external API call to test an agent's skill without hitting a real endpoint:

import unittest
from unittest.mock import MagicMock

# --- Agent Component Definitions (Simplified) ---

class ProductCatalogAPIClient:
    """Simulates an external API client for product information."""
    def get_product_details(self, product_id: str) -> dict | None:
        # In a real scenario, this would make an HTTP request
        print(f"[API Call] Fetching details for product_id: {product_id}")
        if product_id == "PROD101":
            return {"id": "PROD101", "name": "SmartLamp", "price": 79.99, "stock": 150}
        return None

class InventoryAgentSkill:
    """A skill for an AI agent to check product inventory."""
    def __init__(self, api_client: ProductCatalogAPIClient):
        self.api_client = api_client

    def check_product_stock(self, product_id: str) -> str:
        details = self.api_client.get_product_details(product_id)
        if details and details.get("stock") is not None:
            return f"Product '{details['name']}' (ID: {product_id}) has {details['stock']} units in stock."
        return f"Could not retrieve stock for product ID: {product_id}."

# --- AX Evaluation / Unit Test ---

class TestInventoryAgentSkill(unittest.TestCase):
    def setUp(self):
        # Create a MagicMock object that mimics ProductCatalogAPIClient
        # This mock will replace the actual API client during testing
        self.mock_api_client = MagicMock(spec=ProductCatalogAPIAPIClient)
        self.skill_under_test = InventoryAgentSkill(self.mock_api_client)

    def test_check_product_stock_found_in_stock(self):
        # Configure the mock's 'get_product_details' method
        # to return a specific value when called.
        self.mock_api_client.get_product_details.return_value = {
            "id": "PROD101", "name": "Mocked Gadget", "price": 10.00, "stock": 50
        }

        result = self.skill_under_test.check_product_stock("PROD101")

        # Assert that the API method was called correctly
        self.mock_api_client.get_product_details.assert_called_with("PROD101")
        # Assert the skill's output is as expected
        self.assertIn("50 units in stock", result)
        self.assertIn("Mocked Gadget", result)

    def test_check_product_stock_not_found(self):
        # Configure the mock to return None, simulating product not found
        self.mock_api_client.get_product_details.return_value = None

        result = self.skill_under_test.check_product_stock("PROD999")

        self.mock_api_client.get_product_details.assert_called_with("PROD999")
        self.assertIn("Could not retrieve stock", result)

    def test_check_product_stock_api_error_scenario(self):
        # Configure the mock to raise an exception, simulating an API error
        self.mock_api_client.get_product_details.side_effect = ConnectionError("API is down")

        result = self.skill_under_test.check_product_stock("PROD101")

        self.mock_api_client.get_product_details.assert_called_with("PROD101")
        # The agent's skill should ideally handle this error gracefully.
        # For this example, it defaults to the 'not found' message.
        self.assertIn("Could not retrieve stock", result)

# To run these tests:
# 1. Save the code as e.g., `agent_eval_example.py`.
# 2. Run `python -m unittest agent_eval_example.py` in your terminal.

This simple example illustrates how you can isolate and thoroughly test an agent's individual skills and its response to various API outcomes, without making actual network calls. For full AX Evals, these skill tests would be integrated into larger, scenario-driven end-to-end evaluations.

Architecting Your Own Agentic Canvas: A High-Level View

Building a visual, steerable canvas for your agents requires a well-thought-out architecture:

  • Frontend (Canvas UI): A modern JavaScript framework (React, Vue, Angular) paired with a graph visualization library (e.g., React Flow, D3.js, GoJS) to render the workflow nodes and edges. This layer would handle user interactions for steering, input, and feedback.
  • Agent Orchestration Engine: This is the core logic that manages the agent's planning, tool execution, memory, and reflection. Frameworks like LangChain or LlamaIndex provide excellent starting points, or you can build a custom engine for fine-grained control.
  • State Management & API: The orchestration engine needs to expose an API to the frontend, streaming real-time updates about the agent's state, current step, outputs, and any required human interventions. A robust state management system on the backend is crucial to maintain agent context across interactions and potential pauses.
  • Tooling & Integrations: A robust set of tools (APIs, databases, external services) that the agent can invoke, with clear schemas and well-defined functionalities. Mocking these tools for development and testing is essential.

The frontend acts as the "eyes and hands" for both the human and the agent. It displays the agent's intent and progress, and allows the human to "inject" new instructions or correct the agent's path when necessary.

Trade-offs and Considerations

While agentic workflows with canvases and AX Evals offer immense advantages, they come with their own set of considerations:

  • Increased Complexity: Designing and implementing such a system is more complex than simple prompt-response models. It requires careful architecture, robust error handling, and sophisticated state management.
  • Performance Overhead: Real-time visualization of complex workflows can introduce performance considerations, especially with very chatty agents or deeply nested plans.
  • Balancing Autonomy and Control: Finding the right balance between giving the agent enough autonomy to be effective and retaining sufficient human control for safety and oversight is an ongoing design challenge.
  • Evaluation Overhead: AX Evals, while critical, require significant investment in test data, scenario design, and automation infrastructure.

Key Takeaways

  • Agentic Workflows are the Future: AI is moving towards autonomous, multi-step task execution beyond simple chat interactions.
  • Canvases are Essential for Visibility: Visualizing agent plans, progress, and decision points transforms opaque AI into transparent, steerable systems.
  • AX Evals are Non-Negotiable: Traditional testing methods are insufficient for complex agents. Adopt Agent Experience (AX) Evaluations to measure real-world performance and ensure reliability.
  • Mocking is Your Best Friend: Isolate and test agent skills effectively by mocking external API calls and environment changes.
  • Architecture Matters: A well-designed system, from the frontend canvas to the backend orchestration engine, is crucial for building robust and useful steerable AI agents.

What You Should Do Today

  1. Start Experimenting with Agent Frameworks: Dive into LangChain, LlamaIndex, or even build a small custom agent. Understand how they plan, execute, and use tools.
  2. Think Visually: For your next agent project, don't just consider the chat interface. Sketch out how a visual canvas could represent its workflow. What would be the key nodes and interaction points?
  3. Prioritize AX Evals: As you build, integrate AX Evals from the start. Design robust scenarios and explore mocking techniques to make your testing efficient and comprehensive.
  4. Stay Updated: The field of AI agents is evolving rapidly. Follow blogs like GitHub's and Microsoft's developer insights to keep abreast of the latest patterns and best practices. GitHub Universe 2026 is around the corner – keep an eye out for more deep dives into agent apps and workflows!