🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

酒馆沙盒 Rannichan/Tavern-Harness

DeepSeek Harnessv0.1.30
Rannichan3 天前有提交已提供中文文档扫描:含敏感能力

AI 原生的角色扮演沙盒

36.3/100
综合分
4
GitHub 星标
243
npm 周下载
—/5
用户评分

数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add tavern-harness
npm 源 · tavern-harness 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · security
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包tavern-harness @ 0.1.30
✓Node 引擎要求 >=22.6.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 20:00:07

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 51 处,展示前 30 条)
  • 读取本地文件
    bin/cli.js:21
    const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8'));
  • 读取密钥环境变量
    persistence-server.mjs:17
    const SERVICE_TOKEN = process.env.PERSISTENCE_SERVICE_TOKEN;
  • 写入本地文件
    persistence-server.mjs:24
    mkdirSync(dataDir, { recursive: true });
  • 读取密钥环境变量
    sandbox-server.mjs:35
    const SERVICE_TOKEN = process.env.COMMAND_SERVICE_TOKEN;
  • 读取密钥环境变量
    sandbox-server.mjs:36
    const APPROVAL_TOKEN = process.env.COMMAND_APPROVAL_TOKEN;
  • 执行外部命令固定命令
    sandbox-server.mjs:54
    const which = spawnSync('where', ['git'], { encoding: 'utf8' });
  • 读取本地文件
    sandbox-server.mjs:60
    if (existsSync(join(p, 'pwd.exe'))) return p;
  • 读取本地文件
    sandbox-server.mjs:64
    for (const c of candidates) if (existsSync(join(c, 'pwd.exe'))) return c;
  • 写入本地文件
    sandbox-server.mjs:71
    mkdirSync(SANDBOX_HOME, { recursive: true });
  • 写入本地文件
    sandbox-server.mjs:72
    mkdirSync(SANDBOX_TMP, { recursive: true });
  • 删除本地文件递归
    sandbox-server.mjs:73
    process.once('exit', () => rmSync(SANDBOX_ENV_ROOT, { recursive: true, force: true }));
  • 读取本地文件
    sandbox-server.mjs:360
    if (!existsSync(candidate)) continue;
  • 读取本地文件
    sandbox-server.mjs:365
    const executable = statSync(resolved);
  • 读取本地文件
    sandbox-server.mjs:461
    if (WORKSPACE_ROOT === LEGACY_WORKSPACE_ROOT || existsSync(WORKSPACE_ROOT) || !existsSync(LEGACY_WORKSPACE_ROOT)) return;
  • 写入本地文件
    sandbox-server.mjs:463
    mkdirSync(dirname(WORKSPACE_ROOT), { recursive: true });
  • 读取本地文件
    sandbox-server.mjs:472
    const RESOLVED_WORKSPACE_ROOT = existsSync(WORKSPACE_ROOT) ? realpathSync(WORKSPACE_ROOT) : WORKSPACE_ROOT;
  • 写入本地文件
    sandbox-server.mjs:495
    mkdirSync(PUBLIC_WORKSPACE, { recursive: true });
  • 写入本地文件
    sandbox-server.mjs:496
    mkdirSync(base, { recursive: true });
  • 删除本地文件
    sandbox-server.mjs:504
    rmSync(legacyPublicLink);
  • 写入本地文件
    sandbox-server.mjs:655
    mkdirSync(dirname(fp), { recursive: true });
  • 删除本地文件递归
    sandbox-server.mjs:681
    rmSync(fp, { recursive: true, force: false });
  • 删除本地文件
    sandbox-server.mjs:684
    unlink(fp, (err) => (err ? rejectDelete(err) : resolveDelete()));
  • 执行外部命令来自配置/变量
    sandbox-server.mjs:716
    execFile(command, [base], (error) => {
  • 删除本地文件递归
    sandbox-server.mjs:752
    rmSync(base, { recursive: true, force: true });
  • 执行外部命令固定命令
    sandbox-server.mjs:1122
    const killed = spawnSync('taskkill.exe', ['/PID', String(child.pid), '/T', '/F'], {
  • 执行外部命令来自配置/变量
    sandbox-server.mjs:1200
    const child = spawn(commandPath(command.cmd), command.args, {
  • 写入剪贴板
    src/core/clipboard.ts:11
    await navigator.clipboard.writeText(text);
  • 发起网络请求
    src/core/openai.ts:91
    const resp = await fetch(url, {
  • 发起网络请求
    src/core/openai.ts:387
    const response = await fetch(candidates[index], {
  • 发起网络请求
    src/db/database.ts:294
    response = await fetch(`/api-v3${path}`, {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • AI原生角色扮演沙盒

README

由 DeepSeek 最新模型翻译生成
Tavern Harness · AI 原生的角色扮演沙盒 1 · 玩法演示 玩法演示 2 · 如何运行 方式一:一键启动(推荐) 无需克隆仓库或全局安装: npx tavern-harness 首次运行会下载包、启动可从局域网访问的服务,并自动打开浏览器。可选参数: npx tavern-harness --no-open npx tavern-harness --port 5273 npx tavern-harness --host 127.0.0.1 # 仅允许本机访问 npx tavern-harness --workspace /absolute/path/to/workspace 方式二:全局安装(推荐长期使用) 安装一次后,可从任意目录启动 Tavern Harness: npm install -g tavern-harness tavern-harness 更新: npm update -g tavern-harness 卸载: npm uninstall -g tavern-harness 方式三:从源码安装 git clone https://github.com/Rannichan/Tavern-Harness.git cd Tavern-Harness npm install
展开完整文档(README 剩余 1 节)
Tavern Harness · AI 原生的角色扮演沙盒

1 · 玩法演示

玩法演示

2 · 如何运行

方式一:一键启动(推荐)

无需克隆仓库或全局安装:

npx tavern-harness

首次运行会下载包、启动可从局域网访问的服务,并自动打开浏览器。可选参数:

npx tavern-harness --no-open
npx tavern-harness --port 5273
npx tavern-harness --host 127.0.0.1 # 仅允许本机访问
npx tavern-harness --workspace /absolute/path/to/workspace

方式二:全局安装(推荐长期使用)

安装一次后,可从任意目录启动 Tavern Harness:

npm install -g tavern-harness
tavern-harness

更新:

npm update -g tavern-harness

卸载:

npm uninstall -g tavern-harness

方式三:从源码安装

git clone https://github.com/Rannichan/Tavern-Harness.git
cd Tavern-Harness
npm install
npm run dev # 开发服务器默认端口 5173,被占用时自动顺延

首次启动配置模型服务

启动后到「设置 → 模型服务 Provider」:

1. 添加 Provider:名称 + Base URL + API Key —— 支持任意 OpenAI 兼容 chat/completions 接口(OpenAI / DeepSeek / Qwen / SiliconFlow / Ollama / LM Studio / 自建 vLLM 均可)
2. 测试连接:自动拉取模型列表。若目标服务未开 CORS 头,会自动经内置同源代理转发(仅限内网 / 局域网地址),成功后 Base URL 自动改写为代理形式保存
3. 选模型:聊天页顶部点击模型名即可,回到对话开聊!

导入游戏并开始

下载以下游戏文件,点击左上角的「导入」按钮,然后导入刚刚下载的文件,即可创建一整套游戏环境(包括角色、世界书、技能等),直接体验:

小咕嘎-gameplay.json

数据存储

酒馆数据保存在主机本地;访问同一 Tavern Harness 实例的浏览器可共享这些数据。界面语言和主题仍随各自浏览器保存。

3 · 产品特色

🍺 酒馆老板随时为您服务

无论是构建角色卡这种小事儿,还是设计跑团玩法这种累活儿,再或者你只是不知道从何入手,都可以来找酒馆老板!

我们为酒馆进行了全方位的 AI 装修,让游戏的创建和体验都更加简单。

🛠️ 技能系统

所有的角色不再是只能对话的角色,而是具备技能拓展的智能体:为每一个角色装备需要的技能,实现更高级的玩法。

酒馆已经提供了一些必要的技能(例如掷骰子);同时你也可以拜托酒馆老板,创建任意你想要的技能~

💬 多角色群聊

每个房间支持添加至多 6 个角色,并提供类似于回合制游戏的行动顺序表,轻松管理多人对话。

支持 @ 角色 和跳过,模拟真实的多人对话场景——无论是从上帝视角观测角色们的行为,还是亲自代入角色参与其中,总能找到你的玩法。

🎁 和朋友分享你的游戏

兼容 Tavern 生态,一键导入 PNG 角色卡。

同时支持游戏一键打包分享:对方直接导入即可游玩,无需手动创建角色、技能、配置对话。

🍃 完全本地 / 高缓存命中率 / 简洁干净

目前支持 OpenAI 格式的 API 接口:你可以使用你的 token plan,也可以自己本地部署模型,一切数据都保存在本地。

Tavern Harness 针对提高缓存命中率进行了优化,显著降低了 Token 成本。

并且 Tavern Harness 不依赖任何外部 harness,UI 也经过了精细打磨,提供简洁干净的体验。

4 · 交流反馈

- 🐛 发现 Bug / 提需求 → GitHub Issues,欢迎附上导出的游戏 JSON 或浏览器控制台日志(务必注意脱敏 API Key 哦)
- 🟣 用法讨论 / 玩法灵感 / 分享你的角色卡与技能 / 围观开发进展 → 加入 Discord 社区
- 🤝 欢迎提交 Pull Request:我最喜欢写bug了
- 📣 想第一时间收到更新,点个 Star / Watch 就好

酒馆24小时营业,老板随时为您服务!

5 · 版本记录

每一次 npm 发布都会记录在 changelog/ 目录中:一个版本一个文件,并与 git tag 一一对应。

- 查看完整记录:CHANGELOG.md
- 应用内查看:设置 → 关于 → 查看版本记录
- 维护者:发布步骤见 CONTRIBUTING。

开源协议

本项目采用 MIT License 开源协议。
预览分享卡片长什么样 ↓Rannichan/Tavern-Harness
分享 · DeepSeek Harness Hub
Rannichan/Tavern-Harness

AI 原生的角色扮演沙盒

回到顶部