create-tool
新規ツール(Python + JSON)を生成し、i18n翻訳(全34ロケール)・ruff/black整形・py_compile検証まで一貫実行する。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
新規ツール(Python + JSON)を生成し、i18n翻訳(全34ロケール)・ruff/black整形・py_compile検証まで一貫実行する。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
日本郵便の郵便料金(手紙・はがき・定形外・ゆうメール・速達・書留)を検索できるスキル。2025年11月改訂版データを組み込み。
uag 同梱の「プロンプトテンプレート集」を Agent Skills 形式で提供するスキル。 - 本スキルはツール実行スキルではなく、テンプレ文章(Markdown)を参照するための“ライブラリ”です。 - 旧 src/uagent/prompts 配下のテンプレートを移設しています。
Browser automation CLI for AI agents — Chrome/Chromium via CDP with accessibility-tree snapshots. Navigate, interact, extract, crawl, swarm, and loop. Covers every CLI command with decision trees and copy-paste templates.
batch_state を使う反復作業で、順番の崩れ・脱線・処理漏れを防ぐための実行用スキル。 状態を load/update しながら、1ステップずつ着実に処理する。
指定された地域のダミーの天気を返します。
dist 配下の配布物(wheel / sdist)を PYPI_TOKEN で PyPI へアップロードするための手順を規定化したスキル。
SOC 직업 분류 기준
| name | create-tool |
| description | 新規ツール(Python + JSON)を生成し、i18n翻訳(全34ロケール)・ruff/black整形・py_compile検証まで一貫実行する。 |
| license | Apache-2.0 |
agentcli に新規ツールを追加する一連の工程を自動実行する。 手作業で抜けがちな i18n翻訳(全34言語)・コード整形・構文チェック まで含めて完了する。
ユーザーに以下を質問し、全て揃ったら実行を開始する。
pdf_ocr)tool.description に使う1行(簡潔に)run_tool() の処理内容これから新規ツールを作成します。以下を教えてください:
1. ツール名(例: pdf_ocr)
2. 英語の説明(簡潔に)
3. 引数(JSON形式、説明は簡潔に)
4. 実装の概要(何をするツールか)
5. x_search_terms(省略可)
注: 日本語を含む全ロケールの翻訳は translate_text で自動生成する。
以下の項目はユーザー入力ではなく、LLMがツールの実装内容から判断して設定する。
| 項目 | 判断基準 |
|---|---|
tool_genre | ツールの機能から判断。ファイル操作→file、API呼出→external、デバイス制御→iot、開発補助→devel、汎用→basic |
BUSY_LABEL | 時間のかかる処理なら True、即時返却なら False |
STATUS_LABEL | 任意。表示用ラベル文字列、なければ None |
LAZY_LOAD | 重いimport(PIL/numpy等)が必要な場合のみ True |
tool_level | 基本的に省略(=0)。システム内部用なら -1(隠し) |
x_parallel_safe | 副作用なし並列実行安全なら True、状態変更するなら False |
additionalProperties | 基本的に False |
python_exec ツール)translate_text / lint_format / python_compile / create_filesrc/uagent/tools/ が書き込み可能search_files(glob="<name>_tool.*", path="src/uagent/tools") で既存ツールと重複しないか確認create_file で src/uagent/tools/<name>_tool.py を生成する。
from __future__ import annotations
# src/uagent/tools/<name>_tool.py
from .i18n_helper import make_tool_translator
_ = make_tool_translator(__file__)
from typing import Any
BUSY_LABEL = False # LLM判断
STATUS_LABEL = None
TOOL_SPEC: dict[str, Any] = {
"type": "function",
"tool_genre": "<genre>", # LLM判断
"x_parallel_safe": False,
"function": {
"name": "<name>",
"description": _(
"tool.description",
default="<english description>",
),
"x_search_terms": _(
"x_search_terms",
default=[<x_search_terms_english_array>],
),
"x_search_terms_en": [<x_search_terms_english_array>],
"parameters": {
"type": "object",
"properties": {
<param_name>: {
"type": "<type>",
"description": _(
"param.<param_name>.description",
default="<english description>",
),
}
},
"required": [<required_param_names>],
"additionalProperties": False,
},
},
}
def run_tool(args: dict[str, Any]) -> str:
<implementation>
_("key", default="...") で全ユーザー向け文字列をラップtool.description, param.<name>.description の命名規則x_search_terms は _("x_search_terms", default=[...])(i18n経由で現在ロケールの配列を読む)x_search_terms_en は英語配列を直書き(英語検索用の fallback、i18n を通さない)run_tool() は必ず str を返すpython_exec で以下のスクリプトを実行し、src/uagent/tools/<name>_tool.json を一発生成する。
en セクションをユーザー入力から作成ja を含む残り33ロケールについて、translate_text を呼び出して翻訳json.dumps(indent=2, ensure_ascii=False) で書き出しtool.descriptionx_search_terms(配列の各要素を翻訳)param.<name>.description(各パラメータ)| JSON locale | Google code |
|---|---|
| ja | ja |
| es | es |
| fr | fr |
| ko | ko |
| de | de |
| it | it |
| ru | ru |
| pt_br | pt |
| pt | pt |
| id | id |
| vi | vi |
| pl | pl |
| hi | hi |
| ar | ar |
| sv | sv |
| sw | sw |
| nb | no |
| nl | nl |
| fi | fi |
| cs | cs |
| uk | uk |
| tr | tr |
| th | th |
| zh_cn | zh-CN |
| zh_tw | zh-TW |
| bn | bn |
| fa | fa |
| mn | mn |
| mr | mr |
| el | el |
| he | iw |
| hu | hu |
| ro | ro |
python_exec 内で全ロケールをループ。各ロケールの全テキストを translate_text(texts=[...], target_lang=..., source_lang="en") に一度に渡して翻訳し、戻り値を各キーにマッピングする。
translate_text の protect_placeholders はコードファイル自動検出に依存するため、平文の description 文字列に含まれる {path} や {name} 等のプレースホルダは保護されない。Google Translate が {path} を {パス} などに翻訳してしまう。
対処: 翻訳前にプレースホルダを独自トークンで置換し、翻訳後に戻す。
import re
def protect(text: str) -> tuple[str, dict[str, str]]:
mapping = {}
def replacer(m):
orig = m.group(0)
token = f"__PH_{len(mapping)}__"
mapping[token] = orig
return token
text = re.sub(r'\{[A-Za-z_][A-Za-z0-9_]*\}', replacer, text)
return text, mapping
def restore(text: str, mapping: dict[str, str]) -> str:
for token, orig in mapping.items():
text = text.replace(token, orig)
return text
各テキストを翻訳前に protect() で処理し、翻訳結果に restore() を適用する。
x_search_terms は各言語のネイティブな検索ワードに翻訳するlint_format(tools=["ruff", "black"], mode="fix", targets=["src/uagent/tools/<name>_tool.py"])
python_compile(path="src/uagent/tools/<name>_tool.py") を実行。
生成ファイル一覧と内容サマリを出力する。
src/uagent/tools/<name>_tool.pysrc/uagent/tools/<name>_tool.jsonpython_compile がエラーなしlint_format(mode=check) がエラーなし{xxx} プレースホルダが元の名前を維持している({パス} などに翻訳されていない)translate_text の一時的APIエラー(リトライ可能)run_tool() 内の構文エラー{path} → {パス})。翻訳前の保護処理が必須