yao/agent
Max 2a839ff94e Add Claude CLI argument mapping for sandbox arguments
- Introduce a whitelist mapping for `package.yao` sandbox arguments to corresponding Claude CLI flags, allowing selective argument passing.
- Update `BuildCommandWithContinuation` to iterate over the whitelist and append valid arguments to the Claude CLI command.

This change enhances the flexibility of argument handling in the Claude CLI, ensuring only specified arguments are processed.
2026-02-08 12:57:10 +08:00
..
assistant Add secure proxy configuration with options and secrets support 2026-01-31 22:46:48 +08:00
caller Fix SystemPrompt passing and Claude CLI stream-json parsing 2026-01-31 15:07:40 +08:00
content Enhance PDF and Content Processing with New File Handling Features 2025-12-29 15:20:38 +08:00
context Add sandbox ID and VNC URL methods to sandbox executor 2026-02-05 21:46:07 +08:00
docs Enhance Sandbox API and Integration Tests 2026-01-30 17:56:57 +08:00
i18n Add secure proxy configuration with options and secrets support 2026-01-31 22:46:48 +08:00
llm Refactor API URL building in OpenAI and Claude components 2026-02-08 12:31:28 +08:00
memory Enhance JSAPI and Context Management for Sub-Agent Calls 2026-01-26 10:48:00 +08:00
output Implement Agent-to-Agent Call Enhancements and Context Management 2026-01-26 18:14:34 +08:00
robot Add Execution Completion Callback to Worker Pool 2026-01-28 19:35:38 +08:00
sandbox Add Claude CLI argument mapping for sandbox arguments 2026-02-08 12:57:10 +08:00
search Enhance PDF and Content Processing with New File Handling Features 2025-12-29 15:20:38 +08:00
store Add secure proxy configuration with options and secrets support 2026-01-31 22:46:48 +08:00
test Enhance Agent Documentation and Add Extract Command Functionality 2026-01-27 10:57:27 +08:00
testutils Update Dependencies and Enhance Agent Context with Forked Context Support 2026-01-25 20:32:02 +08:00
types Enhance Assistant Configuration with RobotPrompt Support 2026-01-22 18:55:30 +08:00
agent_test.go ⚠️ BREAKING: Removed the Studio package and renamed Neo to Agent. Configuration file path changed from neo/neo.yml to agent/agent.yml. 2025-11-06 18:13:54 +08:00
load.go Enhance Assistant Configuration with RobotPrompt Support 2026-01-22 18:55:30 +08:00
load_test.go Implement search configuration management and testing enhancements 2025-12-13 11:19:20 +08:00
README.md Enhance Agent Documentation and Add Extract Command Functionality 2026-01-27 10:57:27 +08:00

Yao Agent

A powerful AI assistant framework for building intelligent conversational agents with tool integration, knowledge base search, and multi-agent orchestration.

Quick Start

1. Create an Assistant

assistants/
└── my-assistant/
    ├── package.yao      # Configuration
    ├── prompts.yml      # System prompts
    └── locales/
        └── en-us.yml    # Translations

package.yao

{
  "name": "{{ name }}",
  "connector": "gpt-4o",
  "description": "{{ description }}",
  "placeholder": {
    "title": "{{ chat.title }}",
    "prompts": ["{{ chat.prompts.0 }}"]
  }
}

prompts.yml

- role: system
  content: |
    You are a helpful assistant.

locales/en-us.yml

name: My Assistant
description: A helpful AI assistant
chat:
  title: New Chat
  prompts:
    - How can I help you today?

2. Add Hooks (Optional)

Create src/index.ts for custom logic:

import { agent } from "@yao/runtime";

function Create(ctx: agent.Context, messages: agent.Message[]): agent.Create {
  // Preprocess messages before LLM call
  return { messages };
}

function Next(ctx: agent.Context, payload: agent.Payload): agent.Next {
  // Post-process LLM response
  return null;
}

3. Test (Optional)

# Run tests
yao agent test -i "Hello, how are you?"

# Run tests from JSONL file
yao agent test -i tests/inputs.jsonl -v

# Extract results for review
yao agent extract output-*.jsonl

4. Run

yao start

Access via API: POST /v1/chat/completions

Examples

Hook: Route to Specialist

// src/index.ts
function Create(ctx: agent.Context, messages: agent.Message[]): agent.Create {
  const last = messages[messages.length - 1]?.content || "";
  if (last.includes("refund")) {
    return { delegate: { agent_id: "refund-specialist", messages } };
  }
  return null;
}

Database Query

// package.yao - Enable auto DB search
{ "db": { "models": ["orders", "products"] } }
# Test: Agent auto-generates QueryDSL and searches database
yao agent test -i "Find orders over $1000 from last month"

MCP Tools (Process Transport)

// mcps/tools.mcp.yao - Define MCP server with Yao Processes
{
  "label": "Tools",
  "transport": "process",
  "tools": {
    "search_orders": "models.order.Paginate",
    "create_order": "models.order.Create"
  }
}
// mcps/mapping/tools/schemes/search_orders.in.yao - Input schema
{
  "type": "object",
  "properties": {
    "keyword": { "type": "string" },
    "page": { "type": "integer" }
  },
  "x-process-args": [":arguments"]
}
// package.yao
{ "mcp": { "servers": [{ "server_id": "tools" }] } }

Sidebar Page (Display Data)

Pages render in the right sidebar during conversation to display structured data:

<!-- pages/result/result.html - Display query results -->
<div class="result-panel">
  <h3>{{ title }}</h3>
  <table s:if="{{ rows.length > 0 }}">
    <tr s:for="{{ rows }}" s:for-item="row">
      <td>{{ row.name }}</td>
      <td>{{ row.value }}</td>
    </tr>
  </table>
</div>
yao sui build agent    # Build pages
// In hook: send action to open page in sidebar
ctx.Send({
  type: "action",
  props: {
    name: "navigate",
    payload: {
      route: "/agents/my-assistant/result",
      title: "Query Results",
      query: { id: "123" }, // Passed as $query in page
    },
  },
});

Documentation

Architecture

flowchart LR
    subgraph Request
        A[User Request]
    end

    subgraph Create["Create Hook"]
        B1[Preprocess Messages]
        B2[Configure LLM]
        B3[Delegate to Agent]
    end

    subgraph LLM["LLM Call"]
        C1[Load Prompts]
        C2[Generate Response]
    end

    subgraph Tools["Tool Execution"]
        D1[MCP Tools]
        D2[Search]
        D3[Memory]
    end

    subgraph Next["Next Hook"]
        E1[Process Results]
        E2[Transform Output]
        E3[Delegate to Agent]
    end

    subgraph Response
        F[Stream Response]
    end

    A --> Create
    Create --> LLM
    LLM --> Tools
    Tools --> Next
    Next --> Response
    Next -.->|Continue| LLM

API Endpoints

OpenAPI endpoints (base URL: /v1):

Endpoint Method Description
/v1/chat/completions POST Chat with assistant
/v1/chat/sessions GET List chat sessions
/v1/chat/sessions/:chat_id GET Get chat session
/v1/chat/sessions/:chat_id/messages GET Get messages
/v1/agent/assistants GET List assistants
/v1/agent/assistants/:id GET Get assistant details
/v1/file/:uploaderID POST Upload files
/v1/file/:uploaderID/:fileID GET Get file info
/v1/file/:uploaderID/:fileID/content GET Download file

License

This project is part of the Yao App Engine and follows the Yao Open Source License.