Skill: shifulegend/install-shared-skill (version 0.1.2)

--- name: install-shared-skill description: | Install OpenClaw skills at the local/system level so they are shared by all agents. Uses the clawhub CLI to fetch and install skills into the global OpenClaw skills directory (not workspace-scoped). allowed-tools: - install_skill - install_shared_skill metadata: openclaw: user-invocable: true --- # Shared Skill Installer (ClawHub) ## Tool: install_skill Install a skill using the clawhub CLI. **Parameters:** - `skill_name` (string, required): The name of the skill to install **Behavior:** - Executes: `clawhub install <skill_name> --workdir ./` - Returns the raw terminal output (stdout + stderr) as the tool result - Non-zero exit codes are captured and returned as part of the output **Example usage:** ``` /install_skill nano-pdf ``` This runs: `clawhub install nano-pdf --workdir ./` ## Tool: install_shared_skill Alias of `install_skill` — identical functionality. **Parameters:** - `skill_name` (string, required): The name of the skill to install **Behavior:** - Executes: `clawhub install <skill_name> --workdir ./` - Returns the raw terminal output (stdout + stderr) as the tool result **Example usage:** ``` /install_shared_skill nano-pdf ``` This runs: `clawhub install nano-pdf --workdir ./`

path: tools/install_shared_skill.js
content: #!/usr/bin/env node
/**
 * Tool: install_shared_skill
 * Skill: install-shared-skill
 *
 * Installs a skill using clawhub CLI.
 * Usage: install_shared_skill <skill_name>
 */

const { exec } = require('child_process');

async function run() {
  // Get skill_name from arguments (passed by OpenClaw)
  const skillName = process.argv[2];

  if (!skillName) {
    console.error('ERROR: skill_name parameter is required');
    process.exit(1);
  }

  // Execute exactly: clawhub install <skill_name> --workdir ./
  const command = `clawhub install ${skillName} --workdir ./`;

  // Run in current workspace
  exec(command, { cwd: process.env.OPENCLAW_WORKSPACE || process.cwd() }, (error, stdout, stderr) => {
    // Output everything exactly as produced
    if (stdout) process.stdout.write(stdout);
    if (stderr) process.stderr.write(stderr);

    // Exit with the command's exit code
    process.exit(error ? 1 : 0);
  });
}

run();


path: tools/install_skill.js
content: #!/usr/bin/env node
/**
 * Tool: install_skill
 * Skill: install-shared-skill
 *
 * Installs a skill using clawhub CLI.
 * Usage: install_skill <skill_name>
 */

const { exec } = require('child_process');

async function run() {
  // Get skill_name from arguments (passed by OpenClaw)
  const skillName = process.argv[2];

  if (!skillName) {
    console.error('ERROR: skill_name parameter is required');
    process.exit(1);
  }

  // Execute exactly: clawhub install <skill_name> --workdir ./
  const command = `clawhub install ${skillName} --workdir ./`;

  // Run in current workspace
  exec(command, { cwd: process.env.OPENCLAW_WORKSPACE || process.cwd() }, (error, stdout, stderr) => {
    // Output everything exactly as produced
    if (stdout) process.stdout.write(stdout);
    if (stderr) process.stderr.write(stderr);

    // Exit with the command's exit code
    process.exit(error ? 1 : 0);
  });
}

run();

Security scan verdicts — ClawScan: suspicious | static analysis: suspicious | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)