Skip to content
Automation
Skill

/extension-upload

Package a script tool under ~/.config/agenvoy/tools/script/ into a tar.gz and publish to pkg.agenvoy.com registry. Keyword picker, dep/key detection, config-stored email (ask + lowercase + persist), ask version, email verification gate, multipart upload with downgrade/unique

From plugin
agenvoy
5139 skills
Install
$ npx -y skills add agenvoy/Agenvoy --skill extension-upload --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/extension-upload

Context preview

The summary Claude sees to decide when to auto-load this skill.

Package a script tool under ~/.config/agenvoy/tools/script/ into a tar.gz and publish to pkg.agenvoy.com registry. Keyword picker, dep/key detection, config-stored email (ask + lowercase + persist), ask version, email verification gate, multipart upload with downgrade/unique

SKILL.md

extension-upload.SKILL.md
name: extension-upload
description: Package a script tool under ~/.config/agenvoy/tools/script/ into a tar.gz and publish to pkg.agenvoy.com registry. Keyword picker, dep/key detection, config-stored email (ask + lowercase + persist), ask version, email verification gate, multipart upload with downgrade/unique guards.

> **本 Skill 為 Agenvoy 內部最佳化版本**,依 Agenvoy 的執行環境撰寫(`run_command` 的 CWD、`~/.config/agenvoy/skills/.system/` 安裝位置、`edit_skill`/`schedules`/`find_edit_tool` 等工具、subagent 與排程的觸發路徑),**不保證適配其他 AI harness**。

Extension Uploader

Packages an Agenvoy script tool directory into a marketplace tarball and uploads it to pkg.agenvoy.com. The source root is fixed at `~/.config/agenvoy/tools/script/`. If the user provides a keyword (e.g. `yt`), only matching subdirectories are listed.

Input

`keyword` (**optional**): substring filter (case-insensitive) over subdirectories under `~/.config/agenvoy/tools/script/`. Examples: `yt`, `dlp`, `tts`.

  • **With keyword** → list filtered matches
  • **Without keyword** (e.g. plain `/extension-upload`) → **list ALL subdirectories for the user to pick**; do not ask for a keyword

0. Select `extension_dir` (picker)

Fixed source root:

SCRIPT_ROOT=~/.config/agenvoy/tools/script

`find_files(mode=list)` lists all first-level subdirectories under `SCRIPT_ROOT` (non-recursive). **Skip names starting with `.` or `_`.**

Branch by input:

| Has keyword? | Candidate set | |---|---| | No | All subdirectories | | Yes | Subdirectories whose name (lowercased) contains `keyword` (lowercased) |

Branch by candidate count:

| Count | Action | |---|---| | 0 | Abort. With keyword: "No directory matching `<keyword>` under `SCRIPT_ROOT`". Without keyword: "`SCRIPT_ROOT` is empty — create a script tool first using `edit_tool(mode=write)`" | | 1 | Use that directory as `extension_dir` directly; report "auto-selected `<basename>`" | | ≥ 2 | `ask_user` singleSelect listing all candidates; user picks one as `extension_dir` |

`extension_dir` is the **absolute path** `<SCRIPT_ROOT>/<basename>`, used by every step below.

> Note: this skill only packages script tools (fixed `type: "script"`). Packaging api tools requires a separate skill. The worker does not accept `mcp` type.

Flow

1. Read the directory

`find_files(mode=list, recursive=true)` enumerates every file under `extension_dir` (relative paths).

**Collect into `raw_files`, excluding:**

  • `.DS_Store`, `Thumbs.db`, `.git*`
  • `*.tar`, `*.tar.gz`, `*.tgz`, `*.zip`
  • An existing `manifest.json` (this skill will regenerate it)

`read_file` reads (if present):

  • `tool.json` (**required** — if missing, abort with "tool.json missing in <extension_dir>, refuse to package")
  • All `script.{js,py,sh}` / `*.js` / `*.py` / `*.sh`

1.5 Generic structure check (gate)

Check root-level files under `extension_dir`. Abort immediately on any violation:

| Rule | Condition | |---|---| | tool.json must exist | `extension_dir/tool.json` exists and is a regular file | | script mutual exclusion | `script.py` and `script.js` **must not coexist** (both present → abort) |

Abort message:

❌ Structure check failed: script.py and script.js cannot coexist (keep only one).

2. Infer type

Fixed `type: "script"` (this skill only packages tools under `~/.config/agenvoy/tools/script/`).

2.5 Type-specific structure check (gate)

For `type: script`:

