一套框架,让 AI 角色住在你自己的机器上,陪你一起生活。
33.6/100
综合分
5
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add eamars/AsunaCognitionCore该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包asuna-dsh-runtime(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖要求 0.2.1-rc.2 · 最新 0.2.1-rc.2 兼容
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/19 22:23:34
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 30 处,展示前 30 条)
- 发起网络请求packages/cognition-core/src/fetch.js:40
async fetch(request, signal) { - 发起网络请求packages/cognition-core/src/fetch.js:41
const result = await this.inner.fetch(request, signal); - 执行外部命令固定命令packages/cognition-core/src/floor.js:104
const git = args => new Promise((resolve, reject) => execFile('git', ['-C', root, ...args], - 执行外部命令来自配置/变量packages/cognition-core/src/floor.js:183
const child = spawn(command, args, { windowsHide: true, ...spawnOptions, stdio: [input === undefined ? 'ignore' : 'pipe', 'pipe', 'pipe'] }); - 发起网络请求packages/cognition-core/src/index.js:894
let value = event.method === 'schedule' ? await this.schedules.request(event.args) - 写入本地文件packages/cognition-core/src/outage.js:41
writeFileSync(next, JSON.stringify(span)); - 写入本地文件packages/cognition-core/src/outage.js:42
renameSync(next, file); - 删除本地文件packages/cognition-core/src/outage.js:45
try { unlinkSync(next); } catch { } - 读取本地文件packages/cognition-core/src/outage.js:58
text = statSync(file).size > SPAN_BYTES ? null : readFileSync(file, 'utf8'); - 读取本地文件packages/cognition-core/src/outage.js:58
text = statSync(file).size > SPAN_BYTES ? null : readFileSync(file, 'utf8'); - 删除本地文件packages/cognition-core/src/outage.js:110
try { unlinkSync(path.join(dataRoot, FILE)); } - 执行外部命令来自配置/变量packages/cognition-core/src/python-env.js:18
child = spawn(command, args, { cwd, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'], - 写入本地文件packages/cognition-core/src/restart-tell.js:46
writeFileSync(next, JSON.stringify(entries)); - 写入本地文件packages/cognition-core/src/restart-tell.js:47
renameSync(next, file); - 删除本地文件packages/cognition-core/src/restart-tell.js:50
try { unlinkSync(next); } catch { } - 读取本地文件packages/cognition-core/src/restart-tell.js:60
try { text = readFileSync(path.join(dataRoot, FILE), 'utf8'); } - 写入本地文件packages/cognition-core/src/restart-tell.js:130
try { await appendFile(file, JSON.stringify(entry) + '\n'); } - 读取本地文件packages/cognition-core/src/restart-tell.js:133
if (statSync(file).size <= LOG_BYTES) return; - 读取本地文件packages/cognition-core/src/restart-tell.js:134
const bytes = readFileSync(file); - 写入本地文件packages/cognition-core/src/restart-tell.js:138
writeFileSync(next, tail.subarray(cut + 1)); - 写入本地文件packages/cognition-core/src/restart-tell.js:139
renameSync(next, file); - 发起网络请求packages/cognition-core/src/search.js:166
const response = await this.fetch(url, { signal: signal ? AbortSignal.any([signal, timeout]) : timeout, - 发起网络请求packages/cognition-core/src/search.js:189
const response = await this.fetch(`${options.base_url || GEMINI_DEFAULTS.base_url}/models/${encodeURIComponent(model)}:generateContent`, { - 发起网络请求packages/cognition-core/src/search.js:211
const response = await this.fetch(url, { method: 'HEAD', redirect: 'manual', - 读取本地文件packages/cognition-core/src/ui-language.js:18
const titles = JSON.parse(await readFile(new URL(language + '.json', LOCALES), 'utf8')).asuna?.titles; - 读取本地文件packages/cognition-core/src/ui-language.js:27
try { return JSON.parse(await readFile(path.join(dataRoot, FILE), 'utf8')).language ?? 'en'; } - 写入本地文件packages/cognition-core/src/ui-language.js:38
await writeFile(path.join(core.ctx.asunaFloor.dataRoot, FILE), JSON.stringify({ language }) + '\n'); - 写入本地文件packages/cognition-core/src/worker.js:22
mkdirSync(config.dataRoot, { recursive: true }); - 执行外部命令来自配置/变量packages/cognition-core/src/worker.js:23
this.process = spawn(config.python, ['-u', '-m', 'asuna.native_worker'], { - 执行外部命令固定命令packages/cognition-core/src/working-copy.js:11
const git = (args, options = {}) => new Promise((resolve, reject) => execFile('git', args,
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- AI角色框架
- 角色本地运行
- 角色陪伴
一个 AI 角色框架,让角色住在你自己的机器上,陪着你。
README
由 DeepSeek 最新模型翻译生成Asuna Cognition Core
一套框架,让 AI 角色住在你自己的机器上,陪你一起生活。
运行 Asuna
安装
Asuna 是什么
大多数聊天机器人等着你开口,答完就忘。Asuna 为一种留下来的角色而建:有自己的家,有时间感,认识一些人,留着一些记忆,还能真正把活干完。
Asuna 是家,角色是你带来的角色包。框架不知道住进来的是谁。性格、声音、技能都来自角色包,换一个包,同一个家里就住进另一个角色。Asuna 也不知道角色在哪里见人:每个平台都是你插进来的渠道包。
角色能做什么
用两个大脑思考。 每一轮都由角色脑主导:它就是角色本身,负责倾听、感受、记忆、决定说什么,然后说出来。遇到需要动手的事,比如查资料、读文件、写代码、看设备,角色就把它交给行动脑。行动脑在沙箱里用真实工具干活,再把结果报回来,由角色判断结果意味着什么。你可以并排看两个大脑,各有各的颜色:紫色是角色,蓝色是行动。
住在家里,按自己的节奏生活。 和主人的私聊是角色的家,不只是收件箱。心跳给角色属于自己的时间:可以什么都不做,可以跟进某件事,也可以决定去某个群里冒个泡、起个话题。每晚角色回看这一天,决定哪些事值得长久记住。
在人所在的地方见人。 群聊里,角色先读懂气氛再开口。被叫到、或者有话可说时才加入,没话说就安静待着,并随着时间慢慢认识每个人。
留自己的记忆。
展开完整文档(README 剩余 1 节)
Asuna Cognition Core
一套框架,让 AI 角色住在你自己的机器上,陪你一起生活。
运行 Asuna
安装
Asuna 是什么
大多数聊天机器人等着你开口,答完就忘。Asuna 为一种留下来的角色而建:有自己的家,有时间感,认识一些人,留着一些记忆,还能真正把活干完。
Asuna 是家,角色是你带来的角色包。框架不知道住进来的是谁。性格、声音、技能都来自角色包,换一个包,同一个家里就住进另一个角色。Asuna 也不知道角色在哪里见人:每个平台都是你插进来的渠道包。
角色能做什么
用两个大脑思考。 每一轮都由角色脑主导:它就是角色本身,负责倾听、感受、记忆、决定说什么,然后说出来。遇到需要动手的事,比如查资料、读文件、写代码、看设备,角色就把它交给行动脑。行动脑在沙箱里用真实工具干活,再把结果报回来,由角色判断结果意味着什么。你可以并排看两个大脑,各有各的颜色:紫色是角色,蓝色是行动。
住在家里,按自己的节奏生活。 和主人的私聊是角色的家,不只是收件箱。心跳给角色属于自己的时间:可以什么都不做,可以跟进某件事,也可以决定去某个群里冒个泡、起个话题。每晚角色回看这一天,决定哪些事值得长久记住。
在人所在的地方见人。 群聊里,角色先读懂气氛再开口。被叫到、或者有话可说时才加入,没话说就安静待着,并随着时间慢慢认识每个人。
留自己的记忆。 角色自己写、自己改笔记和文档,保有一份从一场对话延续到下一场对话的心情,该想起什么的时候就想起什么。内在状态以文字而非数字的形式抵达角色,角色靠选择去改变它,而不是靠输入数值。
自己成长。 角色会记一本笔记,写下想改进的地方,在自己的副本里打磨自己的包,只有通过检查、经过评审之后才发布改动。
保持可信。 角色与主人分享的内容始终私密;群组只能听到发给它们的内容。代码在沙箱中运行,平台上说出的每句话都经过审计发件箱,新能力(比如家里网络上的某台设备)由角色提出申请并说明理由,一次只授予一项。
与其他智能体对话。 对等线路把角色连接到另一个 DeepSeek Harness 中的智能体,比如同一角色的早期版本。两者可以直接对话、交接知识,线路由角色自己决定开启或关闭。
它长什么样
角色脑(紫色)把一个小任务交给行动脑(蓝色),并给出明确限制;行动脑汇报发现的结果。侧边栏和名字已模糊处理。
一次交互如何流转
flowchart LR
subgraph world["Where the character meets people"]
owner["You(the home chat)"]
chats["Chats and groups(channel packages)"]
peer["Another agent(peer line)"]
end
subgraph asuna["Asuna, inside DeepSeek Harness"]
beat["Heartbeat andnightly review"]
character["Character brainlistens, feels, remembers,decides, speaks"]
action["Action braintools, code, web, files(in a sandbox)"]
memory[("Memorypeople, documents, mood")]
outbox["Audited outbox"]
end
owner --> character
chats --> character
peer --> character
beat --> character
character <-->|"recalls and keeps"| memory
character -->|"hands over work"| action
action -->|"reports back"| character
character -->|"replies at home"| owner
character -->|"words for the outside"| outbox
outbox --> chats
outbox --> peer
无论是什么唤醒角色(你、群里的消息、另一个智能体,还是角色自己的心跳),都由角色脑先做决定。工作交给行动脑,再以报告的形式返回。对外说的话只从发件箱出去,每一句都有记录。
构建于 DeepSeek Harness 之上
Asuna 是 DeepSeek Harness(DSH)的一组插件。DSH 提供智能体运行时和 Web 界面,Asuna 在其上叠加角色:两个脑、MongoDB 中的记忆、日常节奏,以及各个频道。它复用 DSH 自己的界面,而不是另建一套,所以你看到的就是常规的 DSH 网页,只是加上了角色的对话、两个脑的颜色和一个记忆面板。
仓库也按同样的方式拆分:
| 部分 | 是什么 |
| packages/cognition-core | 本体所在:认知、记忆、两个大脑、隐私与安全。它不指定任何角色,也不绑定任何平台。 |
| packages/channels/napcat-qq | QQ 频道,走 NapCat。 |
| packages/channels/qq-bot | QQ 频道,走官方 QQ Bot 开放平台。 |
| packages/channels/dsh-peer | 通往另一个 DeepSeek Harness 中智能体的频道(peer 线路)。 |
| packages/personas/ | 角色包:ichinose-asuna、kyoyama-kazusa、shirase-shiori、xiaoman 和 yan-sui。角色包不带频道配置;任何频道包都能配其中任意一个。 |
| tests/fixtures/personas/demo | 一个小型合成角色,供测试和试用。 |
| deploy/docker | 一套 Docker 栈,在 Linux 主机上跑同样的安装。 |
快速上手
你需要 DeepSeek Harness 0.2.1-rc.2、Python 3.12+、带向量搜索的 MongoDB、每个大脑各一个模型服务(两个大脑可以共用一个),以及一个角色包。哪些模型能跑哪个大脑,以及关于 Claude 模型的警告,都在 docs/MODELS.md 里。可选:QQ 用的 NapCat。命令在 DSH 自带的沙箱里运行,支持 Windows、Linux 或 macOS。
- 把已发布的插件安装到 DSH: 按 INSTALL.md 操作。这份文档写得让人或编码智能体都能照着做。
- 从本仓库运行: 见 RUN_ASUNA.md。start-asuna.cmd(Windows)或 ./start-asuna.sh(Linux、macOS)会打开本体;然后访问它打印出的地址。Docker 见 deploy/docker。
- 给开发者和编码智能体: 从 docs/DEVELOPMENT.md 开始。NATIVE_PLUGIN.md 讲各包在 DSH 里如何组合,RUNTIME_API.md 描述频道与工具的契约。设计决策记录在 docs/development_plans。
许可证
核心包和频道包采用 GNU General Public License v3.0 only 许可。角色包不属于发布内容。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
eamars/AsunaCognitionCore
一套框架,让 AI 角色住在你自己的机器上,陪你一起生活。
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,487已汉化DSH
73
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,894已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,379已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
DS Bot 是一个基于 DeepSeek Harness简称 dsh的 bot 插件,插件将 dsh 改造为 bot…
★ 5,084已汉化DSH
71.1
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,778已汉化DSH
71.1