Token导航 LogoToken导航

Agent Skill · 研究检索

create-lang-plugin(create lang plugin 搜索)

create-lang-plugin 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

create-lang-plugin 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证信息还不明确,第三方扫描有未通过项,按安装量在研究检索类的 73,675 个 Skill 里排第 40,194。

总安装 1,317周安装 56GitHub Stars 8下载 461核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:create-lang-plugin(create lang plugin 搜索)
来源仓库:https://github.com/anentrypoint/plugforge
仓库路径:skills/create-lang-plugin
安装命令:
npx skills add https://github.com/anentrypoint/plugforge --skill create-lang-plugin
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/anentrypoint/plugforge --skill create-lang-plugin

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

用于查找、检索和筛选相关信息,适合根据关键词或任务场景快速定位候选结果。适用于 Codex、Claude、Cursor、Gemini CLI 等宿主环境,支持语言工具链扩展与 LSP 集成。通过命令行安装,需结合来源仓库文档核验具体用法,确保插件文件命名与导出结构正确。

安装前建议确认权限范围,避免触发未授权的联网或文件操作。create-lang-plugin 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/create-lang-plugin

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/anentrypoint/plugforge --skill create-lang-plu…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

create-lang-plugin 怎么安装?

在终端执行 npx skills add https://github.com/anentrypoint/plugforge --skill create-lang-plugin。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

create-lang-plugin 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

create-lang-plugin 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

create-lang-plugin 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

create-lang-plugin 用的人多吗?

公开数据是累计安装 1,317 次,近一周安装 56 次,下载 461 次,GitHub 8 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

create-lang-plugin 安全吗?

第三方扫描有未通过项,风险较高。除非你确认过源码,否则不建议直接安装到常用环境。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
create-lang-plugin

create lang plugin 搜索 · 本页

1,3178需要联网未明确未通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

CREATE LANG PLUGIN

A lang plugin is a single CommonJS file at <projectDir>/lang/<id>.js. gm-cc's hooks auto-discover it — no hook editing, no settings changes. The plugin gets three integration points: exec dispatch, LSP diagnostics, and context injection.

PLUGIN SHAPE

'use strict';
module.exports = {
  id: 'mytool',                          // must match filename: lang/mytool.js
  exec: {
    match: /^exec:mytool/,               // regex tested against full "exec:mytool\n<code>" string
    run(code, cwd) {                     // returns string or Promise<string>
      // ...
    }
  },
  lsp: {                                 // optional — synchronous only
    check(fileContent, cwd) {            // returns Diagnostic[] synchronously
      // ...
    }
  },
  extensions: ['.ext'],                  // optional — file extensions lsp.check applies to
  context: `=== mytool ===\n...`        // optional — string or () => string
};
type Diagnostic = { line: number; col: number; severity: 'error'|'warning'; message: string };

HOW IT WORKS

  • exec.run is called in a child process (30s timeout) when Claude writes exec:mytool\n<code>. Output is returned as exec:mytool output:\n\n<result>. Async is fine here.
  • lsp.check is called synchronously in the hook process on each prompt submit — must NOT be async. Use execFileSync or spawnSync.
  • context is injected into every prompt's additionalContext (truncated to 2000 chars) and into the session-start context.
  • match regex is tested against the full command string exec:mytool\n<code> — keep it simple: /^exec:mytool/.

STEP 1 — IDENTIFY THE TOOL

Answer these before writing any code:

  1. What is the tool's CLI name or npm package? (gdlint, tsc, deno, ruff,...)
  2. How do you run a single expression/snippet? (tool eval <expr>, tool -e <code>, HTTP POST,...)
  3. How do you run a file? (tool run <file>, tool <file>,...)
  4. Does it have a lint/check mode? What does its output format look like?
  5. What file extensions does it apply to?
  6. Is the game/server running required, or does it work headlessly?

STEP 2 — IMPLEMENT exec.run

Pattern for HTTP eval (tool has a running server):

