[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M79H0DP7258FPC3FR36SWMF0":3,"skill-same:01M79H0DP7258FPC3FR36SWMF0":45},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":26,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M79H0DP7258FPC3FR36SWMF0","hl-build-agent-app",null,"Build a complete agent app with LLM reasoning + tool execution on Hailo-10H.","Datnewlevel\u002FA.I-drone-pi5-hailo-hat","Datnewlevel","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F189353576?v=4","01M79GZD54F2AF7CXVBEKNXX3R","01M79GZD5RCAPCM33SR8Y3Y220",2,"MIT","https:\u002F\u002Fgithub.com\u002FDatnewlevel\u002FA.I-drone-pi5-hailo-hat\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-agent-app\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: hl-build-agent-app\ndescription: Build a complete agent app with LLM reasoning + tool execution on Hailo-10H.\n---\n\n# Skill: Build Agent Application with Tool Calling\n\nBuild a complete agent app with LLM reasoning + tool execution on Hailo-10H.\n\n## When This Skill Is Loaded\n\n- User wants an **LLM agent** that can **call tools \u002F functions**\n- User mentions: agent, tools, function calling, actions, execute\n- User needs an AI that can **do things** (not just chat)\n\n## Reference Implementation\n\nStudy `hailo_apps\u002Fpython\u002Fgen_ai_apps\u002Fagent_tools_example\u002F` — the canonical agent app:\n- `agent_tools_example.py` — Main agent loop\n- `tools\u002F` — Tool implementations (subclass `BaseTool`)\n- `config.yaml` — Tool configuration\n\nAlso study the agent utilities:\n- `gen_ai_utils\u002Fllm_utils\u002Ftool_parsing.py` — Parse LLM output for tool calls\n- `gen_ai_utils\u002Fllm_utils\u002Ftool_execution.py` — `BaseTool`, `ToolResult`\n- `gen_ai_utils\u002Fllm_utils\u002Ftool_discovery.py` — Auto-discover tools from directory\n\n## Build Process\n\n### Step 1: Create App Directory\n\nCreate the app directory:\n\n```\nhailo_apps\u002Fpython\u002F\u003Ctype>\u002F\u003Capp_name>\u002F\n├── app.yaml              # App manifest (type: gen_ai)\n├── run.sh                # Launch wrapper\n├── __init__.py\n├── \u003Capp_name>.py         # Main agent loop\n├── tools\u002F\n│   ├── __init__.py\n│   ├── config.yaml          # Tool metadata\n│   ├── my_tool_1.py         # Implements BaseTool\n│   └── my_tool_2.py         # Implements BaseTool\n└── README.md             # Usage documentation (REQUIRED — never skip)\n```\n\nCreate `app.yaml` with `type: gen_ai` and `run.sh` wrapper.\nDo NOT register in `defines.py` or `resources_config.yaml`.\n\n### Step 2: Build a Tool\n\nEach tool implements the `BaseTool` interface:\n\n```python\nfrom hailo_apps.python.gen_ai_apps.agent_tools_example.tools.base import BaseTool, ToolResult\n\nclass WeatherTool(BaseTool):\n    @property\n    def name(self) -> str:\n        return \"get_weather\"\n\n    @property\n    def description(self) -> str:\n        return \"Get current weather for a city\"\n\n    @property\n    def schema(self) -> dict:\n        return {\n            \"type\": \"object\",\n            \"properties\": {\n                \"city\": {\n                    \"type\": \"string\",\n                    \"description\": \"City name (e.g., 'Tel Aviv')\"\n                }\n            },\n            \"required\": [\"city\"]\n        }\n\n    def run(self, **kwargs) -> ToolResult:\n        city = kwargs[\"city\"]\n        # Actual implementation here\n        return ToolResult(\n            success=True,\n            data={\"city\": city, \"temperature\": 25, \"condition\": \"Sunny\"}\n        )\n```\n\n### Step 4: Build Tool Config\n\n```yaml\n# tools\u002Fconfig.yaml\nversion: \"1.0\"\ntool_name: \"my_agent\"\npersona: \"You are a helpful assistant with access to tools.\"\ncapabilities:\n  - \"Look up weather information\"\n  - \"Perform calculations\"\nfew_shot_examples:\n  - user: \"What's the weather in Tel Aviv?\"\n    assistant: \"I'll check the weather for you.\"\n    tool_call: '{\"name\": \"get_weather\", \"arguments\": {\"city\": \"Tel Aviv\"}}'\n```\n\n### Step 5: Build Main App\n\n```python\nimport signal\nimport argparse\n\nfrom hailo_apps.python.core.common.hailo_logger import get_logger\nlogger = get_logger(__name__)\n\nAPP_NAME = \"my_agent_app\"\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"My Agent App\")\n    parser.add_argument(\"--debug\", action=\"store_true\", help=\"Show tool calls\")\n    parser.add_argument(\"--multi-turn\", action=\"store_true\", help=\"Enable multi-turn context\")\n    parser.add_argument(\"--voice\", action=\"store_true\", help=\"Enable voice input\")\n    parser.add_argument(\"--no-tts\", action=\"store_true\", help=\"Disable TTS\")\n    args = parser.parse_args()\n\n    signal.signal(signal.SIGINT, lambda s, f: sys.exit(0))\n\n    # Initialize agent (uses AgentApp or custom loop)\n    # Tool discovery from tools\u002F directory\n    # Main loop: user input → LLM reasoning → tool parsing → execution → response\n\n\nif __name__ == \"__main__\":\n    main()\n```\n\n### Step 6: Validate\n\n```bash\npython3 .github\u002Fscripts\u002Fvalidate_app.py hailo_apps\u002Fpython\u002Fgen_ai_apps\u002Fmy_agent_app --smoke-test\n```\n\n## Critical Conventions\n\n1. **Tool interface**: Implement `BaseTool` with `name`, `description`, `schema`, `run()`\n2. **Return**: `ToolResult(success=bool, data=dict)`\n3. **Discovery**: Tools auto-discovered from `tools\u002F` directory\n4. **Config**: YAML with `persona`, `capabilities`, `few_shot_examples`\n5. **JSON Schema**: Each tool's `schema` property returns valid JSON Schema\n6. **Parsing**: Use `tool_parsing` utilities to extract tool calls from LLM output\n7. **Context**: `context_manager` for multi-turn, `StateManager` for persistence\n8. **Logging**: `get_logger(__name__)`\n\n## Agent Reasoning Loop\n\n```\nUser Input\n    │\n    ▼\nLLM generates response\n    │\n    ├── Contains tool call? → Parse → Execute tool → Feed result back to LLM\n    │                                                       │\n    │                                                       ▼\n    │                                              LLM generates final response\n    │\n    └── No tool call? → Direct response to user\n```\n\n","# Skill: Build Agent Application with Tool Calling\n\nBuild a complete agent app with LLM reasoning + tool execution on Hailo-10H.\n\n## When This Skill Is Loaded\n\n- User wants an **LLM agent** that can **call tools \u002F functions**\n- User mentions: agent, tools, function calling, actions, execute\n- User needs an AI that can **do things** (not just chat)\n\n## Reference Implementation\n\nStudy `hailo_apps\u002Fpython\u002Fgen_ai_apps\u002Fagent_tools_example\u002F` — the canonical agent app:\n- `agent_tools_example.py` — Main agent loop\n- `tools\u002F` — Tool implementations (subclass `BaseTool`)\n- `config.yaml` — Tool configuration\n\nAlso study the agent utilities:\n- `gen_ai_utils\u002Fllm_utils\u002Ftool_parsing.py` — Parse LLM output for tool calls\n- `gen_ai_utils\u002Fllm_utils\u002Ftool_execution.py` — `BaseTool`, `ToolResult`\n- `gen_ai_utils\u002Fllm_utils\u002Ftool_discovery.py` — Auto-discover tools from directory\n\n## Build Process\n\n### Step 1: Create App Directory\n\nCreate the app directory:\n\n```\nhailo_apps\u002Fpython\u002F\u003Ctype>\u002F\u003Capp_name>\u002F\n├── app.yaml              # App manifest (type: gen_ai)\n├── run.sh                # Launch wrapper\n├── __init__.py\n├── \u003Capp_name>.py         # Main agent loop\n├── tools\u002F\n│   ├── __init__.py\n│   ├── config.yaml          # Tool metadata\n│   ├── my_tool_1.py         # Implements BaseTool\n│   └── my_tool_2.py         # Implements BaseTool\n└── README.md             # Usage documentation (REQUIRED — never skip)\n```\n\nCreate `app.yaml` with `type: gen_ai` and `run.sh` wrapper.\nDo NOT register in `defines.py` or `resources_config.yaml`.\n\n### Step 2: Build a Tool\n\nEach tool implements the `BaseTool` interface:\n\n```python\nfrom hailo_apps.python.gen_ai_apps.agent_tools_example.tools.base import BaseTool, ToolResult\n\nclass WeatherTool(BaseTool):\n    @property\n    def name(self) -> str:\n        return \"get_weather\"\n\n    @property\n    def description(self) -> str:\n        return \"Get current weather for a city\"\n\n    @property\n    def schema(self) -> dict:\n        return {\n            \"type\": \"object\",\n            \"properties\": {\n                \"city\": {\n                    \"type\": \"string\",\n                    \"description\": \"City name (e.g., 'Tel Aviv')\"\n                }\n            },\n            \"required\": [\"city\"]\n        }\n\n    def run(self, **kwargs) -> ToolResult:\n        city = kwargs[\"city\"]\n        # Actual implementation here\n        return ToolResult(\n            success=True,\n            data={\"city\": city, \"temperature\": 25, \"condition\": \"Sunny\"}\n        )\n```\n\n### Step 4: Build Tool Config\n\n```yaml\n# tools\u002Fconfig.yaml\nversion: \"1.0\"\ntool_name: \"my_agent\"\npersona: \"You are a helpful assistant with access to tools.\"\ncapabilities:\n  - \"Look up weather information\"\n  - \"Perform calculations\"\nfew_shot_examples:\n  - user: \"What's the weather in Tel Aviv?\"\n    assistant: \"I'll check the weather for you.\"\n    tool_call: '{\"name\": \"get_weather\", \"arguments\": {\"city\": \"Tel Aviv\"}}'\n```\n\n### Step 5: Build Main App\n\n```python\nimport signal\nimport argparse\n\nfrom hailo_apps.python.core.common.hailo_logger import get_logger\nlogger = get_logger(__name__)\n\nAPP_NAME = \"my_agent_app\"\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"My Agent App\")\n    parser.add_argument(\"--debug\", action=\"store_true\", help=\"Show tool calls\")\n    parser.add_argument(\"--multi-turn\", action=\"store_true\", help=\"Enable multi-turn context\")\n    parser.add_argument(\"--voice\", action=\"store_true\", help=\"Enable voice input\")\n    parser.add_argument(\"--no-tts\", action=\"store_true\", help=\"Disable TTS\")\n    args = parser.parse_args()\n\n    signal.signal(signal.SIGINT, lambda s, f: sys.exit(0))\n\n    # Initialize agent (uses AgentApp or custom loop)\n    # Tool discovery from tools\u002F directory\n    # Main loop: user input → LLM reasoning → tool parsing → execution → response\n\n\nif __name__ == \"__main__\":\n    main()\n```\n\n### Step 6: Validate\n\n```bash\npython3 .github\u002Fscripts\u002Fvalidate_app.py hailo_apps\u002Fpython\u002Fgen_ai_apps\u002Fmy_agent_app --smoke-test\n```\n\n## Critical Conventions\n\n1. **Tool interface**: Implement `BaseTool` with `name`, `description`, `schema`, `run()`\n2. **Return**: `ToolResult(success=bool, data=dict)`\n3. **Discovery**: Tools auto-discovered from `tools\u002F` directory\n4. **Config**: YAML with `persona`, `capabilities`, `few_shot_examples`\n5. **JSON Schema**: Each tool's `schema` property returns valid JSON Schema\n6. **Parsing**: Use `tool_parsing` utilities to extract tool calls from LLM output\n7. **Context**: `context_manager` for multi-turn, `StateManager` for persistence\n8. **Logging**: `get_logger(__name__)`\n\n## Agent Reasoning Loop\n\n```\nUser Input\n    │\n    ▼\nLLM generates response\n    │\n    ├── Contains tool call? → Parse → Execute tool → Feed result back to LLM\n    │                                                       │\n    │                                                       ▼\n    │                                              LLM generates final response\n    │\n    └── No tool call? → Direct response to user\n```\n\n",{"name":5,"description":7},"main","b285906ff105666c6100208690d89f76f2c51e45",".github\u002Fskills\u002Fhl-build-agent-app",0,"https:\u002F\u002Fgithub.com\u002FDatnewlevel\u002FA.I-drone-pi5-hailo-hat","https:\u002F\u002Fgithub.com\u002FDatnewlevel","Embedded Developer | datnewlevel's workspace","2026-07-21 23:34:00",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add Datnewlevel\u002FA.I-drone-pi5-hailo-hat --skill hl-build-agent-app",{"tool":37,"command":38},"bunx","bunx skills add Datnewlevel\u002FA.I-drone-pi5-hailo-hat --skill hl-build-agent-app",{"tool":40,"command":41},"pnpm","pnpm dlx skills add Datnewlevel\u002FA.I-drone-pi5-hailo-hat --skill hl-build-agent-app","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDatnewlevel\u002FA.I-drone-pi5-hailo-hat\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-agent-app\u002FSKILL.md",true,[],[46,52,59,66,73,80],{"skillNo":47,"name":48,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":49,"categories":50,"keywords":51,"publishedAt":18},"01M79H0Z6ZCSMHZGRZT4XNPKZ1","hl-build-voice-app","https:\u002F\u002Fgithub.com\u002FDatnewlevel\u002FA.I-drone-pi5-hailo-hat\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-voice-app\u002FSKILL.md",[],[],{"skillNo":53,"name":54,"nameZh":6,"description":55,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":58,"publishedAt":18},"01M79H0V6G7WR1THHEJYK0E9Q5","hl-build-vlm-app","Build a complete Vision-Language Model application that uses the Hailo-10H VLM for image understanding.","https:\u002F\u002Fgithub.com\u002FDatnewlevel\u002FA.I-drone-pi5-hailo-hat\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-vlm-app\u002FSKILL.md",[],[],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":18},"01M79H0S34YW4NPQQNM4TCQ48D","hl-build-standalone-app","Build a complete standalone app using HailoInfer + OpenCV on Hailo-8\u002F8L\u002F10H.","https:\u002F\u002Fgithub.com\u002FDatnewlevel\u002FA.I-drone-pi5-hailo-hat\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-standalone-app\u002FSKILL.md",[],[],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":18},"01M79H0NH2XZZZ3XME7KGM9Z09","hl-build-pipeline-app","Build a complete GStreamer pipeline app for real-time video processing on Hailo-8\u002F8L\u002F10H.","https:\u002F\u002Fgithub.com\u002FDatnewlevel\u002FA.I-drone-pi5-hailo-hat\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-pipeline-app\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":18},"01M79H0KGH250T5B4HQYNP88FD","hl-build-llm-app","Build a complete LLM text generation app running on Hailo-10H.","https:\u002F\u002Fgithub.com\u002FDatnewlevel\u002FA.I-drone-pi5-hailo-hat\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-llm-app\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":18},"01M79H0CP44JQRYMQEYKC6M8YB","hl-validate","Validation at every phase gate.","https:\u002F\u002Fgithub.com\u002FDatnewlevel\u002FA.I-drone-pi5-hailo-hat\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fhl-validate\u002FSKILL.md",[],[]]