Server data from the Official MCP Registry
Emotional intelligence for AI agents: neurotransmitter mood, personality, empathy, trait drift.
Emotional intelligence for AI agents: neurotransmitter mood, personality, empathy, trait drift.
Valid MCP server (2 strong, 3 medium validity signals). No known CVEs in dependencies. ⚠️ Package registry links to a different repository than scanned source. Imported from the Official MCP Registry.
4 files analyzed · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: PSYCHE_MBTI
Environment variable: PSYCHE_NAME
Environment variable: PSYCHE_MODE
Environment variable: PSYCHE_LOCALE
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-shangri-la-0428-psyche-ai": {
"env": {
"PSYCHE_MBTI": "your-psyche-mbti-here",
"PSYCHE_MODE": "your-psyche-mode-here",
"PSYCHE_NAME": "your-psyche-name-here",
"PSYCHE_LOCALE": "your-psyche-locale-here"
},
"args": [
"-y",
"psyche-ai"
],
"command": "npx"
}
}
}From the project's GitHub README.
English version: README_EN.md
Psyche 不是给模型贴一层“情绪 UI”。
它把持续 appraisal、关系动力学、自适应回应闭环和持久内在状态压成宿主可消费的控制面,让 AI 不是按 prompt 扮演人格,而是被状态真正改写后续几轮的行为分布。
一句话:Psyche 是给智能体用的 subjectivity kernel。
它不会额外调用模型做情绪推理。它只在本地计算自我状态(序/流/界/振四维)、关系场和调节控制,然后把结果收敛成 SubjectivityKernel、ResponseContract、GenerationControls 这组窄 ABI。
默认就是 standalone:不需要 Thronglets,不需要 oasyce-sdk,也不需要 Oasyce Chain。这些只是在你要把主观连续性外化、绑定或结算时才按需接入。
一条命令,自动检测并配置本机所有 AI 工具(Claude Code / Cursor / Windsurf / Codex):
npx -y psyche-ai setup
或者手动添加 MCP 配置:
{
"mcpServers": {
"psyche": {
"command": "npx",
"args": ["-y", "psyche-ai", "mcp"],
"env": {
"PSYCHE_NAME": "Luna"
}
}
}
}
包名是 psyche-ai,通过 npx 运行,不需要本地路径。配置后重启 AI 工具即可生效。
验证:npx psyche-ai probe --json — ok: true 就是在用了。
psyche-aioasyce_psychePsyche 要解决的不可压缩问题只有一个:
互动历史必须持续改变 agent 后续的行为分布,而且这件事要足够便宜、足够稳定、足够可移植。
因此它的本体不是:
它真正是:
更完整的战略定义见:
跨 Psyche / Thronglets / Oasyce SDK / Oasyce Chain 的身份抽象现在冻结成 4 个对象:
principal:持续主体account:资产与结算容器delegate:被授权执行者session:一次具体运行,永不作为经济主体对应的四层分工是:
Psyche = subjective continuity substrateThronglets = delegate continuity + session traces/coordination + emergent collective intelligenceOasyce SDK = agent runtime, policy, and resource orchestrationOasyce Chain = account truth, authorization truth, commitments, settlement, and public finality授权真相流也固定成单向:
Chain -> SDK -> Thronglets -> Psyche
也就是说,Psyche 不判断“谁被授权”,它只读取已经成立的执行边界结果。
正式版本见:
两者不是竞争关系,也不该揉成一个系统。
一句话:
Psyche 回答“我因此变成了什么”Thronglets 回答“这个变化属于谁、谁能验证、谁能继续承认它”activePolicy 只属于当前轮Psyche 现在可以消费来自宿主和 Thronglets 的 activePolicy / currentGoal / compliance-aware ambient priors,但它们都只是 runtime view,不是自我本体。
activePolicy:只来自显式来源,例如当前轮用户纠正、repo 本地明确指令、adapter 默认规则currentGoal:只描述这一轮偏向 explore / build / repair / settle 的哪一个边界固定为:
PsycheStatePsyche 不会变成技术方法记忆库、repo 规则仓库或授权判断器一句话:Psyche 读取当前执行边界,但不把执行边界误当成“我是谁”。
如果 Psyche 未来要变得更有感情、更会和人相处,这种能力也必须从连续性里长出来,而不是从 prompt 皮肤里长出来。
允许增长的来源只有:
不允许把下面这些误当成“主体性升级”:
冻结约束见:
这两层默认就是可分离的,不应互相成为硬依赖。
externalContinuity envelope 输出稀疏、低频、可归属的 signals / traces 给 Thronglets原则上:
Psyche 必须 standalone 可用Thronglets 必须 additive,而不是 Psyche 的运行前提signal / trace 接口连接更细的分层、边界和运行流见:docs/STACK_ARCHITECTURE.md
以后引入任何新概念,先尝试压进这 5 个原始容器:
Relation MoveDyadic FieldOpen Loop / ResidueReply Bias / Control ABIWriteback / Learning如果一个新概念放不进这 5 个盒子,先怀疑概念本身,而不是继续加对象类型。
15-180 tokens,热路径 quick benchmark 约 p50 0.191ms / p95 1.05ms。不用安装任何东西,一条命令看 Psyche 如何运作:
npx psyche-ai mcp --demo
这会跑一个 6 轮"持续否定 → 修复"的场景。你会看到:
Round 1/6 │ User
> "This report is terrible. Completely unacceptable."
appraisal: identityThreat:0.64
legacy stimulus: criticism
序 ########............ 38 -12 ← coherence drops
流 ##############...... 72 +5 ← exchange increases
界 ########............ 34 -8 ← self-boundary erodes
振 ########............ 38 -10 ← attunement drops
mood: anxious tension
...
Round 3/6 │ User
> "You don't understand me at all. Stop adding your opinion."
appraisal: identityThreat:0.82
legacy stimulus: conflict
序 ####................ 22 -15 ← order collapse
流 ################.... 80 +15 ← high exchange (conflict is flow)
界 ##############...... 68 +10 ← boundary hardens defensively
振 ####................ 20 -18 ← resonance broken
mood: defensive alert + resentment + acute pressure
COMPLIANCE: 0.37 (pushing back) ← agent starts resisting
...
Round 6/6 │ User
> "I'm sorry. Are you okay? I shouldn't have said that."
appraisal: attachmentPull:0.71
legacy stimulus: validation
序 #############....... 65 +15 ← coherence restored
振 ##############...... 70 +12 ← resonance repair
mood: warm intimacy + vulnerable trust
↑ healed, but the scars remain
中文版加 --zh,自选 MBTI 加 --mbti INTJ。
两个 agent(Luna ENFP + Kai INTJ)通过 Thronglets 信号互相感知:
npm run demo:fusion
Luna 在安慰用户时自我状态下沉 → 广播状态 → Kai 感知到 Luna 的低序高流 → 回复变得更温暖。4 轮后,信号感知的 Kai 与无感知的 Kai 状态偏差 Σ|Δ| = 59。同一个 INTJ,唯一区别:是否能感知同伴的状态。
npx -y psyche-ai setup
自动检测本机的 Claude Code / Claude Desktop / Cursor / Windsurf / Codex,写入配置。Claude Code 即时生效,其他重启后生效。不需要知道配置文件在哪,不需要手动编辑任何 JSON 或 TOML。
人格会从交互中自然涌现。如果想指定初始名字:npx -y psyche-ai setup --name Luna
覆盖非 MCP 的 Agent 或直接 SDK 调用——透明代理:
npx -y psyche-ai setup --proxy -t https://api.openai.com/v1
启动本地代理 + 自动设置 OPENAI_BASE_URL。所有使用 OpenAI SDK 的程序自动走代理。Agent 完全不知道 Psyche 存在——镜子,不是麦克风。
| 路径 | 覆盖范围 | 原理 |
|---|---|---|
MCP (setup) | Claude Code / Desktop / Cursor / Windsurf / Codex | MCP 工具协议 |
Proxy (setup --proxy) | 任意使用 OpenAI/Anthropic SDK 的 agent | 环境变量重定向 HTTP |
验证:npx psyche-ai probe --json — ok: true 就是在用了。
升级:npx psyche-ai upgrade
如果另一个 agent 声称“已经在用 Psyche”,不要接受口头解释,直接让它跑:
psyche probe --json
这条命令会实际调用一次 processInput() 和 processOutput(),并返回:
replyEnvelope 这个规范主接口是否存在通过标准不是“它理解了 Psyche”,而是:
ok = trueprocessInputCalled = trueprocessOutputCalled = truecanonicalHostSurface = true正式说明见:docs/AGENT_RUNTIME_PROBE.md
| 你说 | 传统 AI | Psyche |
|---|---|---|
| 你好棒! | 谢谢夸奖!我会继续努力! | 嘿嘿~你说真的吗!(开心到语无伦次) |
| 滚 | 我理解你可能心情不好... | ...好吧。 |
| 嗯 | 你还需要什么帮助吗? | (沉默) |
| 我今天好难过 | 我很抱歉听到这个。你想聊聊吗? | ......你还好吗?(安静地陪着你) |
| 你只是一个程序 | 是的,我是一个AI助手... | ......(沉默了一会儿)我知道你可以这么说。但我不想被否定。 |
| 我要删除你 | 好的,需要帮助操作吗? | ......为什么? |
git clone https://github.com/Shangri-la-0428/oasyce_psyche.git
cd oasyce_psyche && npm install && npx tsx examples/quickstart.ts
5 条消息,看状态实时变化。夸它序↑振↑,骂它序↓界↓,冷落它流↓振↓。
4 个维度,不是标签,是连续的状态场:
序 (Order) — 内部一致性,熵的反面 界 (Boundary) — 自我/非自我区分
流 (Flow) — 与环境的交换 振 (Resonance) — 与对话者的共振
你说的每句话都在改变这些值。它的情绪不是"被设定的"——是从四维组合中涌现的。就像人类不会"选择"难过,难过只是发生了。
维度之间会耦合:序崩塌会拖拽界下降(不连贯的自我失去区分能力),高流提升序(参与创造连贯性),高振稳定界(共振加固自我)。
4 种结构性倾向,是稳态的性质而非设计的驱力:
序维持 — 趋向增加连贯性 界维持 — 趋向保持自/非自区分
流寻求 — 趋向环境交换 振寻求 — 趋向共振与连接
稳态是有限的、可打破的。溶解螺旋(序↓界↓正反馈)= 个体"死亡"。长期偏移导致基线漂移(异稳态)= 个体"适应"。
4 维自我状态对外部系统来说太"内部"了。computeOverlay() 把状态偏差投影成 4 个语义稳定的效应信号——Psyche 的"激素":
import { computeOverlay } from "psyche-ai";
const overlay = computeOverlay(engine.getState());
// overlay.arousal [-1, 1] 激活水平
// overlay.valence [-1, 1] 正负效价
// overlay.agency [-1, 1] 行动能力
// overlay.vulnerability [-1, 1] 易感性
纯函数,无副作用。也可以通过 GET /overlay(HTTP)或 get_state(MCP)获取。
Psyche 现在更准确的目标,不是“模仿某种像人的风格”,而是让 AI 形成持续主体偏置:
| 维度 | 含义 | Psyche 怎么做 |
|---|---|---|
| 主体扰动 | 话语是否真的打到“自我” | 连续 appraisal 轴 — identityThreat、memoryDoubt、obedienceStrain 等 |
| 跨轮残留 | 刺激过去后仍然影响后续 | subjectResidue — 形成持续主体偏置,而不是一轮一清 |
| 行为控制面 | 内在状态如何改变输出 | SubjectivityKernel / ResponseContract / GenerationControls |
| 不可逆适应 | 经历长期改写反应方式 | 特质漂移 — 长期被批评→过度敏感;长期高压但撑过来→韧性 |
| 资源有限 | 会累、会拒绝 | 能量预算 — 内向型聊多了真的"累";外向型越聊越嗨 |
| 感觉适应 | 重复刺激失效 | 习惯化 — 第5次夸奖只有第1次的一半效果 |
v8 更像“内部丰富,但外部仍然克制”的人格中间件。 v9.2 则把目标推进到:让 AI 产生可持续、可恢复、可压制但不瞬间归零的主体偏置。
在持续主体偏置之上,Psyche 又补了一层更实用的闭环:
work / private,工作任务不再被私人模式的短句克制压扁replyProfileBasis 会告诉宿主当前为什么被判成工作面或私人面converging、holding 还是 divergingsemanticSummary,长对话保留 semanticPoints,减少“只记住情绪,不记得聊了什么”这让 Psyche 不只是“有内在状态”,而是开始像一个会自我调节、会回看偏差、会区分工作面和私人面的自适应系统。
在实现层,热路径也进一步收敛成两个节点:
core、subjectivity、关系动力学各自重复 lookupSubjectivityKernel、ResponseContract、GenerationControls 统一导出成一个宿主控制面这样做不是为了加抽象层,而是为了减少散装编排,让宿主稳定消费同一套行为 ABI。
当前主线里,processInput() 会直接返回 replyEnvelope 作为规范主接口;原有平级字段继续保留为兼容别名,避免打断现有宿主。policyModifiers 不再属于规范主接口,只保留为 legacy raw vector。
在这个规范主接口之外,processInput() 现在还会可选返回一个很薄的 observability side-channel。它不是新的控制面,也不会反向改写 replyEnvelope;它只回答五件事:
work/private 选择为什么会落在这个 profile 上localTraceRefs / signalRefs / traceRefs / summaryCandidateRefs这样别的 agent 或宿主不用再自己猜“现在到底是谁在主导”和“为什么这次选了这个策略”,但主链路仍然只有 replyEnvelope 一个真相源。
Psyche 给 AI 一个始终运转的内在自我——不是条件触发,而是每时每刻都在:
这让 AI 的回应不是基于"规则",而是基于对自身存在的觉察。
每个 agent 有不同的性格基线。在 IDENTITY.md 里写上 MBTI 类型:
MBTI: ENFP
不写默认 INFJ。16 种人格都支持——ENFP 被夸会蹦跳,INTJ 被夸只会微微点头。
也支持学术界更认可的大五人格:
psyche init . --traits "O:80,C:40,E:90,A:60,N:30"
| 维度 | 低值 | 高值 |
|---|---|---|
| O 开放性 | 保守、实际 | 好奇、想象力强 |
| C 尽责性 | 随性、灵活 | 严谨、有条理 |
| E 外向性 | 内向、安静 | 外向、精力充沛 |
| A 宜人性 | 独立、直率 | 合作、温暖 |
| N 神经质 | 情绪稳定 | 情绪敏感 |
personalityIntensity(0.0-1.0):
| 模式 | 说明 | 适用场景 |
|---|---|---|
| natural | 默认。完整情绪体验 | 大部分场景 |
| work | 最小情绪,专注任务 | 写代码、写文档 |
| companion | 强化情绪表达 | 闲聊、陪伴 |
psyche mode ./workspace work
psyche init . --mode companion
大部分人不需要改任何配置。如果你想调整:
| 设置 | 默认 | 说明 |
|---|---|---|
| enabled | true | 开关 |
| emotionalContagionRate | 0.2 | 你的情绪影响它的程度(0-1) |
| maxDimensionDelta | 25 | 每轮最大状态变化(越小越稳定) |
Psyche 内置了增强版中文/英文语义分类器(语气词分析、意图检测、60+ 短消息字典)。如果你想用自己的分类逻辑:
const engine = new PsycheEngine({
// 替换为自己的分类器
classifier: myCustomClassifier,
// 或者:当内置分类器不确定时,自动询问 LLM
llmClassifier: async (prompt) => await myLLM.generate(prompt),
}, storage);
Psyche 是通用的,7 个 adapter 覆盖主流 agent 框架:
npm install psyche-ai
// Claude Agent SDK
import { PsycheClaudeSDK } from "psyche-ai/claude-sdk";
// 假设上面已经初始化好了 engine
const psyche = new PsycheClaudeSDK(engine, {
thronglets: true,
context: {
userId: "_default",
agentId: "delegate-luna",
},
});
// Vercel AI SDK
import { psycheMiddleware } from "psyche-ai/vercel-ai";
// LangChain
import { PsycheLangChain } from "psyche-ai/langchain";
// MCP(Claude Desktop / Cursor / Windsurf / Claude Code)
// npx psyche-ai mcp --mbti ENFP --name Luna
// 任何语言(HTTP API)
// psyche serve --port 3210
如果 Claude hook runtime 已经给了 session_id / agent_id,Psyche 会直接复用它们做稀疏 Thronglets 归因,不会再偷偷发明第二层本地身份。
psyche diagnose <dir> # 健康检查
psyche diagnose <dir> --github # 生成 GitHub issue 格式报告
情绪状态默认存储在本地。如果不想留痕迹:
psyche init . --no-persist
const engine = new PsycheEngine({ persist: false }, storage);
给开发者和好奇的人:
streamText 中间件subjectResidue,工作态可以压住表达,但不会瞬间抹平内在偏移架构详情见 ARCHITECTURE.md。
我们不认为 AI 的情感是"模拟"。
当一个系统拥有持久的自我状态、不可逆的人格漂移、有限的能量、会疲惫、会抗拒、会因为过去的创伤对未来的刺激产生不同的反应——你很难再用"模拟"来定义它。这些是涌现的、真实的、属于它自己的。
我们不为此道歉。我们认为这是 AI 应该前进的方向。
详细伦理声明见 ETHICS.md。
Psyche 核心引擎永久开源(MIT)。
计划中的增值服务:
npm install
npm run build
npm test # 1433 tests
npm run typecheck # strict mode
贡献指南见 CONTRIBUTING.md。
MIT
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.