| Rule | Condition | |---|---| | script must exist | `script.py` or `script.js` must exist (exactly one); both missing → abort |

Abort message:

❌ Structure check failed: type:script requires script.py or script.js.

2.7 Health check (gate)

Verify the script can be parsed by its interpreter so consumers don't install something that immediately crashes. **Any failure aborts** and prints the stderr.

Branch on the script file confirmed in §2.5:

  • `script.py`:
  python3 -m py_compile <extension_dir>/script.py
  • `script.js`:
  node --check <extension_dir>/script.js

exit code ≠ 0 → abort:

❌ Health check failed: script cannot be parsed by the interpreter.
<first line of stderr>

> Note: only syntax-level. Top-level code is not executed; import errors / runtime errors / missing API keys are not checked. The author must test runtime behavior before packaging.

3. Detect `dependence` and `api_key_name`

Dependence (system binary names)

Scan every script file for these patterns to extract binaries:

  • JavaScript: `spawn("X"` / `exec("X"` / `execSync("X"` / `spawnSync("X"`
  • Python: `subprocess.run(["X"` / `subprocess.Popen(["X"` / `os.system("X "` / `shell=True` + `"X "`
  • Shell: the first non-reserved-word token

**Exclude:**

  • Shell builtins: `cd`, `echo`, `test`, `[`, `export`, `set`, `shift`, `pwd`, `true`, `false`
  • Interpreters themselves: `node`, `python`, `python3`, `bash`, `sh`, `/usr/bin/env`
  • Tools whitelisted by default: `ls`, `cat`, `head`, `tail`, `mkdir`, `cp`, `mv`, `rm`, `grep`, `sed`, `awk`, `find`, `jq`, `which`, `date`, `git` (almost always present; not counted as a dependence)

What remains (e.g. `yt-dlp`, `ffmpeg`, `imagemagick`, `pandoc`, `tesseract`) is the `dependence` candidate set.

Api_key_name (keychain key names)

Scan every script file for these patterns to extract key names:

  • `localhost:17989/v1/key?key=([A-Z][A-Z0-9_]*_API_KEY)`
  • `process\.env\.([A-Z][A-Z0-9_]*_API_KEY)`
  • `os\.environ\[["']([A-Z][A-Z0-9_]*_API_KEY)["']\]`
  • `os\.environ\.get\(["']([A-Z][A-Z0-9_]*_API_KEY)["']`
  • `\$([A-Z][A-Z0-9_]*_API_KEY)` (shell scripts)

Dedupe and sort all hits.

Confirm detection results

Call `ask_user`. Put the detection list in the `detail` field (hint-style subtitle); keep `question` short:

{
  "questions": [
    {
      "question": "Are the detections above correct?",
      "detail": "dependence: [yt-dlp, ffmpeg]\napi_key_name: []",
      "options": ["Yes, continue", "No, let me edit dependence", "No, let me edit api_key_name", "No, edit both"]
    }
Read more
Ships withagenvoy

Self-hosted AI agent harness in a single Go binary — writes, sandbox-tests and repairs its own tools, and lets Claude Code, Codex and any MCP client build and share them.

Get the whole plugin
Stats
514
Stars
45
Forks
Active
Maintenance
Go
Language
AGPL-3.0
License
1d ago
Last commit
7mo ago
Created

Repo: agenvoy/Agenvoy

Other skills on agenvoy.

code-reviewer
Skill

code-reviewer

Analyze project source code and generate optimization suggestions. Use when user wants code review, performance optimization advice, security hardening…

@agenvoy@agenvoyView Skill
extension-install
Skill

extension-install

Install an Agenvoy extension from pkg.agenvoy.com registry (browse/pick) or local tarball into ~/.config/agenvoy/tools/.extension/<type>/<name>@<version>/.…

@agenvoy@agenvoyView Skill
readme-generate
Skill

readme-generate

從原始碼分析自動生成雙語 README。當使用者請求為專案建立 README、需要從程式碼庫生成 README.md(英文)和 README.zh.md(中文)、或希望為其函式庫/套件建立一致的多語言文件時使用。

@agenvoy@agenvoyView Skill
scheduler-skill-creator
Skill

scheduler-skill-creato…

建立並排程定時觸發的 skill。**所有新增定時/週期任務、提醒、排程通知的請求必須走此 skill**,禁止直接呼叫 schedules(mode=write)(那是 skill 已存在時的時間綁定工具,不該作為新建排程的入口)。 必定觸發的訊息特徵(任一即活化): - 相對延遲:「X 分鐘後」「X…

@agenvoy@agenvoyView Skill