const http = require('http');
function httpPost(port, urlPath, body) {
  return new Promise((resolve, reject) => {
    const data = JSON.stringify(body);
    const req = http.request(
      { hostname: '127.0.0.1', port, path: urlPath, method: 'POST',
        headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data) } },
      (res) => { let raw = ''; res.on('data', c => raw += c); res.on('end', () => { try { resolve(JSON.parse(raw)); } catch { resolve({ raw }); } }); }
    );
    req.setTimeout(8000, () => { req.destroy(); reject(new Error('timeout')); });
    req.on('error', reject);
    req.write(data); req.end();
  });
}

Pattern for file-based execution (write temp file, run headlessly):

const fs = require('fs');
const os = require('os');
const path = require('path');
const { execFileSync } = require('child_process');

function runFile(code, cwd) {
  const tmp = path.join(os.tmpdir(), `plugin_${Date.now()}.ext`);
  fs.writeFileSync(tmp, code);
  try {
    return execFileSync('mytool', ['run', tmp], { cwd, encoding: 'utf8', timeout: 10000 });
  } finally {
    try { fs.unlinkSync(tmp); } catch (_) {}
  }
}

Distinguish single expression vs multi-line when both modes exist:

function isSingleExpr(code) {
  return !code.trim().includes('\n') && !/\b(func|def|fn |class|import)\b/.test(code);
}

STEP 3 — IMPLEMENT lsp.check (if applicable)

Must be synchronous. Parse the tool's stderr/stdout for diagnostics:

const { spawnSync } = require('child_process');
const fs = require('fs');
const os = require('os');
const path = require('path');

function check(fileContent, cwd) {
  const tmp = path.join(os.tmpdir(), `lsp_${Math.random().toString(36).slice(2)}.ext`);
  try {
    fs.writeFileSync(tmp, fileContent);
    const r = spawnSync('mytool', ['check', tmp], { encoding: 'utf8', cwd });
    const output = r.stdout + r.stderr;
    return output.split('\n').reduce((acc, line) => {
      const m = line.match(/^.+:(\d+):(\d+):\s+(error|warning):\s+(.+)$/);
      if (m) acc.push({ line: parseInt(m[1]), col: parseInt(m[2]), severity: m[3], message: m[4].trim() });
      return acc;
    }, []);
  } catch (_) {
    return [];
  } finally {
    try { fs.unlinkSync(tmp); } catch (_) {}
  }
}

Common output patterns to parse:

  • file:line:col: error: message → standard
  • file:line: E001: message → gdlint style (E=error, W=warning)
  • JSON output → JSON.parse(r.stdout).errors.map(...)

STEP 4 — WRITE context STRING

Describe what exec:<id> does and when to use it. This appears in every prompt. Keep it under 300 chars:

context: `=== mytool exec: support ===
exec:mytool
<expression or code block>

Runs via <how>. Use for <when>.`

STEP 5 — WRITE THE FILE

File goes at lang/<id>.js in the project root. The id field must match the filename (without .js).

Verify after writing:

exec:nodejs
const p = require('/abs/path/to/lang/mytool.js');
console.log(p.id, typeof p.exec.run, p.exec.match.toString());

Then test dispatch:

exec:mytool
<a simple test expression>

If it returns exec:mytool output: → working. If it errors → fix exec.run.

CONSTRAINTS

  • exec.run may be async — it runs in a child process with a 30s timeout
  • lsp.check must be synchronous — no Promises, no async/await
  • Plugin must be CommonJS (module.exports = {...}) — no ES module syntax
  • No persistent processes — exec.run must complete and exit cleanly
  • id must match the filename exactly
  • First match wins — if multiple plugins could match, make match specific

EXAMPLE — gdscript plugin (reference implementation)

See C:/dev/godot-kit/lang/gdscript.js for a complete working example combining HTTP eval (single expressions via port 6009) with headless file execution fallback, synchronous gdlint LSP, and a context string.

平台分布

Codex

34.17%
按下载量换算158

Claude

29.29%
按下载量换算135

Cursor

18.56%
按下载量换算86

Gemini CLI

9.71%
按下载量换算45

安全审计

Gen Agent Trust Hub

未通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills