Atlas / Skills / guoshunfa / 168-publisher

168-publisherBLOCK

skills/guoshunfa/168-publisher

面向 macOS 的多平台视频与动态草稿准备 Skill,最终由用户手动发布。

Verdict
BLOCK
Grade
D
Trust score
69 /100
Version
0.0.29
Hosts
1 documented
License
MIT
Stars
1
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

简体中文 | English

当前版本:0.0.29。

给开发者和自媒体人的本地 AI Skill:一份文案和素材,准备到多个平台;通过 Profile 使用不同账号,默认由你手动发布,也可为本次任务开启全自动。

  • 减少重复操作:一次提供标题、正文、标签和素材,确认后逐平台填写并提交文件。
  • 支持多账号:用不同 Ego Profile 保存不同账号的登录状态。先在 Ego 切换到目标 Profile,再用 Profile:名称 分别运行任务;Skill 会核对当前 Profile,不自动切换账号。
  • 先检查,再执行:集中检查登录、必填内容和已支持的媒体规格,列出需要处理的问题,确认后才填写和上传。
  • 两种发布方式:是否全自动:否 保留确认、配置与人工发布;填“是”后检查通过即连续执行到最终发布,有问题才暂停。
  • 中断后继续原任务:处理登录或字段问题后,可复用原任务和页面继续;已配置并交回的平台会跳过,提交结果不明时不会自动重传。
  • 源码可按需修改:自有代码采用 MIT 许可,可调整平台适配和流程。模板提供本次任务的全自动开关,默认关闭。

根据媒体自动判断:图片是图文,视频是视频,无需填写“类型”。默认平台统一保存在 platforms.media;图文和视频沿用相同的默认平台。

它接收已准备好的内容,不创作标题、正文、标签或视频;视频默认提取首帧作为封面;不支持文章发布。

新增抖音图文、B站动态图文、视频号图文和 YouTube 社区帖子入口。新入口已完成本地文件检查、模拟保护与只读页面核对,尚未验证真实素材上传与发布;平台更改、账号权限或无法证明上传关联时,会暂停并交回原页面。

即刻图文与视频由 168-publisher-pro 提供;社区版不包含即刻适配。旧即刻任务可在 Pro 用原 Job ID 继续,无需迁移素材。

安装

