create-tool
新規ツール(Python + JSON)を生成し、i18n翻訳(全34ロケール)・ruff/black整形・py_compile検証まで一貫実行する。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
新規ツール(Python + JSON)を生成し、i18n翻訳(全34ロケール)・ruff/black整形・py_compile検証まで一貫実行する。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
日本郵便の郵便料金(手紙・はがき・定形外・ゆうメール・速達・書留)を検索できるスキル。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 へアップロードするための手順を規定化したスキル。
| 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} → {パス})。翻訳前の保護処理が必須