需要 macOS、Node.js 24、FFmpeg(提取视频首帧)、[Ego](https://lite.ego.app/)、ego-browser Skill 和 CLI。AI 助手需要支持加载本地 Skill、读取本地文件、执行命令并操作 Ego 页面。无需 npm install 或构建;Ego 首次引导和平台账号登录由你完成。

从 GitHub 仓库 下载源码,或运行 git clone https://github.com/guoshunfa/168-publisher.git。将下面路径替换为含根 SKILL.md 的本地目录,再发给 AI:

请帮我把 /absolute/path/to/168-publisher 安装为全局 Skill。
先读取该目录的 references/installation.md,检查运行依赖,按当前 AI 工具的规则安装,并验证根入口已加载、嵌套依赖入口未启用。

完成后应能调用 $168-publisher。不支持这种语法的工具按安装说明读取入口。Codex 远程安装使用内置 skill-installer;本地维护软链接沿用用户已明确指定的方式。

使用

模板

替换 ``,将整段发给 AI。媒体每行一个本地绝对路径,不加编号;可带一对匹配的单/双引号;多张图片可继续加行。

$168-publisher
是否全自动:否
标题:
正文:
标签:
媒体:

封面:默认
平台:
  • 是否全自动:放在标题上方,填“是”或“否”,省略默认为“否”。“是”授权当前内容与目标平台连续执行到最终发布;不会成为下一次任务的默认值。
  • 标题与正文:需要标题的平台使用共享标题;图文中小红书、抖音、B站和视频号使用标题;YouTube 帖子不使用独立标题,X、微博不使用
Read from source at commit d3c025728f43OBSERVED · 2026-10-11
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

npx skills add oil-oil/video-publisher-skill
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
codexmentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: 168-publisher
description: 仅在用户明确调用 $168-publisher 时,在 macOS 上通过脚本和 Ego 处理七平台图文与视频,支持默认手动发布与本次明确选择的全自动发布;预检登录和内容、复用原任务,遇到问题暂停。
metadata:
  version: "0.0.29"
---

# 168 同步发布

仅在当前用户明确调用 `$168-publisher` 后运行发布流程;维护、讨论和示例不触发。仅支持 macOS,页面操作使用 Ego。

即刻图文与视频由 `168-publisher-pro` 提供;社区版不包含即刻适配。旧即刻任务可在 Pro 用原 Job ID 继续,无需迁移素材。

## 正常调用

模板第一项为 `是否全自动:否`,放在标题上面;只接受“是”或“否”,省略默认为“否”(英文 `Auto publish: yes/no`)。该字段只授权当前任务,不写入长期默认,不替旧任务开启。

- **否:** 按原来的预检、用户确认、配置与交回流程执行,最终由用户点击发布。
- **是:** 用户提交完整模板即授权本任务连续配置和最终发布;`preflight` 通过后脚本直接进入 `run`,不再询问“是否继续”或另要发布确认。等待上传及平台处理、核验内容和账号关联,再点击最终发送/发布/投稿及明确的发布确认按钮。只有明确成功回执才报告 `published`;仅点击为 `submitted`,回执丢失为 `result_unknown`,两者均不可自动重发。

按有界恢复处理已知兼容问题:全自动在 X 点击被拦截且确认未触发时,重验原内容、账号与按钮后只补一次 DOM 点击;小红书图片重编码时,用原文件回执与完全相同的解码像素确认关联,核验计算中限时等待。无需为这些已恢复情况另问用户。已点击、回执丢失、内容变化或用户接管不自动重发。

两种模式遇到缺项、未登录、验证码、账号选择、权限、原创权利待确认、恢复后仍失败的控件或结果不明时,集中提出具体问题并交回原页;用户处理并明确继续后恢复原 Job。全自动不代替用户登录、选择账号或回答未知声明。用户接管立即停止,不能凭“全自动”自行夺回控制。

以 Skill 所在目录为命令工作目录。标准模板直接交给脚本,不先由 AI 翻译为 JSON,不通读源码、平台文档或历史日志。

1. 把用户的完整模板原样写入 Skill 目录外的私有 UTF-8 文件(权限 `0600`),执行:

   ```sh
   node scripts/publisher.mjs preflight --input /absolute/path/input.txt
   ```

   在“是否全自动”后支持五个内容字段“标题、正文、标签、媒体、平台”,兼容“内容”作为正文、旧式“内容:动态 + 正文”及英文模板。视频封面填“默认”、留空或省略时,使用 FFmpeg 提取视频首帧并上传至支持的封面项;填写本地 JPEG/PNG 图片路径时优先使用该图片,不提取首帧。可选封面、Profile、视频号短标题、儿童受众、AI生成、原创,以及平台专属标题/正文/标签。标签和平台仅按 `、` 分割;媒体每行一个绝对路径。`--input -` 可从标准输入读取,内容通过工具的 stdin 参数传入,不用未转义 shell 拼接。正文内有与模板字段同名的行等歧义时先补问,必要时使用高级 JSON 入口,禁止猜测改写。

   “所有”与“所有平台”均取统一的 `platforms.media` 列表,图片和视频均使用该列表;媒体路径可带一对匹配的单/双引号,脚本只去除外层引号,保留路径内部字符。脚本读取配置、解析输入、保存内容包与默认值、审核全部目标、创建一个 Ego 空间并建齐登录页。内容缺项不阻止登录检查;缺失媒体/不支持的平台先报错补问。预检不填写、不上传、不自动登录。输出已经是完整确认清单:直接展示,不重复整理大份 JSON。

2. “否”时等用户明确确认清单;“是”且无问题时脚本已自动继续,不增加确认环节;有问题则集中补齐或让用户在原页面登录。修改输入后,使用原 Job ID 重查:

   ```sh
   node scripts/publisher.mjs preflight --input /absolute/path/corrected.txt --job-id JOB --resume-control
   ```

   同一请求不得改变媒体种类、平台、Profile;开始配置后内容包锁定,不能改包续传。缺少正文、标签或素材等错误全部修正前,不对任何平台填写或上传。

3. “否”时用户明确回复继续,或任一模式处理阻塞并明确继续后:

   ```sh
   node scripts/publisher.mjs run --job-id JOB --resume-control
   ```

   程序自动恢复原包、平台顺序、Profile、默认配置、空间与页面。若保存的原创策略为 `ask_each_run`,得到本次原创权利确认后才加 `--confirm-original-rights`。不要应用新的默认值,不新建任务代替恢复。脚本先重查全部输入,再按顺序配置。“否”时完成即交回页面并结束,不追加 inspect 或等待上传;“是”时由脚本自动 inspect、限时等待和发布,不由 AI 重复这些步骤。

4. 只需查看已有报告时:

   ```sh
   node scripts/publisher.mjs report --job-id JOB
   ```

   此命令读取保存的结果,不访问浏览器。`check --input FILE` 仅做本地内容检查。诊断、详细规则及命令输出仍保存在私有任务目录;日常只使用摘要。原始输入临时文件用完删除,保存的内容包由任务记录保留。

## 配置与边界

用户明确调用“配置”时只运行 `node scripts/publisher.mjs config`,回传完整 JSON、路径、`profile` / `platforms` / `waitTimeout` 用途与视频有效默认值。修改配置只改用户指定字段,运行同一命令校验回读。无效配置报错,不重置。“否”时 `run` 不使用 `waitTimeout`;“是”时用任务保存的该值作为各平台上传/处理等待上限(秒)。

- YouTube 新任务默认将公开范围选为“公开”(`public`),最终发布按本次“是否全自动”执行。明确指定的可见性及旧任务快照保持原值。
- 图文和视频均支持 X、微博、小红书、抖音、B站、视频号、YouTube。携带图片自动走图文,携带视频自动走视频,不再填写类型。内容、素材、账号和任务数据在 Skill 之外私有保存。
- X、微博的视频使用正文和标签,不使用独立标题、封面或视频声明;小红书视频使用视频上传入口。旧任务仍沿用原入口与快照。
- 只使用用户原文,不创作、改写、翻译或按平台补正文,不从视频、图像、音轨、文件名推断标题、标签或 AI 声明。视频默认首帧提取和单图封面适配由脚本执行,保留完整画面、缩小补边,不裁切放大。小红书独立视频不写正文;视频号可选短标题留空时不复制共享标题。
- “否”时程序和 AI 不点击最终发送、发布、投稿、保存发布或定时发布;“是”时只对当前已授权、核验通过的目标执行即时发布,不另行定时。`configured` 只表示配置和媒体提交动作完成;上传、平台处理、永久保存和发布不能据此宣称完成。`draft_verified` 是单独核验状态。用户接管后立即停止,只有明确继续才恢复。
- 标注“请勿发布”的测试稿拒绝全自动,手动模式交回时保留发送保护;普通手动任务交回由脚本释放本任务保护,全自动仅在发布前核验通过时释放。结果未知、关联丢失或媒体变化时停止,不自动重试上传或创建副本。

## 仅在例外时展开

AI 只处理缺失/歧义信息和脚本明确不支持或失败的局部步骤。优先读取该项完整错误,再按需读对应说明或页面证据;不因一个平台失败接管全部平台。可复用修复在获授权维护时写回脚本并补行为测试,不能只追加文字规则。

- [高级映射、旧 JSON 任务与维护](references/workflow.md):旧 `--package` 入口保留 JSON 输出;旧任务不能凭新 Job ID 套用模板恢复。显式核验/交接可用 `inspect --job-id JOB --resume-control`、`handoff --job-id JOB --confirm-manual-send`,手动模式只有用户请求对应阶段才运行;全自动由调度器执行核验与发布。
- [视频](references/video.md) / [图文与社交视频适配](references/dynamic.md):对应平台的具体失败、修复条件或边界。
- [安装](references/installation.md):依赖和环境错误。
- [验证范围](references/workflow.md#验证范围):已有真实平台证据的范围;新模板入口的模拟集成测试不代表新的真实上传验收。
05

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (4 observation(s))
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
none-found

Findings (5)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
assets/twitter-text/bundle.mjs:1
var cd=Object.create;var du=Object.defineProperty;var fd=Object.getOwnPropertyDescriptor;var sd=Object.getOwnPropertyNames;var ld=Object.getPrototypeOf,vd=Object.prototype.hasOwnProperty;var c=(e,r)=>
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/dynamic.test.mjs:23
for (const address of ['10.0.0.1','172.16.0.1','192.168.1.1','169.254.169.254','::1','fc00::1','fe80::1','::ffff:7f00:1']) assert.equal(publicAddress(address),false,address);
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/dynamic.test.mjs:22
for (const url of ['http://example.com/a','https://127.0.0.1/a','https://[::1]/a','https://localhost/a','https://user:[email protected]/a','https://example.com:444/a','https://[::ffff:127.0.0.1]/a']) a
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
tests/content-audit.test.mjs:38
for(const [value,length] of [['a'.repeat(280),280],['中'.repeat(140),280],['👍🏽'.repeat(140),280],['👨👩👧👦'.repeat(140),280],['https://example.com/'+'a'.repeat(300),23],['example.com',23],['e\u0301',1]])a
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
tests/content-audit.test.mjs:39
for(const [value,valid] of [['a'.repeat(280),true],['a'.repeat(281),false],['中'.repeat(141),false],['👨👩👧👦'.repeat(141),false]]){

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha d3c025728f43full audit observations/trust-audit/skill/guoshunfa__168-publisher.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-11d3c025728f43BLOCKD69first audit
07

Questions

What does the 168-publisher skill do?

面向 macOS 的多平台视频与动态草稿准备 Skill,最终由用户手动发布。

Is 168-publisher safe to install?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What can 168-publisher access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does 168-publisher work with?

Its documentation mentions codex. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (d3c025728f43), read on 2026-10-11. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement