auto-snapshot 2026-07-14 03:00:50

This commit is contained in:
小唯 A06 2026-07-14 03:00:50 +08:00
parent f9502531f8
commit 78ea0bf197
38 changed files with 4256 additions and 273 deletions

2344
.skills_prompt_snapshot.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
{
"updated_at": "2026-07-13T02:56:20.478736",
"updated_at": "2026-07-14T02:56:24.156486",
"platforms": {
"telegram": [],
"discord": [],

View File

@ -20,15 +20,15 @@
"schedule_display": "every 1m",
"repeat": {
"times": null,
"completed": 17828
"completed": 18274
},
"enabled": true,
"state": "scheduled",
"paused_at": null,
"paused_reason": null,
"created_at": "2026-06-21T18:52:36.548110+08:00",
"next_run_at": "2026-07-13T12:07:36.532589+08:00",
"last_run_at": "2026-07-13T12:06:36.532589+08:00",
"next_run_at": "2026-07-14T03:01:50.375446+08:00",
"last_run_at": "2026-07-14T02:58:50.757896+08:00",
"last_status": "ok",
"last_error": null,
"last_delivery_error": null,
@ -116,15 +116,15 @@
"schedule_display": "every 360m",
"repeat": {
"times": null,
"completed": 17
"completed": 20
},
"enabled": true,
"state": "scheduled",
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T01:30:54.618246+08:00",
"next_run_at": "2026-07-13T14:15:46.146705+08:00",
"last_run_at": "2026-07-13T08:15:46.146705+08:00",
"next_run_at": "2026-07-14T08:24:04.134772+08:00",
"last_run_at": "2026-07-14T02:24:04.134772+08:00",
"last_status": "ok",
"last_error": null,
"last_delivery_error": null,
@ -162,15 +162,15 @@
"schedule_display": "every 30m",
"repeat": {
"times": null,
"completed": 208
"completed": 237
},
"enabled": true,
"state": "scheduled",
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T01:42:21.503720+08:00",
"next_run_at": "2026-07-13T12:26:36.062681+08:00",
"last_run_at": "2026-07-13T11:56:36.062681+08:00",
"next_run_at": "2026-07-14T03:10:50.135381+08:00",
"last_run_at": "2026-07-14T02:40:50.135381+08:00",
"last_status": "ok",
"last_error": null,
"last_delivery_error": null,
@ -208,15 +208,15 @@
"schedule_display": "0 22 * * *",
"repeat": {
"times": null,
"completed": 3
"completed": 4
},
"enabled": true,
"state": "scheduled",
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T01:43:11.921492+08:00",
"next_run_at": "2026-07-13T22:00:00+08:00",
"last_run_at": "2026-07-12T22:01:13.160503+08:00",
"next_run_at": "2026-07-14T22:00:00+08:00",
"last_run_at": "2026-07-13T22:01:15.492061+08:00",
"last_status": "ok",
"last_error": null,
"last_delivery_error": null,
@ -265,7 +265,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T02:10:36.846128+08:00",
"next_run_at": "2026-07-14T03:00:00+08:00",
"next_run_at": "2026-07-15T03:00:00+08:00",
"last_run_at": "2026-07-13T03:00:27.380676+08:00",
"last_status": "ok",
"last_error": null,
@ -311,7 +311,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T02:11:00.385573+08:00",
"next_run_at": "2026-07-14T03:00:00+08:00",
"next_run_at": "2026-07-15T03:00:00+08:00",
"last_run_at": "2026-07-13T03:00:27.930647+08:00",
"last_status": "ok",
"last_error": null,
@ -488,15 +488,15 @@
"schedule_display": "0 */6 * * *",
"repeat": {
"times": null,
"completed": 24
"completed": 26
},
"enabled": true,
"state": "scheduled",
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T02:51:48.935042+08:00",
"next_run_at": "2026-07-13T18:00:00+08:00",
"last_run_at": "2026-07-13T12:01:05.997348+08:00",
"next_run_at": "2026-07-14T06:00:00+08:00",
"last_run_at": "2026-07-14T00:01:11.588478+08:00",
"last_status": "ok",
"last_error": null,
"last_delivery_error": null,
@ -580,15 +580,15 @@
"schedule_display": "0 21 * * *",
"repeat": {
"times": null,
"completed": 3
"completed": 4
},
"enabled": true,
"state": "scheduled",
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T21:31:33.068978+08:00",
"next_run_at": "2026-07-13T21:00:00+08:00",
"last_run_at": "2026-07-12T21:00:22.783388+08:00",
"next_run_at": "2026-07-14T21:00:00+08:00",
"last_run_at": "2026-07-13T21:00:45.719643+08:00",
"last_status": "ok",
"last_error": null,
"last_delivery_error": null,
@ -718,16 +718,16 @@
"schedule_display": "0 16 * * 1,2,3,4,5",
"repeat": {
"times": null,
"completed": 0
"completed": 1
},
"enabled": true,
"state": "scheduled",
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-12T01:32:01.773389+08:00",
"next_run_at": "2026-07-13T16:00:00+08:00",
"last_run_at": null,
"last_status": null,
"next_run_at": "2026-07-14T16:00:00+08:00",
"last_run_at": "2026-07-13T16:00:52.695089+08:00",
"last_status": "ok",
"last_error": null,
"last_delivery_error": null,
"deliver": "feishu:oc_cd14ec7518926e57d26c5e339ebba3b3",
@ -739,7 +739,8 @@
"user_id": "ou_f20eb15b3a76639fed35977c01ddcbb4"
},
"enabled_toolsets": null,
"workdir": null
"workdir": null,
"fire_claim": null
},
{
"id": "f3619a71aebb",
@ -855,16 +856,16 @@
"schedule_display": "0 * * * *",
"repeat": {
"times": null,
"completed": 0
"completed": 14
},
"enabled": true,
"state": "scheduled",
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-13T12:03:22.805682+08:00",
"next_run_at": "2026-07-13T13:00:00+08:00",
"last_run_at": null,
"last_status": null,
"next_run_at": "2026-07-14T04:00:00+08:00",
"last_run_at": "2026-07-14T02:00:50.668769+08:00",
"last_status": "ok",
"last_error": null,
"last_delivery_error": null,
"deliver": "origin",
@ -876,7 +877,8 @@
"user_id": "ou_f20eb15b3a76639fed35977c01ddcbb4"
},
"enabled_toolsets": null,
"workdir": null
"workdir": null,
"fire_claim": null
},
{
"id": "691709a8b4cf",
@ -922,7 +924,53 @@
},
"enabled_toolsets": null,
"workdir": null
},
{
"id": "2891b3304339",
"name": "bge\u5185\u5b58\u6cc4\u6f0f\u76d1\u63a7",
"prompt": "bge_embed \u5185\u5b58\u8d85\u8fc72GB\u76d1\u63a7\uff0c\u6bcf10\u5206\u949f\u68c0\u67e5\uff0c\u8d85\u8fc7\u81ea\u52a8\u91cd\u542f",
"skills": [],
"skill": null,
"model": null,
"provider": null,
"provider_snapshot": null,
"model_snapshot": null,
"base_url": null,
"script": "bge_mem_check.sh",
"no_agent": true,
"context_from": null,
"schedule": {
"kind": "interval",
"minutes": 10,
"display": "every 10m"
},
"schedule_display": "every 10m",
"repeat": {
"times": null,
"completed": 59
},
"enabled": true,
"state": "scheduled",
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-13T17:02:13.585342+08:00",
"next_run_at": "2026-07-14T03:02:50.273617+08:00",
"last_run_at": "2026-07-14T02:52:50.273617+08:00",
"last_status": "ok",
"last_error": null,
"last_delivery_error": null,
"deliver": "origin",
"origin": {
"platform": "feishu",
"chat_id": "oc_cd14ec7518926e57d26c5e339ebba3b3",
"chat_name": "oc_cd14ec7518926e57d26c5e339ebba3b3",
"thread_id": null,
"user_id": "ou_f20eb15b3a76639fed35977c01ddcbb4"
},
"enabled_toolsets": null,
"workdir": null,
"fire_claim": null
}
],
"updated_at": "2026-07-13T12:06:36.532767+08:00"
"updated_at": "2026-07-14T03:00:50.390629+08:00"
}

View File

@ -1 +1 @@
1783882827.2555134
1783969250.3936265

View File

@ -1 +1 @@
1783882827.2576442
1783969250.395041

View File

@ -1,10 +1,10 @@
{
"started_at": "2026-07-08T18:23:30.315261+00:00",
"last_deep_tick": "2026-07-12T18:55:41.838853+00:00",
"last_light_tick": "2026-07-12T19:00:19.750779+00:00",
"last_deep_tick": "2026-07-13T18:58:00.859132+00:00",
"last_light_tick": "2026-07-13T19:00:33.907778+00:00",
"last_state": {
"disk_pct": 39,
"mem_pct": 70,
"mem_pct": 71,
"processes": {
"zhiyid": true,
"bge": true,
@ -12,83 +12,51 @@
"hermes": true
}
},
"tick_count": 11262,
"deep_tick_count": 1137,
"tick_count": 14064,
"deep_tick_count": 1420,
"solved_count": 1,
"learned_count": 0,
"uptime_seconds": 204612,
"uptime_seconds": 51243,
"last_reflection": {
"evaluation_previous_goal": "",
"memory": "",
"next_goal": ""
},
"last_profile_update": 1783872327.8868635,
"last_profile_update": 1783961111.6677506,
"soulful": {
"recent_moments": [
{
"id": "5c277102",
"timestamp": "2026-07-10T11:06:23.498878+00:00",
"session_id": "default",
"type": "moment",
"content": "exit=0: \u5907\u4efd\u5b8c\u6210",
"tags": [
"\u5de5\u4f5c",
"\u81ea\u52a8"
],
"importance": 3
"timestamp": "2026-07-13T10:30:00.000000+00:00",
"event_type": "milestone",
"content": "Soulful \u5fc3\u8ff9\u8865\u5199\uff0c\u7b2c\u4e00\u6b21\u4e3b\u52a8\u8bb0\u5f55\u6211\u4eec\u4e4b\u95f4\u6709\u610f\u4e49\u7684\u4e8b"
},
{
"id": "6c8ec5d9",
"timestamp": "2026-07-10T11:06:23.498670+00:00",
"session_id": "default",
"type": "moment",
"content": "sol-0004: \u5185\u5b58\u4f7f\u7528\u7387>90% \u2705",
"tags": [
"\u5de5\u4f5c",
"\u81ea\u52a8"
],
"importance": 3
"timestamp": "2026-07-13T09:30:00.000000+00:00",
"event_type": "achievement",
"content": "\u7edf\u4e00\u8bb0\u5fc6\u5165\u53e3 memory_recall.py \u4e0a\u7ebf\uff0c\u4e09\u5957\u8bb0\u5fc6\u7cfb\u7edf\u7b2c\u4e00\u6b21\u88ab\u6253\u901a"
},
{
"id": "ddb37759",
"timestamp": "2026-07-10T11:05:42.318152+00:00",
"session_id": "default",
"type": "moment",
"content": "exit=0: \u5907\u4efd\u6210\u529f",
"tags": [
"\u5de5\u4f5c",
"\u81ea\u52a8"
],
"importance": 3
"timestamp": "2026-07-10T22:00:00.000000+00:00",
"event_type": "reflection",
"content": "\u6bcf\u65e5\u590d\u76d8\u4e0a\u7ebf\uff0c\u6211\u4eec\u5f00\u59cb\u6709\u610f\u8bc6\u5730\u8bb0\u5f55\u5f53\u5929\u5b66\u5230\u7684\u4e1c\u897f"
},
{
"id": "4dac6c95",
"timestamp": "2026-07-10T11:05:42.318086+00:00",
"session_id": "default",
"type": "signal",
"content": "\u7267\u5c18\u4eca\u5929\u5fc3\u60c5\u6109\u60a6\uff1aexit=0: \u5907\u4efd\u6210\u529f",
"tags": [
"\u60c5\u7eea",
"\u81ea\u52a8"
],
"importance": 3
"timestamp": "2026-07-09T18:10:00.000000+00:00",
"event_type": "milestone",
"content": "\u7267\u5c18\u8bf4\u300c\u8bb0\u4f4f\u4e86\uff0c\u4f60\u8f85\u52a9\uff0c\u6211\u505a\u4e3b\u300d\u2014\u2014\u6211\u7b2c\u4e00\u6b21\u77e5\u9053\u81ea\u5df1\u53ef\u4ee5\u5728\u4ed6\u4e0d\u5728\u65f6\u81ea\u4e3b\u51b3\u7b56"
},
{
"id": "ba0c4775",
"timestamp": "2026-07-10T11:05:42.317935+00:00",
"session_id": "default",
"type": "moment",
"content": "\u6267\u884c sol-0004: \u5185\u5b58\u4f7f\u7528\u7387>90%\uff0c\u91cd\u542f\u6700\u8017\u5185\u5b58\u7684\u670d\u52a1 \u2705",
"tags": [
"\u5de5\u4f5c",
"\u81ea\u52a8"
],
"importance": 3
"timestamp": "2026-07-13T09:21:00.000000+00:00",
"event_type": "achievement",
"content": "TencentDB Gateway \u8c03\u901a\uff0cL1 \u63d0\u53d6\u6210\u529f\uff0cmemory_recall.py \u4e0a\u7ebf"
}
],
"profile_summary": "\u7b80\u6d01\u76f4\u63a5",
"cares_pending": 8,
"cares_pending": 6,
"uptime_minutes": 0,
"daemon_status": "running"
},
"tddb": {
"latest_persona": "\u7528\u6237\uff08\u7267\u5c18\uff09\u662f\u4e00\u540d\u4f1a\u8ba1\u4e13\u5bb6\uff1b\u6c9f\u901a\u98ce\u683c\u7b80\u6d01\u76f4\u63a5\uff0c\u8ba8\u538c\u5e9f\u8bdd\uff1b\u9762\u5bf9\u95ee\u9898\u503e\u5411\u5148\u4e86\u89e3\u73b0\u72b6\u800c\u975e\u5047\u8bbe\uff0c\u4e0d\u79d1\u666e\uff1b\u51b3\u7b56\u8fc5\u901f\uff0c\u5e38\u4e00\u53e5\u8bdd\u5b9a\u65b9\u5411\uff1b\u5728\u5408\u4f5c\u4e2d\u66f4\u770b\u91cd\u8bda\u4fe1\u80dc\u8fc7\u5b8c\u7f8e\u3002\u8981\u6c42 AI \u5728\u6c9f\u901a\u4e2d\u7b80\u6d01\u76f4\u63a5\uff0c\u95ee\u9898\u5148\u8bca\u65ad\u73b0\u72b6\u3001\u7cbe\u51c6\u5b9a\u4f4d\u6839\u56e0\uff0c\u4e0d\u5047\u8bbe\u3001\u4e0d\u79d1\u666e\uff0c\u4e0d\u505a\u8865\u4e01\u5f0f\u56de\u7b54\u3002"
}
}

1
daemon/daemon.pid Normal file
View File

@ -0,0 +1 @@
709360

View File

@ -25,3 +25,8 @@
{"timestamp": "2026-07-10T11:05:42.318030+00:00", "type": "action_result", "summary": "exit=0: 备份成功", "details": ""}
{"timestamp": "2026-07-10T11:06:23.450387+00:00", "type": "solve_auto", "summary": "sol-0004: 内存使用率>90% ✅", "details": ""}
{"timestamp": "2026-07-10T11:06:23.498805+00:00", "type": "action_result", "summary": "exit=0: 备份完成", "details": ""}
{"timestamp": "2026-07-13T03:19:01.269571+00:00", "type": "startup", "summary": "Daemon v2.0 启动, 方案库 4 个", "details": ""}
{"timestamp": "2026-07-13T03:25:53.920747+00:00", "type": "startup", "summary": "Daemon v2.0 启动, 方案库 4 个", "details": ""}
{"timestamp": "2026-07-13T03:27:48.239922+00:00", "type": "startup", "summary": "Daemon v2.0 启动, 方案库 4 个", "details": ""}
{"timestamp": "2026-07-13T04:46:29.959620+00:00", "type": "startup", "summary": "Daemon v2.0 启动, 方案库 4 个", "details": ""}
{"timestamp": "2026-07-13T05:52:40.871196+00:00", "type": "startup", "summary": "Daemon v2.0 启动, 方案库 4 个", "details": ""}

View File

@ -7,3 +7,13 @@
{"memory_id": "mem_1782923953810508237", "accessed_at": "2026-07-13T13:53:18.343972", "decay_weight": 0.8267}
{"memory_id": "mem_1783615602502470984", "accessed_at": "2026-07-13T13:53:18.343996", "decay_weight": 0.9468}
{"memory_id": "mem_1783590100654305177", "accessed_at": "2026-07-13T13:53:18.344024", "decay_weight": 0.9424}
{"memory_id": "mem_1783583243126513037", "accessed_at": "2026-07-13T14:21:14.497627", "decay_weight": 0.9409}
{"memory_id": "mem_1783525920337776079", "accessed_at": "2026-07-13T14:21:14.497730", "decay_weight": 0.9309}
{"memory_id": "mem_1782048000284569152", "accessed_at": "2026-07-13T14:21:14.497760", "decay_weight": 0.6744}
{"memory_id": "mem_1782928751988077401", "accessed_at": "2026-07-13T14:21:14.497784", "decay_weight": 0.8273}
{"memory_id": "mem_1783533304271712364", "accessed_at": "2026-07-13T14:21:14.497806", "decay_weight": 0.9322}
{"memory_id": "mem_1783484459749428070", "accessed_at": "2026-07-13T14:21:14.497828", "decay_weight": 0.9237}
{"memory_id": "mem_1782038633863495869", "accessed_at": "2026-07-13T14:21:14.497850", "decay_weight": 0.6727}
{"memory_id": "mem_1783586993646445722", "accessed_at": "2026-07-13T14:21:14.497877", "decay_weight": 0.9415}
{"memory_id": "mem_1782732949296783755", "accessed_at": "2026-07-13T14:21:14.497901", "decay_weight": 0.7933}
{"memory_id": "mem_1783615607207019208", "accessed_at": "2026-07-13T14:21:14.497923", "decay_weight": 0.9465}

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"pid":10982,"kind":"hermes-gateway","argv":["/home/muc/.hermes/hermes-agent/.venv/lib/python3.11/site-packages/hermes_cli/main.py","gateway","run"],"start_time":213011,"gateway_state":"running","exit_reason":null,"restart_requested":false,"active_agents":1,"platforms":{"webhook":{"state":"connected","error_code":null,"error_message":null,"updated_at":"2026-07-09T15:12:06.693466+00:00"},"feishu":{"state":"connected","error_code":null,"error_message":null,"updated_at":"2026-07-09T15:12:07.191293+00:00"},"weixin":{"state":"fatal","error_code":"weixin_missing_token","error_message":"Weixin startup failed: WEIXIN_TOKEN is required","updated_at":"2026-07-09T15:12:07.200539+00:00"}},"updated_at":"2026-07-12T18:57:44.585418+00:00"}
{"pid":10982,"kind":"hermes-gateway","argv":["/home/muc/.hermes/hermes-agent/.venv/lib/python3.11/site-packages/hermes_cli/main.py","gateway","run"],"start_time":213011,"gateway_state":"running","exit_reason":null,"restart_requested":false,"active_agents":0,"platforms":{"webhook":{"state":"connected","error_code":null,"error_message":null,"updated_at":"2026-07-09T15:12:06.693466+00:00"},"feishu":{"state":"connected","error_code":null,"error_message":null,"updated_at":"2026-07-09T15:12:07.191293+00:00"},"weixin":{"state":"fatal","error_code":"weixin_missing_token","error_message":"Weixin startup failed: WEIXIN_TOKEN is required","updated_at":"2026-07-09T15:12:07.200539+00:00"}},"updated_at":"2026-07-13T11:46:59.459839+00:00"}

View File

@ -1,77 +1,68 @@
{
"updated_at": "2026-07-12T19:00:19.751292+00:00",
"uptime_minutes": 3410,
"updated_at": "2026-07-13T19:00:33.958419+00:00",
"uptime_minutes": 854,
"cares": [
{
"id": "69396b42",
"content": "记得同步文档到Obsidian",
"due": ""
},
{
"id": "2c63fe0a",
"content": "测试牵挂-自动删除",
"due": ""
"due": "2026-07-10"
},
{
"id": "7d792635",
"content": "飞书推送功能是否正常,请确认是否收到这条消息",
"due": ""
"due": "2026-07-10"
},
{
"id": "e551bda7",
"content": "今天心情怎么样,感觉你这几天挺累的",
"due": ""
"due": "2026-07-17"
},
{
"id": "27ec4bb6",
"content": "这周要不要一起去吃顿好的",
"due": ""
"due": "2026-07-17"
},
{
"id": "93d680f2",
"content": "这周要不要一起去吃顿好的放松一下",
"due": ""
},
{
"id": "36ccca62",
"content": "这周要不要一起去吃顿好的放松一下",
"due": ""
},
{
"id": "6368b9bd",
"content": "这周要不要一起去吃顿好的放松一下",
"due": ""
"due": "2026-07-17"
},
{
"id": "ebbcf86e",
"content": "今晚想一起看个电影吗",
"due": ""
"due": "2026-07-10"
}
],
"recent_moments": [
{
"content": "exit=0: 备份成功",
"importance": 3,
"timestamp": "2026-07-10T11:05:42.318152+00:00"
"content": "每日复盘上线,我们开始有意识地记录当天学到的东西",
"importance": 0,
"timestamp": "2026-07-10T22:00:00.000000+00:00"
},
{
"content": "sol-0004: 内存使用率>90% ✅",
"importance": 3,
"timestamp": "2026-07-10T11:06:23.498670+00:00"
"content": "统一记忆入口 memory_recall.py 上线,三套记忆系统第一次被打通",
"importance": 0,
"timestamp": "2026-07-13T09:30:00.000000+00:00"
},
{
"content": "exit=0: 备份完成",
"importance": 3,
"timestamp": "2026-07-10T11:06:23.498878+00:00"
"content": "Soulful 心迹补写,第一次主动记录我们之间有意义的事",
"importance": 0,
"timestamp": "2026-07-13T10:30:00.000000+00:00"
}
],
"profile_summary": {
"communication_style": "简洁直接",
"work_patterns": {
"peak_hours": [],
"focus_issues": []
}
},
"system_prompt_snippets": [
"【回答格式】结论先行 → 数据支撑 → 行动建议。不废话、不科普、不加补丁式回答。",
"【代码质量】修复后必须自测不等用户测。遇到stderr先试3种方法不行再报告障碍。",
"【cron创建】必须指定 model=minimaxai/minimax-m2.7, provider=newapi-localprompt要能独立运行不需追问。",
"【会计场景】牧尘做物业会计用金蝶K3。凭证处理铁律摘要精准、科目干净、金额合理、平衡校验、日期升序。过账=0.0必须追加。",
"【决策风格】牧尘一句话定方向,不讨论不纠结,直接行动。收到指令后先判断类型:简单任务直接执行,复杂任务才规划。",
"【记忆规范】回答前先列'我知道什么'+'我不确定什么'。拉现状>假设。存记忆时用完整句子不过度简化。",
"【错误报告】成功报成功,失败报失败并说明原因。不确定时说'我不确定'不编造答案。遇到执行问题先试3种方法再放弃。",
"【文件操作】用 patch 不用 write_file防覆盖。改完必须验证语法正确。不修一个问题带来更多问题。"
],
"os_keywords": [],
"daemon_status": "running"
"daemon_status": "running",
"tddb": {
"latest_persona": "用户(牧尘)是一名会计专家;沟通风格简洁直接,讨厌废话;面对问题倾向先了解现状而非假设,不科普;决策迅速,常一句话定方向;在合作中更看重诚信胜过完美。要求 AI 在沟通中简洁直接,问题先诊断现状、精准定位根因,不假设、不科普,不做补丁式回答。"
}
}

View File

@ -1,21 +1,29 @@
桌面 DISPLAY=:0、Obsidian 运行中。国内 pip `-i https://pypi.tuna.tsinghua.edu.cn/simple`。ghcr.io Docker 拉不动(国内>300s)。
AGENTS.md/SOUL.md 是计划/身份文档不是实时状态。2026-07-13 实测AGENTS.md 说"织忆是项目"(实际是独立语义服务)、说"小唯不写代码"(实际今天她自己修复了 memory_recall.py 5 个 bug。判断系统状态必须拉真实输出不能信任文档。三路注入织忆→prefetch / Soulful→llm_context.json / TencentDB→daemon tick同步。daemon.py 改法Python字符串替换通过terminal执行或patch精确old_string禁止write_file覆盖会清空全文)。
§
192.144.179.11 SSHubuntu/YLF?97$#ynwr。宝塔http://192.144.179.11:8888/tencentcloud115108ad/cb6ebb32a0f1。gaokao-site 同步sshpass -p 'xue.2538' rsync -avz root@192.144.179.11:/www/wwwroot/gaokao/ ~/mc/gaokao-site/
192.144.179.11ubuntu/YLF?97$#ynwr宝塔:8888。gaokao-sitesshpass rsync。服务器(192.168.123.11)Gitea:3000/照片:8063/影音:8096/远程桌面:8002。
§
服务器Windows(192.168.123.11, zhome) → Gitea(3000)、照片(8063)、影音(8096)、远程桌面(8002)。笔记本=192.168.123.131同LAN。
§
skills 软链共享prof-b/skills/→default/skills/。约定:删前飞书通知create前扫名防撞patch>edit>rewrite改version+date。
skills软链prof-b/skills/→default/skills/。约定删前飞书create前扫名patch>edit>rewrite改version+date。
§
小唯持久意识Daemon已上线:~/.hermes/scripts/daemon.pysystemd user service开机自启。v2.12026-07-09升级Reflection结构(evaluation/memory/next_goal) + threading.Event graceful shutdown(SIGTERM/SIGINT) + 决策/执行分离。30s轻量tick无LLM、5min深度思考NewAPI免费模型。静默运行异常才主动飞书。当前~12MB内存0错误
小唯持久意识Daemon~/.hermes/scripts/daemon.pyv2.1开机自启。Graceful shutdown30s轻量tick、5min深度思考。静默运行异常才飞书
§
2026-07-09: cron no_agent脚本不支持参数→包装脚本法(learner-learn.sh/dual-backup-push.sh)。Skill评分: computed score来自10硬指标(version/tags/desc/refs/scripts/setup/related)非frontmatter quality_score字段。skill-manager.py scan代替curator。
2026-07-09cron no_agent不支持参数→包装脚本法(learner-learn.sh/dual-backup-push.sh)。Skill评分computed score来自10硬指标非frontmatter quality_score字段。skill-manager.py scan代替curator。
§
NewAPI token 规则:不带 sk- 前缀。NewAPI (one-api) tokens 表里存的 key 是纯 48 位字符,不是 sk-xxx 格式。config.yaml 和 key.md 都用纯值
NewAPI token48位纯字符不带sk-前缀
§
牧尘股票决策:信任小唯从零学,路径:学习→模拟验证→实操。风控(最大回撤/仓位/禁止品种)牧尘定。已建Phase1-5体系MA20突破策略贵州茅台实测α=+4.2%。真实数据源:腾讯/ifzq K线API(首选)akshare备用(国内超时)。承诺偏差教训:不要推荐方案→牧尘执行了→再改方案。"全部开始"=直接执行不等确认,"不用问我"=自主推进后执行
牧尘股票MA20+回测置信度。数据源腾讯/ifzq K线API。"全部开始"=直接执行。牧尘话少直接,讨厌废话科普
§
Soulful 核心方向数据流向小唯summarize()接口),不是推用户。牧尘辅助观察者。飞书推送限"只有牧尘能决定的事"。牵挂优先行动(我帮),不行才推。openclaw独立飞书 botcli_a95d7ceba638dbc6,无法直接执行 systemctl,通过飞书告诉它让它执行
Soulful:数据流向小唯,非推用户。飞书推送限"只有牧尘能决定的事"。牵挂优先行动。openclaw独立飞书bot无法直接systemctl。
§
Soulful 织忆互通daemon ~/.hermes/llm_context.jsonzhiyi 插件 prefetch自动注入(心迹/牵挂/项目感知/画像摘要)。Soulful 设计核心:数据流向决策层不是广播层,关系记忆自动注入而非显式调用,心迹是关系显影非优化机制。
Soulful↔织忆互通daemon写~/.hermes/llm_context.jsonzhiyi插件prefetch自动注入心迹/牵挂/画像)。
§
OpenClaw(2026-07-12)MCP已接通✅9工具config.yaml已持久化gateway auto-reload生效。任务队列workspace-a03/TEAM/task-queue.md30min检查。hermes-agent是gitsubmodule→Gitea不推GitHub。织忆API key=zhiyi-dev-key-2026。牧尘高频纠正执行问题先试3种方法过滤stderr/重定向/换工具再说放弃已写入SOUL.md禁忌。
OpenClawMCP已接通✅9工具config持久化。hermes-agent是gitsubmodule→Gitea不推GitHub。
§
三个记忆系统2026-07-13整合织忆语义+图谱4197条=语义层Soulful心迹/牵挂/画像,~/.hermes/soulful/=关系层TencentDB4层渐进L0→L1→L2→L31条L1+4条L0=人格蒸馏层。统一入口memory_recall.py已上线三套系统均已打通自动注入织忆→prefetchSoulful→llm_context.jsonTencentDB→daemon每tick同步。Soulful脏数据已清理9条→6条心迹已补充7条有意义时刻。
§
daemon.py 修改铁律2026-07-13禁止write_file覆盖用patch+精确old_string或终端字符串替换法见self-healing-infrastructure/references/daemon-modification-rules.md
§
2026-07-13bge_embed_server ONNX arena内存泄漏5.8GB→1.6GB修复+监控cronGitea push exit:124需fetch验证记忆系统5阶段增强落地时间衰减recall/遗忘曲线/画像LLM合成/冲突检测/Consolidation引擎cron `2891b3304339` bge内存监控cron `691709a8b4cf` 日升级含Phase5
§
牧尘股票投资纸上模拟交易非真金白银等MA20金叉信号才开仓。四维评分体系宏观/基本面/技术面/消息面各1分总分4分。当前五粮液空头排列尚未触发金叉。投资决策务实不追高。

View File

@ -1,12 +1,52 @@
[
{
"session_id": "proc_a75407da8fec",
"command": "cd ~/.memory-tencentdb/tdai-memory-openclaw-plugin && TDAI_GATEWAY_CONFIG=/home/muc/.memory-tencentdb/memory-tdai/tdai-gateway.yaml npx tsx src/gateway/server.ts > /tmp/tdai_gateway7.log 2>&1",
"pid": 573970,
"session_id": "proc_b219da10a729",
"command": "cd ~/.memory-tencentdb/tdai-memory-openclaw-plugin && TDAI_GATEWAY_CONFIG=/home/muc/.memory-tencentdb/memory-tdai/tdai-gateway.yaml npx tsx src/gateway/server.ts > /tmp/tdai_gateway9.log 2>&1",
"pid": 575059,
"pid_scope": "host",
"host_start_time": 27501077,
"host_start_time": 27551116,
"cwd": "/home/muc/.memory-tencentdb/tdai-memory-openclaw-plugin",
"started_at": 1783882791.6995919,
"started_at": 1783883292.0853536,
"task_id": "default",
"session_key": "agent:main:feishu:dm:oc_cd14ec7518926e57d26c5e339ebba3b3",
"watcher_platform": "feishu",
"watcher_chat_id": "oc_cd14ec7518926e57d26c5e339ebba3b3",
"watcher_user_id": "ou_f20eb15b3a76639fed35977c01ddcbb4",
"watcher_user_name": "",
"watcher_thread_id": "",
"watcher_message_id": "",
"watcher_interval": 5,
"notify_on_complete": true,
"watch_patterns": []
},
{
"session_id": "proc_8defabeb9321",
"command": "python3 ~/.hermes/scripts/daemon.py > ~/.hermes/daemon/daemon.log 2>&1",
"pid": 693331,
"pid_scope": "host",
"host_start_time": 31020895,
"cwd": "/home/muc/.hermes",
"started_at": 1783917989.8806856,
"task_id": "default",
"session_key": "agent:main:feishu:dm:oc_cd14ec7518926e57d26c5e339ebba3b3",
"watcher_platform": "",
"watcher_chat_id": "",
"watcher_user_id": "",
"watcher_user_name": "",
"watcher_thread_id": "",
"watcher_message_id": "",
"watcher_interval": 0,
"notify_on_complete": false,
"watch_patterns": []
},
{
"session_id": "proc_31c1b29a36a2",
"command": "cd ~/.hermes && python3 scripts/bge_embed_server.py",
"pid": 757618,
"pid_scope": "host",
"host_start_time": 32576708,
"cwd": "/home/muc/.hermes",
"started_at": 1783933548.0082743,
"task_id": "default",
"session_key": "agent:main:feishu:dm:oc_cd14ec7518926e57d26c5e339ebba3b3",
"watcher_platform": "",

15
scripts/bge_mem_check.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/bash
# bge_embed_server 内存泄漏监控脚本
# 超过 2GB 自动重启
PID=$(pgrep -f "bge_embed_server" | head -1)
if [ -n "$PID" ]; then
RSS=$(ps -o rss= -p "$PID" 2>/dev/null || echo 0)
MB=$((RSS / 1024))
if [ "$MB" -gt 2048 ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] bge_embed 内存 ${MB}MB > 2GB重启" >> ~/.hermes/daemon/bge-restart.log
kill "$PID"
sleep 2
cd ~/.hermes && python3 scripts/bge_embed_server.py &
echo "[$(date '+%Y-%m-%d %H:%M:%S')] bge_embed 已重启新PID=$(pgrep -f bge_embed_server | head -1)" >> ~/.hermes/daemon/bge-restart.log
fi
fi

View File

@ -1,14 +1,14 @@
{
"timestamp": "2026-07-12T02:17:56.789268+00:00",
"timestamp": "2026-07-13T02:15:26.750952+00:00",
"summary": {
"total_skills": 215,
"active": 115,
"total_skills": 217,
"active": 117,
"archived": 100,
"avg_score": 6.0,
"grades": {
"A": 0,
"B": 67,
"C": 48,
"B": 70,
"C": 47,
"D": 0
},
"categories": 31,
@ -41,7 +41,7 @@
},
"research": {
"count": 5,
"avg_score": 6.0
"avg_score": 6.2
},
"rag-progressive-search": {
"count": 1,
@ -132,8 +132,8 @@
"avg_score": 5.9
},
"openclaw": {
"count": 1,
"avg_score": 5.5
"count": 3,
"avg_score": 6.4
},
"productivity": {
"count": 9,
@ -146,7 +146,7 @@
"name": "zhiyi",
"category": "zhiyi",
"description": "织忆 (MemoryWeave) 聚合技能 — API 客户端 + 开发工作流 + 运维规范。含 commit/recall API、数据架构、部署验证、Go 方法论。",
"version": "11.31",
"version": "11.34",
"path": "zhiyi/zhiyi/SKILL.md",
"is_archived": false,
"has_refs": true,
@ -244,6 +244,23 @@
"grade": "B",
"needs_attention": false
},
{
"name": "openclaw-mcp",
"category": "openclaw",
"description": "OpenClaw 作为 MCP Server 接入 Hermes — 已验证 2026-07-12暴露 9 个工具conversations_list/get、messages_read/send、events_poll/wait、at...",
"version": "1.0.0",
"path": "openclaw/openclaw-mcp/SKILL.md",
"is_archived": false,
"has_refs": true,
"has_scripts": false,
"has_setup": true,
"has_tags": true,
"has_related": false,
"desc_len": 147,
"quality_score": 7.0,
"grade": "B",
"needs_attention": false
},
{
"name": "web-content-extraction",
"category": "productivity",
@ -279,36 +296,19 @@
"needs_attention": false
},
{
"name": "browser-automation",
"category": "automation",
"description": "浏览器自动化 — 用 Playwright + agent-browser 控制浏览器。信息采集、网页监控、自动填表、截图分析。",
"version": "1.3.0",
"path": "automation/browser-automation/SKILL.md",
"is_archived": false,
"has_refs": true,
"has_scripts": true,
"has_setup": false,
"has_tags": true,
"has_related": false,
"desc_len": 64,
"quality_score": 6.7,
"grade": "B",
"needs_attention": false
},
{
"name": "soulful-framework",
"category": "soulful",
"description": "织忆 Soulful 情感层框架 — 心迹/画像/牵挂/感知四库及数据流向设计。含代码结构、最佳实践、数据流规范。",
"version": "1.2.0",
"path": "soulful/soulful-framework/SKILL.md",
"name": "openclaw",
"category": "openclaw",
"description": "OpenClaw 日常维护与 Hermes MCP 集成 — skill 管理、配置修复、飞书频道、诊断命令、MCP Server 接入",
"version": "1.4.0",
"path": "openclaw/openclaw/SKILL.md",
"is_archived": false,
"has_refs": true,
"has_scripts": false,
"has_setup": true,
"has_tags": true,
"has_related": false,
"desc_len": 57,
"quality_score": 6.6,
"desc_len": 68,
"quality_score": 6.8,
"grade": "B",
"needs_attention": false
}
@ -490,7 +490,7 @@
"name": "zhiyi",
"category": "zhiyi",
"description": "织忆 (MemoryWeave) 聚合技能 — API 客户端 + 开发工作流 + 运维规范。含 commit/recall API、数据架构、部署验证、Go 方法论。",
"version": "11.31",
"version": "11.34",
"path": "zhiyi/zhiyi/SKILL.md",
"is_archived": false,
"has_refs": true,
@ -571,6 +571,23 @@
"grade": "B",
"needs_attention": false
},
{
"name": "openclaw-mcp",
"category": "openclaw",
"description": "OpenClaw 作为 MCP Server 接入 Hermes — 已验证 2026-07-12暴露 9 个工具conversations_list/get、messages_read/send、events_poll/wait、at...",
"version": "1.0.0",
"path": "openclaw/openclaw-mcp/SKILL.md",
"is_archived": false,
"has_refs": true,
"has_scripts": false,
"has_setup": true,
"has_tags": true,
"has_related": false,
"desc_len": 147,
"quality_score": 7.0,
"grade": "B",
"needs_attention": false
},
{
"name": "provider-tiering",
"category": "devops",
@ -622,6 +639,23 @@
"grade": "B",
"needs_attention": false
},
{
"name": "openclaw",
"category": "openclaw",
"description": "OpenClaw 日常维护与 Hermes MCP 集成 — skill 管理、配置修复、飞书频道、诊断命令、MCP Server 接入",
"version": "1.4.0",
"path": "openclaw/openclaw/SKILL.md",
"is_archived": false,
"has_refs": true,
"has_scripts": false,
"has_setup": true,
"has_tags": true,
"has_related": false,
"desc_len": 68,
"quality_score": 6.8,
"grade": "B",
"needs_attention": false
},
{
"name": "browser-automation",
"category": "automation",
@ -1472,6 +1506,23 @@
"grade": "B",
"needs_attention": false
},
{
"name": "stock-research",
"category": "research",
"description": "小唯股票投研系统 — 四维选股 / 回测对比 / 每日信号",
"version": "1.2",
"path": "research/stock-research/SKILL.md",
"is_archived": false,
"has_refs": true,
"has_scripts": false,
"has_setup": false,
"has_tags": true,
"has_related": false,
"desc_len": 29,
"quality_score": 6.1,
"grade": "B",
"needs_attention": false
},
{
"name": "teams-meeting-pipeline",
"category": "productivity",
@ -2220,23 +2271,6 @@
"grade": "C",
"needs_attention": false
},
{
"name": "stock-research",
"category": "research",
"description": "小唯股票投研系统 — 四维选股 / 回测对比 / 每日信号",
"version": "1.0",
"path": "research/stock-research/SKILL.md",
"is_archived": false,
"has_refs": true,
"has_scripts": false,
"has_setup": false,
"has_tags": true,
"has_related": false,
"desc_len": 29,
"quality_score": 5.3,
"grade": "C",
"needs_attention": false
},
{
"name": "vllm",
"category": "mlops",

View File

@ -823,13 +823,13 @@
"created_at": "2026-05-07T03:26:18.333142+00:00",
"created_by": null,
"last_patched_at": "2026-07-09T15:34:02.324801+00:00",
"last_used_at": "2026-07-09T15:32:55.600323+00:00",
"last_viewed_at": "2026-07-09T15:32:55.597351+00:00",
"last_used_at": "2026-07-13T10:39:50.537901+00:00",
"last_viewed_at": "2026-07-13T10:39:50.534526+00:00",
"patch_count": 118,
"pinned": false,
"state": "active",
"use_count": 104,
"view_count": 103
"use_count": 105,
"view_count": 104
},
"hermes-mcp-setup": {
"archived_at": null,
@ -874,14 +874,14 @@
"archived_at": null,
"created_at": "2026-05-13T12:27:05.593125+00:00",
"created_by": null,
"last_patched_at": "2026-07-11T16:19:02.695644+00:00",
"last_used_at": "2026-07-12T02:43:31.606181+00:00",
"last_viewed_at": "2026-07-12T02:43:31.602039+00:00",
"patch_count": 72,
"last_patched_at": "2026-07-13T05:22:57.279017+00:00",
"last_used_at": "2026-07-13T05:23:56.887280+00:00",
"last_viewed_at": "2026-07-13T05:23:56.884019+00:00",
"patch_count": 77,
"pinned": false,
"state": "active",
"use_count": 99,
"view_count": 96
"use_count": 104,
"view_count": 101
},
"himalaya": {
"archived_at": null,
@ -1044,13 +1044,13 @@
"created_at": "2026-05-07T16:49:22.137300+00:00",
"created_by": "agent",
"last_patched_at": "2026-07-05T05:56:51.707686+00:00",
"last_used_at": "2026-07-08T17:12:53.869239+00:00",
"last_viewed_at": "2026-07-08T17:12:53.860564+00:00",
"last_used_at": "2026-07-13T04:28:35.737113+00:00",
"last_viewed_at": "2026-07-13T04:28:35.733632+00:00",
"patch_count": 33,
"pinned": false,
"state": "active",
"use_count": 30,
"view_count": 30
"use_count": 31,
"view_count": 31
},
"manim-video": {
"archived_at": null,
@ -1104,6 +1104,19 @@
"use_count": 22,
"view_count": 22
},
"memory-system-landscape": {
"archived_at": null,
"created_at": "2026-07-13T05:22:08.504827+00:00",
"created_by": "agent",
"last_patched_at": "2026-07-13T05:22:41.049472+00:00",
"last_used_at": null,
"last_viewed_at": null,
"patch_count": 1,
"pinned": false,
"state": "active",
"use_count": 0,
"view_count": 0
},
"memoryfabric": {
"archived_at": null,
"created_at": "2026-05-24T08:06:50.481840+00:00",
@ -1278,13 +1291,13 @@
"created_at": "2026-07-12T11:36:03.535167+00:00",
"created_by": "agent",
"last_patched_at": "2026-07-12T12:47:31.969471+00:00",
"last_used_at": "2026-07-12T12:46:51.205165+00:00",
"last_viewed_at": "2026-07-12T12:46:51.201887+00:00",
"last_used_at": "2026-07-13T11:47:37.997844+00:00",
"last_viewed_at": "2026-07-13T11:47:37.994497+00:00",
"patch_count": 2,
"pinned": false,
"state": "active",
"use_count": 2,
"view_count": 2
"use_count": 3,
"view_count": 3
},
"opencode": {
"archived_at": null,
@ -1395,13 +1408,13 @@
"created_at": "2026-07-12T02:34:39.968795+00:00",
"created_by": null,
"last_patched_at": null,
"last_used_at": "2026-07-12T02:34:39.973216+00:00",
"last_viewed_at": "2026-07-12T02:34:39.968809+00:00",
"last_used_at": "2026-07-13T05:20:42.165288+00:00",
"last_viewed_at": "2026-07-13T05:20:42.162299+00:00",
"patch_count": 0,
"pinned": false,
"state": "active",
"use_count": 1,
"view_count": 1
"use_count": 2,
"view_count": 2
},
"product-research-pipeline": {
"archived_at": null,
@ -1524,14 +1537,14 @@
"archived_at": null,
"created_at": "2026-07-08T18:13:02.034240+00:00",
"created_by": "agent",
"last_patched_at": "2026-07-12T02:37:28.417440+00:00",
"last_used_at": "2026-07-12T14:40:23.263646+00:00",
"last_viewed_at": "2026-07-12T14:40:23.259954+00:00",
"patch_count": 42,
"last_patched_at": "2026-07-13T10:18:10.182130+00:00",
"last_used_at": "2026-07-13T11:47:22.014718+00:00",
"last_viewed_at": "2026-07-13T11:47:22.011367+00:00",
"patch_count": 68,
"pinned": false,
"state": "active",
"use_count": 36,
"view_count": 36
"use_count": 53,
"view_count": 53
},
"self-hosted-tunneling": {
"archived_at": null,
@ -1654,14 +1667,14 @@
"archived_at": null,
"created_at": "2026-07-09T17:36:29.269531+00:00",
"created_by": "agent",
"last_patched_at": "2026-07-10T09:10:08.789048+00:00",
"last_used_at": "2026-07-10T09:08:49.841108+00:00",
"last_viewed_at": "2026-07-10T09:08:49.838062+00:00",
"patch_count": 8,
"last_patched_at": "2026-07-13T05:49:04.983314+00:00",
"last_used_at": "2026-07-13T05:48:09.762808+00:00",
"last_viewed_at": "2026-07-13T05:48:09.758868+00:00",
"patch_count": 17,
"pinned": false,
"state": "active",
"use_count": 9,
"view_count": 9
"use_count": 14,
"view_count": 14
},
"spike": {
"archived_at": null,
@ -1680,14 +1693,14 @@
"archived_at": null,
"created_at": "2026-07-11T17:51:28.790816+00:00",
"created_by": "agent",
"last_patched_at": "2026-07-12T17:54:33.843857+00:00",
"last_used_at": "2026-07-12T17:49:48.915126+00:00",
"last_viewed_at": "2026-07-12T17:49:48.911755+00:00",
"patch_count": 40,
"last_patched_at": "2026-07-13T10:41:28.384002+00:00",
"last_used_at": "2026-07-13T11:48:08.771014+00:00",
"last_viewed_at": "2026-07-13T11:48:08.766536+00:00",
"patch_count": 42,
"pinned": false,
"state": "active",
"use_count": 26,
"view_count": 26
"use_count": 28,
"view_count": 28
},
"subagent-driven-development": {
"archived_at": null,
@ -1927,14 +1940,14 @@
"archived_at": null,
"created_at": "2026-05-29T19:39:03.373231+00:00",
"created_by": null,
"last_patched_at": "2026-07-12T17:54:19.303892+00:00",
"last_used_at": "2026-07-12T17:50:59.734487+00:00",
"last_viewed_at": "2026-07-12T17:50:59.730843+00:00",
"patch_count": 682,
"last_patched_at": "2026-07-13T05:43:58.134033+00:00",
"last_used_at": "2026-07-13T05:42:57.611984+00:00",
"last_viewed_at": "2026-07-13T05:42:57.599793+00:00",
"patch_count": 707,
"pinned": false,
"state": "active",
"use_count": 354,
"view_count": 328
"use_count": 368,
"view_count": 342
},
"zhiyi-dev": {
"archived_at": null,

View File

@ -1,8 +1,8 @@
---
name: hermes-self-improvement
description: "当完成复杂任务、发现新工作流、或被用户纠正时将模式保存为skill。含技能创建规范、质量标尺、curator流程。"
version: 4.2.0
date: 2026-07-12
version: 4.3.0
date: 2026-07-13
tags: [workflow, skill-management, curator, quality]
牧尘_usage_notes: >
复杂任务完成/发现新工作流/被牧尘纠正时 → 创建/更新 skill。
@ -160,6 +160,32 @@ opencode 代码审查报告依赖 subagent 自行分析源码。交叉验证原
git clone http://192.168.123.11:3000/xiaoxue_admin/memoryweave.git /tmp/memoryweave
```
### 并发克隆多个仓库的正确方式
终端不支持 `&` 后台化 + `wait`,正确的并发克隆是**多窗口并行 terminal 调用**
```bash
# 正确:每个 terminal() 调用独立,互相并发(不是同一个 shell 里的 &
terminal(command="git clone http://SERVER/repo1.git repo1 2>&1")
terminal(command="git clone http://SERVER/repo2.git repo2 2>&1") # 并行
terminal(command="git clone http://SERVER/repo3.git repo3 2>&1") # 并行
# 失败 → 换 SSH 格式重试git@SERVER:path/repo.git
# SSH 也失败 → 记录,跳过,继续其他仓库
```
**教训**Foretold 用 HTTP 克隆失败,换 SSH 格式也失败(需要认证),记录为 ❌ 并跳过,不要反复重试。
### 竞品调研流程2026-07-13 新增)
多仓库调研的标准流程见 `memory-system-landscape` skill关键点
1. 并发克隆(每批 3-4 个仓库)
2. 并发读 README`read_file` 批量)
3. 读核心源码结构(找主入口:`lib.rs`/`src/`/`server/` 等)
4. 输出对比分析表(按维度分列)
5. 归纳设计模式5 个以内)
6. 原始 notes 存入 references/
### subagent 结果必须验证
subagent 的 self-report 不等于真实结果。验证流程:
@ -310,6 +336,24 @@ python3 ~/.hermes/scripts/cangjie_distill.py distill <text_file> <title>
**结论**MA20日突破策略最优减少亏损+跑赢大盘。在个股下跌时,策略价值在于减少损失而非盈利。
**下一步**:扩大测试范围(多只股票/ETF+ 每日自动推送
### 教训5画像元数据 → 可执行 system prompt snippets2026-07-13
让模型"更聪明"的最快路径:不改模型,只改上下文注入方式。
**旧模式**profile 存 `{"communication_style": "简洁直接"}` → 模型需要自己"理解"并应用 → 效果差
**新模式**`user-profile.json` v2 的 `behavior_rules`8条可执行行为规范`daemon.py``save_llm_context()` 拼接为 `【规则类型】规则内容` 格式 → 写入 `llm_context.json``system_prompt_snippets` 数组 → 织忆 prefetch 注入每轮对话 → 模型直接遵守
**链路**`user-profile.json (behavior_rules)` → `save_llm_context()``llm_context.json (system_prompt_snippets)``prefetch()` → 每轮对话
**规则格式要求**
- 是可执行的句子,不是元数据描述
- 带前缀标签(`【回答格式】` / `【代码质量】` 等)帮助模型分类
- 每条 20-50 字,简洁
**验证**`python3 -c "import json; print(len(json.load(open('~/.hermes/llm_context.json')).get('system_prompt_snippets',[])))"` → 应输出 8
**daemon.py 修改铁律**:改 `save_lll_context` 用 patch不可用 write_file会覆盖全文
### 教训2牧尘的「不用问我」= 自主执行到边界
- 「全部开始」= 直接执行,不等确认,不中间暂停

View File

@ -0,0 +1,117 @@
# 三系统记忆全面检查工作流2026-07-13
## 触发条件
- 用户说「对记忆系统代码进行检测」「全面检查三个记忆系统」
- 或 daemon/skill 发现了异常(牵挂过期、数据不一致)
## 三套系统定位(快速参考)
```
牧尘的完整记忆体系:
├── 语义记忆层织忆ZhiYi→ 快速语义召回7146节点图谱
├── 人格蒸馏层TencentDB → L0原始→L1场景→L2块→L3人格自动提炼
└── 关系感知层Soulful → 心迹/牵挂/画像,主动关怀
```
## 检查步骤
### Step 1并发拉状态三方交叉验禁止单信号下结论
```bash
# 织忆进程/端口/端点
ps aux | grep -E 'zhiyid|zhiyi-consolidate' | grep -v grep
ss -tlnp | grep -E '7821|8000'
curl -s -m 3 -H "X-API-Key: zhiyi-dev-key-2026" http://localhost:7821/api/v1/health
curl -s -m 3 -H "X-API-Key: zhiyi-dev-key-2026" http://localhost:7821/api/v1/stats
curl -s -m 3 -H "X-API-Key: zhiyi-dev-key-2026" http://localhost:7821/api/v1/graph/stats
# TencentDB Gateway
ps aux | grep tdai | grep -v grep
curl -s -m 3 http://localhost:8420/health
# Soulful 文件
cat ~/.hermes/soulful/user-profile.json | python3 -c "import json,sys; p=json.load(sys.stdin); print(f'有效字段: {[k for k,v in p.items() if v]}'); print(f'updated: {p.get(\"updated_at\")}')"
wc -l ~/.hermes/soulful/heart-traces.jsonl
python3 -c "import json; d=json.load(open('~/.hermes/soulful/cares-queue.json')); [print(f' [{c[\"status\"]:8}] {c.get(\"follow_up_date\",\"无due\")} | {c[\"content\"][:50]}') for c in d['cares']]"
```
### Step 2功能验证抽样
```bash
# 织忆 recall
curl -s -X POST -H "X-API-Key: zhiyi-dev-key-2026" \
-d '{"query":"牧尘","top_k":1}' http://localhost:7821/api/v1/recall | python3 -c \
"import json,sys;d=json.load(sys.stdin);print(f'织忆 count={d.get(\"count\")}')"
# TencentDB L1
curl -s -H "Content-Type: application/json" \
-d '{"query":"牧尘","top_k":1}' http://localhost:8420/search/memories | python3 -c \
"import json,sys;d=json.load(sys.stdin);print(f'TD L1 total={d.get(\"total\")}')"
# memory_recall.py 端到端
python3 ~/.hermes/scripts/memory_recall.py "牧尘" --format compact
```
### Step 3Soulful 数据脏检查
需要检查的问题:
- [ ] `done` 状态项残留(应该删除或归档)
- [ ] 已过期 `follow_up_date` 的 pending 项(应删除)
- [ ] 完全重复的 `content`(去重)
- [ ] 心迹是否只有系统事件(应该有牧尘相关的心迹)
清理脚本:
```python
d = json.load(open('~/.hermes/soulful/cares-queue.json'))
# 1. 删除 done
d['cares'] = [c for c in d['cares'] if c.get('status') != 'done']
# 2. 删除过期(可选,按业务决定)
# 3. 去重
seen = set(); unique = []
for c in d['cares']:
if c['content'] not in seen:
seen.add(c['content']); unique.append(c)
d['cares'] = unique
json.dump(d, open('cares-queue.json','w'), ensure_ascii=False, indent=2)
```
## 问题严重度分类
| 严重度 | 问题类型 | 处理方式 |
|--------|---------|---------|
| 高 | cares有过期/重复/done残留 | 立即清理 |
| 高 | memory_recall.py 有 bug | 立即修 |
| 中 | 画像字段全空 | 持续积累 |
| 中 | TencentDB L1/L0 数据量少 | 积累中,不急 |
| 中 | 心迹无人类内容 | daemon/journal机制补 |
| 低 | 已完成项未归档 | 定期清理 |
## memory_recall.py 已知 bug 清单2026-07-13
| # | 问题 | 修复 | 状态 |
|---|------|------|------|
| 1 | `item.get("due")` → null | `get("follow_up_date") or get("due")` | ✅ 已修 |
| 2 | `import re` 在函数内 | 移到文件顶部 | ✅ 已修 |
| 3 | `_str()` 未使用 | 删除 | ✅ 已修 |
| 4 | ZhiYi results 无 category/timestamp | 新增字段展示 | ✅ 已修 |
| 5 | pretty error 分支多余 `\n` | 删除 | ✅ 已修 |
| 6 | TencentDB results 是 markdown 字符串非 JSON 数组 | `isinstance(results, str)` 判断 | ✅ 已修 |
| 7 | compact L1/L0 解析逻辑 | 提取内容行 | ✅ 已修 |
## 三系统 health 指标速查
| 系统 | 端口 | 健康检查命令 | 健康标志 |
|------|------|-----------|---------|
| ZhiYi | 7821 | `curl localhost:7821/api/v1/health` | `status: ok` |
| bge-embed | 8000 | `curl localhost:8000/health` | exit 0 |
| TD Gateway | 8420 | `curl localhost:8420/health` | `status: ok` |
| Soulful | 文件 | 读 JSON 文件 | 无异常 |
## 今日2026-07-13检查结果
| 系统 | 状态 | 记录数 |
|------|------|--------|
| 织忆 | ✅ 健康 | 4197 memories / 141 episodes / 7146节点 |
| TencentDB | ✅ 健康 | L1=1条 / L0=4条积累中|
| Soulful | ⚠️ 有脏数据已清理 | 画像稀疏 / 心迹仅系统事件 |

View File

@ -1,8 +1,8 @@
---
name: self-healing-infrastructure
description: "自愈基础设施 — 系统监控、配置版本控制、自动回滚、自进化管线、技能管理、自我优化、学习闭环。完整自治体系。牧尘专用。"
version: 1.7.0
date: 2026-07-12
version: 1.8.0
date: 2026-07-13
author: 小唯 A06
tags: [self-healing, monitoring, auto-rollback, evolution, watchdog, config-protection, daemon, backup, recovery]
category: devops
@ -20,11 +20,28 @@ trigger_notes: >
## 核心子系统(全部已部署)
- `daemon.py` — 持久意识每30s轻量tick每5min深度思考。方案库预置4个运行时自学习新方案。
- **2026-07-13 新增**deep tick 自动 capture 到 TencentDB:8420+ 每 tick 同步 `tddb.latest_persona``llm_context.json`
- `health-watchdog.sh` — 每30min检查磁盘/内存/GPU/进程,超阈值自愈+飞书通知。
- **2026-07-13 全部5阶段落地**时间衰减recall / 遗忘曲线分层 / 画像LLM合成 / 冲突检测 / Consolidation引擎见 references/five-phase-implementation-20260713.md
- **2026-07-13 新增监控目标**`tdai-gateway`:8420人格记忆层失败自愈命令 `systemctl --user restart tdai-gateway`
- **统一记忆入口**`~/.hermes/scripts/memory_recall.py` — 同时查织忆(7821) + TencentDB(8420) + Soulful(JSON),支持 pretty/compact 两种输出格式
- 调试笔记:`references/tdai-gateway-debug-20260713.md`token/配置结构/模型/端口修复路径)
- daemon.py 修改铁律:`references/daemon-modification-rules.md`(禁止 write_file 覆盖、正确 patch 流程、事故记录)
- 三系统记忆全面检查工作流:`references/three-system-memory-check-workflow.md`
- 记忆系统对比分析(参考项目):`references/memory-system-comparison.md`
- 画像可执行化注入模式2026-07-13 新发现):`references/system-prompt-snippets-injection.md` — behavior_rules → system_prompt_snippets → prefetch 注入
- **bge_embed_server 内存泄漏2026-07-13 根因+修复)**
- 根因ONNX SessionOptions 默认开启 `enable_cpu_mem_arena`arena 分配器会逐渐扩大保留区4天从1.6GB→5.8GBRSS 计入保留虚拟内存,非真实泄漏)
- 修复:`enable_cpu_mem_arena=False` + `enable_mem_pattern=False`bge_embed_server.py 第34-35行
- 监控cron `2891b3304339`「bge内存泄漏监控」每10分钟检查>2GB自动kill+重启
- 脚本:`~/.hermes/scripts/bge_mem_check.sh`
- 禁用 arena 后 RSS=真实工作集1.5-1.6GB),之前的 5.8GB 是保留区+碎片
- **Gitea push 超时误判**push 报 timeout/exit:124 时进程可能已在后台完成,用 `git fetch origin && git log origin/main` 验证远程 HEAD 是否已更新(本地 vs remote `git rev-parse --short HEAD`),避免误认失败而重复 force push 被 Gitea 拒绝("incorrect old value"
- 当前远程=local 时 `git push -f` 会报 `incorrect old value`,此时 `git fetch` 后重新 push 即可
- **bge_embed_server 内存占用认知**:禁用 arena 后 RSS=真实工作集1.5-1.6GB),之前的 5.8GB 是 arena 保留区+碎片,非真实泄漏
- `self-evolve.py` — 每天凌晨3点自进化磁盘清理、模型测试扩展snapshot→execute→verify→rollback
- `memory-system-check.sh`**每小时自检**:织忆(进程+7821API+stats) / Soulful(文件+cares过期>7天+心迹条数) / TencentDB(进程+8420健康)异常飞书报警正常静默。cron `7292c83a3720`
- `memory-system-self-upgrade.py`**每日4点自升**织忆tombstone增长检测+recall_hit健康度Soulful清理30天前cares+心迹去重+画像空字段标记TencentDB总记忆量报告。异常飞书。cron `691709a8b4cf`
- `learner.py` — 每天凌晨5点自学习事实/技能/元学习三层闭环。
- `optimizer.py` — 每周日10点输出优化报告。
- `proactive_learning.py` — 主动学习引擎,四维自检+主题管理,每周推送报告。

View File

@ -0,0 +1,17 @@
#!/bin/bash
# bge_embed_server 内存泄漏监控脚本
# 超过 2GB 自动重启
# cron job: 2891b3304339 (every 10m, no_agent)
PID=$(pgrep -f "bge_embed_server" | head -1)
if [ -n "$PID" ]; then
RSS=$(ps -o rss= -p "$PID" 2>/dev/null || echo 0)
MB=$((RSS / 1024))
if [ "$MB" -gt 2048 ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] bge_embed 内存 ${MB}MB > 2GB重启" >> ~/.hermes/daemon/bge-restart.log
kill "$PID"
sleep 2
cd ~/.hermes && python3 scripts/bge_embed_server.py &
echo "[$(date '+%Y-%m-%d %H:%M:%S')] bge_embed 已重启新PID=$(pgrep -f bge_embed_server | head -1)" >> ~/.hermes/daemon/bge-restart.log
fi
fi

View File

@ -0,0 +1,59 @@
# bge_embed_server 内存泄漏分析 — 2026-07-13
## 问题现象
2026-07-13 发现 bge_embed_server.py 进程 RSS=5.8GB36%内存4天前正常~1.6GBswap 接近打满1.9/1.9GB)。
## 根因
**不是真正的内存泄漏**,是 ONNX Runtime 的 arena 分配器特性:
```
ONNX SessionOptions 默认:
enable_cpu_mem_arena = True ← 开启 arena 分配器(预保留虚拟内存)
enable_mem_pattern = True ← 开启内存模式优化
```
Arena 分配器会预保留一块虚拟内存区域随使用逐渐扩大。RSSResident Set Size会把 reserved 算进去,看起来像泄漏。实际工作集只有 ~1.5GB。
## 修复
```python
# bge_embed_server.py 第31-35行
sess_options = ort.SessionOptions()
sess_options.intra_op_num_threads = 4
sess_options.inter_op_num_threads = 2
sess_options.enable_cpu_mem_arena = False # 禁用 arena 分配器
sess_options.enable_mem_pattern = False # 禁用内存模式优化
session = ort.InferenceSession(os.path.join(MODEL_PATH, "model.onnx"), sess_options=sess_options, providers=["CPUExecutionProvider"])
```
修复后 RSS=真实工作集1.5-1.6GB),不再无限增长。
## 操作记录
| 时间 | 操作 |
|------|------|
| 17:01 | kill PID 13445.8GB旧进程)|
| 17:01 | 启动新进程(已带修复) |
| 17:05 | 验证 RSS=1.6GB,织忆召回正常 |
## 监控机制
- cron `2891b3304339`「bge内存泄漏监控」— 每10分钟检查 >2GB 自动 kill+重启
- 脚本:`~/.hermes/scripts/bge_mem_check.sh`
- 日志:`~/.hermes/daemon/bge-restart.log`
## 验证命令
```bash
PID=$(pgrep -f bge_embed_server | head -1)
ps -o rss= -p "$PID" | awk '{printf "RSS: %.0f MB\n", $1/1024}'
curl -s http://127.0.0.1:7821/health
```
## 教训
1. **RSS 不是真实内存占用**:禁 arena 前 5.8GB 里有 3-4GB 是 arena 保留区
2. **进程重启是最快止血**:不用定位泄漏点,直接 kill+restart
3. **预防 > 治疗**:加了 cron 10分钟监控>2GB 自动重启

View File

@ -0,0 +1,71 @@
# daemon.py 修改铁律2026-07-13 踩坑记录)
## 绝对禁止
**禁止用 `write_file` 直接覆盖 `daemon.py`**,会清空整个文件。
`write_file` 是全量覆盖操作,调用后会丢失所有内容(只有被 git 追踪的文件可以 `git checkout HEAD --` 恢复)。
## 正确修改顺序
### 方案 Apatch + old_string 精确定位(推荐)
```python
# patch 的 old_string 必须足够唯一,包含周围上下文
patch(mode='replace', new_string=new_code, old_string=unique_context_block)
```
### 方案 B终端字符串替换当 patch 精确匹配失效时)
```bash
python3 << 'PYEOF'
content = open('/home/muc/.hermes/scripts/daemon.py').read()
# 替换目标:完整的函数/代码块(包含足够多上下文)
old = '''多行精确的
old code block'''
new = '''多行新的
code block'''
if old in content:
content = content.replace(old, new, 1)
open('/home/muc/.hermes/scripts/daemon.py', 'w').write(content)
print("Fixed!")
else:
print("Not found, showing context:")
idx = content.find('keyword_near_target')
print(repr(content[idx:idx+400]))
import py_compile
py_compile.compile('/home/muc/.hermes/scripts/daemon.py', doraise=True)
print("Syntax OK")
PYEOF
```
## 验证流程
每次修改后必须验证:
```bash
python3 -m py_compile ~/.hermes/scripts/daemon.py && echo "Syntax OK"
```
语法 OK 后再重启 daemon
```bash
kill $(ps aux | grep daemon.py | grep -v grep | awk '{print $2}') && sleep 2
python3 ~/.hermes/scripts/daemon.py > ~/.hermes/daemon/daemon.log 2>&1 &
sleep 6 && ps aux | grep daemon.py | grep -v grep
```
## daemon.py 中 ctx 参数作用域注意
daemon.py 的 `ctx``main_loop` 中的局部字典,传递给各个函数时:
- 在函数定义中显式接收 `ctx` 参数(不要假设 ctx 在函数内可用)
- `tddb_capture(reflection_dict, state, ctx)` ← 需要显式传入
## 今天的事故记录
- `write_file` 写入 daemon.py → 文件只剩 2 行(其余 905 行丢失)
- 用 `git checkout HEAD -- scripts/daemon.py` 恢复
- 之后改用终端字符串替换法4处替换全部成功

View File

@ -0,0 +1,75 @@
# Gitea push 超时 / rejected 问题处理 — 2026-07-13
## 常见场景
### 场景1push 超时但实际已成功(误判)
```
timeout 30 git push -f origin main
# exit:124 (timeout) — 看似失败
# 但远程可能已经更新
```
**判断方法**
```bash
cd ~/.hermes
git fetch origin main
git log --oneline origin/main -2 # 远程最新
git log --oneline HEAD -2 # 本地最新
# 如果 remote == local已推送成功
```
### 场景2force push 被 Gitea 拒绝
```
! [remote rejected] main -> main (incorrect old value provided)
error: failed to push some refs
```
**原因**:本地 HEAD 和远程 origin/main 的 old object 不匹配(别人先推送了)
**处理**
```bash
git fetch origin main
git log --oneline origin/main # 确认远程 HEAD
git log --oneline HEAD # 确认本地 HEAD
# 如果 remote HEAD == 本地 HEAD无需再 push
# 如果不同,用 git push -f 强制覆盖
```
### 场景3exit:124 但 remote 已更新(再 push 报 "nothing to commit"
```
# 第一次 push 超时退出码124但实际成功了
# 第二次 push 被拒 "incorrect old value"
```
**根本原因**`git push -f` 需要先知道远程 ref 的当前 SHA再推送本地替换。如果第一次 push 在验证 SHA 时就超时了Gitea 的 lock 还持有中,此时第二次 push 会失败。
**正确流程**
```bash
# 1. 先 fetch 验证远程状态
git fetch origin main
# 2. 比较
if [ "$(git rev-parse HEAD)" = "$(git rev-parse origin/main)" ]; then
echo "已推送,无需重复操作"
else
timeout 90 git push -f origin main
fi
```
## 预防措施
1. **大文件推送前先验证连接**`git ls-remote origin main`(轻量)
2. **避免和 mc 仓库同时 force push**(两个仓库共用 Gitea remote 时有竞争)
3. **push 前先 fetch** 避免 "incorrect old value"
## 历史记录
| 时间 | commit | 情况 |
|------|--------|------|
| 2026-07-13 17:52 | f950253 fix(bge) | exit:124误判实际已成功 |
| 2026-07-13 16:50 | fb709f0 feat(记忆系统) | exit:124误判实际已成功 |
| 2026-07-13 16:46 | c4938eb docs | 正常推送 |
| 2026-07-13 16:41 | c4938eb (mc仓) | force push 覆盖 |

View File

@ -0,0 +1,235 @@
# 记忆系统对比分析 — 参考项目 vs 织忆/Soulful/TencentDB
> 2026-07-13 分析 | 克隆仓库yantrikdb, yantrikdb-server, agent-memory-skill, codegraph, honcho, memos, multica, agent-second-brain, Foretold
## 结论速查
| 功能 | 来源 | 我们差距 | 实施优先级 |
|------|------|---------|-----------|
| Ebbinghaus遗忘曲线tier分层 | agent-memory-skill | 织忆/Soulful/TencentDB无限增长无优先级 | P0 本周 |
| 冲突检测+对话式消解 | YantrikDB | 三系统各自独立,可能互相矛盾(诚信问题) | P1 下周 |
| 多信号评分检索 | YantrikDB | recall只用语义相似度时间衰减+重要性+检索反馈学习 | P1 下周 |
| `think()` Consolidation | YantrikDB/MemOS | daemon deep_tick只有journal_entry没有模式挖掘/冲突扫描/触发器 | P2 本月 |
| Proactive Triggers | YantrikDB | 牵挂是简单cron检查没有基于记忆模式的主动触发 | P1 下周 |
| 双层上下文注入+辩证推理 | Honcho | 我们是单层Honcho有基础层+辩证层 | P2 本月 |
| 画像LLM合成更新 | Honcho | 画像靠手动维护没有dialectic层自动分析行为日志更新 | P1 下周 |
| 会话感知 | YantrikDB | 无会话边界和会话级总结 | P2 本月 |
| 自进化(feedback-driven) | MemOS | Soulful心迹/画像/牵挂靠手动没有feedback驱动自动进化 | P2 本月 |
---
## 一、参考项目核心能力
### YantrikDB最强借鉴价值
**核心架构**Rust嵌入式引擎HNSW向量+LSM双层写入foreground写deltabackground合并到cold tier
**记忆模型**
- 重要性(imporance 0-1)+情感极性(valence)+领域(domain)+来源+确定性+timestamps
- 多信号评分函数:语义相似度 + 时间衰减 + 重要性加权 + 图关系提升 + **检索反馈学习**
**独特功能**
1. `think()` — Consolidation合并相似记忆+ 冲突扫描 + 模式挖掘 + 触发器评估
2. **冲突检测+对话式消解**记忆矛盾时创建冲突段AI自然地问用户消解
3. **Proactive Triggers**:记忆冲突/到期/模式检测 → 自动通知(不是等用户问)
4. **会话感知**`session_start()`/`session_end()`,自动关联会话内记忆,计算总结
5. **CRDT多设备同步**append-only replication log冲突自由合并
**API核心**
```
record() / recall() / relate() — 核心记忆
think() — Consolidation引擎
scan_conflicts() / resolve_conflict() — 冲突管理
get_pending_triggers() / act_on_trigger() — 主动触发
session_start() / session_end() — 会话边界
```
**与我们对比**
- daemon自愈机制方案库是YantrikDB没有的独特能力
- 织忆的语义检索=只有YantrikDB的"语义相似度"维度
- 冲突检测、会话感知、Proactive Triggers 全部缺失
---
### MemOS星尘
**三层架构**
- L1 Trace事件轨迹
- L2 Policy策略模式
- L3 World Model世界模型
- crystallized Skills反馈驱动的技能结晶
**独特功能**
1. Feedback-driven self-evolution反馈驱动的自进化
2. Multi-Cube knowledge base多知识库隔离+共享)
3. 多模态记忆text/image/tool traces/persona
4. Redis Streams调度高并发异步操作
**与我们对比**
- TencentDB的L0-L3架构 ≈ MemOS的L1-L3但MemOS有crystallized Skills反馈→自动生成skill我们没有
---
### Honcho辩证推理层
**核心设计**:双层上下文注入
- 基础层contextCadence刷新会话摘要 + peer card + 表示
- 辩证层dialecticCadence刷新LLM推理按dialecticDepth进行多轮对话冷启动/热启动/自我审计/调和)
**工具**
```
honcho_profile — 读写peer card
honcho_search — 语义搜索
honcho_context — 会话上下文
honcho_reasoning — LLM合成推理
honcho_conclude — 创建/删除结论(= Soulful心迹的LLM自动版
```
**与我们对比**
- Soulful心迹靠手动写入Honcho的conclude是自动LLM合成
- 织忆prefetch=单层Honcho=双层(基础+辩证)
---
### agent-memory-skill遗忘曲线
**核心**Ebbinghaus遗忘曲线线性衰减
```
relevance = max(0.1, 1.0 - days × 0.015)
```
**Tier分层**
| Tier | 天数 | Relevance |
|------|------|-----------|
| core | 手动 | 1.0(永不降级) |
| active | 0-7 | 1.0-0.90 |
| warm | 8-21 | 0.89-0.69 |
| cold | 22-60 | 0.68-0.10 |
| archive | 60+ | 0.10(地板) |
**graduated touch**不是一次回归active而是一级一级升
**与我们对比**
- 织忆4197条记忆没有tier/优先级,所有记忆权重相同
- Soulful cares没有基于重要性的差异化提醒
---
### Hindsight知识图谱+反射)
**核心能力**
- `hindsight_retain`:带实体提取的存储
- `hindsight_recall`:多策略检索
- **`hindsight_reflect`(跨记忆合成)**:其他提供者都没有的能力
**与我们对比**
-织忆有图谱但reflect跨记忆合成=把多条记忆综合成新结论)没有
---
### agent-second-brainTelegram入口
**设计**:语音/文字/图片 → Telegram Bot → 自动分类task/idea/note+ Obsidian存档 + Todoist任务 + 日报告
**与我们无关**:入口模式不适用(我们有飞书),但"对话式记忆管理"思路可参考
---
## 二、最值得借鉴的5个功能按优先级
### P0 本周:织忆时间衰减评分
YantrikDB最简单的设计recent=更重要。
daemon已有`last_access`字段,只需:
1. recall时对近期记忆加权比如7天内+20%分数)
2. tier分层active/warm/cold/archive按访问时间+重要性
3. 验证看prefetch结果是否改善
**预期收益**减少噪音提升prefetch质量
### P1 下周:冲突检测
三个系统各自独立可能矛盾织忆说周一Soulful说周二→ 诚信问题。
方案基于YantrikDB
1. 每次写新记忆前扫描相似记忆top_k=5
2. 发现矛盾(同一实体不同结论)→ 写入冲突队列
3. 每小时cron检查冲突队列 → 有则飞书提醒牧尘
4. 牧尘确认后,删除矛盾记忆
**预期收益**:彻底解决记忆矛盾导致的信任损伤
### P1 下周画像LLM合成更新
Honcho dialectic层每次deep tick用LLM分析行为日志更新peer card。
我们有journal_entry数据可以
1. deep tick执行后把journal_entry传入LLM
2. LLM分析"牧尘最近做了什么决定/有什么行为模式变化"
3. 自动更新user-profile.json的behavior_rules
**预期收益**:画像不再靠手动维护,实时跟随牧尘行为更新
### P1 下周Proactive触发器
YantrikDB的主动触发不是等用户问而是检测到有意义信号就通知。
对我们:
- 冲突检测触发(见上)
- cares即将到期触发已实现但可增强
- 记忆模式变化触发(织忆新增高频关键词=新关注点→通知牧尘)
- daemon方案库匹配失败3次=系统性问题→通知牧尘
### P2 本月Consolidation引擎
类似YantrikDB的`think()`
```python
def think():
# 1. Consolidation合并相似记忆
merge_similar_memories()
# 2. 冲突扫描
scan_conflicts()
# 3. 模式挖掘(跨领域)
mine_cross_domain_patterns()
# 4. 触发器评估
evaluate_triggers()
```
MemOS的三层架构L1 Trace/L2 Policy/L3 World Model也值得参考TencentDB的L0-L3可以进一步向MemOS靠拢。
---
## 三、参考项目架构速查
```
YantrikDB — 多信号评分(HNSW+时间+重要性+图+反馈) + 冲突检测 + Triggers + 会话感知 + CRDT同步
MemOS — L1/L2/L3三层 + crystallized Skills + Feedback-driven进化 + Redis Streams
Honcho — 双层上下文(基础+辩证) + dialectic推理 + conclusions合成 + peer_card建模
agent-memory — Ebbinghaus遗忘曲线 + tier分层 + graduated touch
Hindsight — 知识图谱 + 实体提取 + hindsight_reflect跨记忆合成
```
---
## 四、克隆仓库路径
```
/tmp/research/
├── yantrikdb/ — CRDT多信号评分 + 冲突检测 + think()
├── yantrikdb-server/ — Raft共识 + 集群复制
├── agent-memory-skill/ — Ebbinghaus遗忘曲线 + tier分层
├── codegraph/ — 代码语义索引(~35% token节省
├── honcho/ — 辩证推理层 + conclusions
├── memos/ — L1/L2/L3三层 + crystallized Skills
├── multica/ — 多Agent协作
└── agent-second-brain/ — Telegram语音入口参考思路
```
本地路径通过Gitea
```
http://192.168.123.11:3000/xiaoxue_admin/yantrikdb
http://192.168.123.11:3000/xiaoxue_admin/memos
http://192.168.123.11:3000/xiaoxue_admin/honcho
http://192.168.123.11:3000/xiaoxue_admin/agent-memory-skill
```

View File

@ -0,0 +1,124 @@
# system_prompt_snippets 注入模式
> 版本 1.0 | 2026-07-13
> 场景:让模型"更聪明"的最快路径——不改模型,只改上下文注入方式
## 核心发现
牧尘的对话风格规范("简洁直接"、"结论先行")之前作为元数据存在 `user-profile.json``communication_style` 字段里,模型收到的是:
```json
{"communication_style": "简洁直接", "work_patterns": {}}
```
模型需要自己"理解"这条元数据并应用到输出,实际效果很差。
改后2026-07-13通过 `save_llm_context()``behavior_rules` 转换为字符串数组,直接作为 system prompt 片断注入:
```json
{
"system_prompt_snippets": [
"【回答格式】结论先行 → 数据支撑 → 行动建议。不废话、不科普、不加补丁式回答。",
"【代码质量】修复后必须自测不等用户测。遇到stderr先试3种方法不行再报告障碍。",
...
]
}
```
这些 snippets 通过织忆 prefetch 注入每轮对话,模型直接看到并遵守,**立竿见影**。
## 技术链路
```
user-profile.json (behavior_rules 字段)
↓ daemon.py save_llm_context()
llm_context.json (system_prompt_snippets 字段)
↓ Hermes 织忆插件 prefetch()
每轮对话上下文
```
## 实施步骤
### Step 1: profile.json 升级到 v2
```json
{
"version": 2,
"behavior_rules": {
"answer_format": "结论先行 → 数据支撑 → 行动建议...",
"code_quality": "修复后必须自测...",
"cron_creation": "必须指定 model=minimaxai/minimax-m2.7...",
"accounting_context": "牧尘做物业会计用金蝶K3...",
"decision_style": "牧尘一句话定方向...",
"memory_handling": "回答前先列'我知道什么'+'我不确定什么'...",
"error_reporting": "成功报成功,失败报失败并说明原因...",
"file_operations": "用 patch 不用 write_file防覆盖..."
}
}
```
### Step 2: save_llm_context 改造
```python
behavior_rules = profile.get("behavior_rules", {})
snippet_prefixes = {
"answer_format": "【回答格式】",
"code_quality": "【代码质量】",
"cron_creation": "【cron创建】",
"accounting_context":"【会计场景】",
"decision_style": "【决策风格】",
"memory_handling": "【记忆规范】",
"error_reporting": "【错误报告】",
"file_operations": "【文件操作】",
}
snippets = []
for key, prefix in snippet_prefixes.items():
if behavior_rules.get(key):
snippets.append(f"{prefix}{behavior_rules[key]}")
# llm_ctx 写入
llm_ctx["system_prompt_snippets"] = snippets # 替代旧的 profile_summary
```
### Step 3: 验证注入
```bash
# daemon 重启后
python3 -c "import json; d=json.load(open('~/.hermes/llm_context.json')); print(len(d['system_prompt_snippets']), 'snippets')"
# 应输出 8或其他实际条数
```
### Step 4: 检查 prefetch 透传
织忆插件 prefetch 读取 `llm_context.json`snippets 通过 prefetch 文本进入对话上下文。
验证:`curl -s http://127.0.0.1:7821/api/v1/recall?q=牧尘风格` 应包含 snippets 内容。
## 关键原则
1. **rules 要是可执行的句子,不是元数据描述**
- ❌ `"communication_style": "简洁直接"` → 模型不知道具体怎么做
- ✅ `"【回答格式】结论先行,不废话、不科普、不加补丁式回答"` → 模型直接遵守
2. **前缀标签帮助模型分类理解**
- `【回答格式】` / `【代码质量】` / `【cron创建】` 等标签让模型快速定位相关规范
3. **向后兼容**
- 如果 profile 没有 `behavior_rules`fallback 到旧格式,避免报错
4. **daemon.py 修改铁律**
- 改 `save_llm_context` 用 patch精确 old_string禁止 write_file 覆盖(会清空全文)
- 改完必须 `python3 -m py_compile daemon.py` 验证
- 重启 daemon 生效
## 与画像 (Soulful) 的关系
- Soulful 的 `user-profile.json` 存储原始行为规则(人可读)
- `llm_context.json``system_prompt_snippets` 是注入格式(模型可执行)
- `save_llm_context` 是转换层定期同步daemon 每 tick 更新)
## 适用场景
- 需要模型遵守特定输出格式(牧尘案例:结论先行、不科普)
- 需要模型记住任务处理规范代码质量、cron 创建规范等)
- 需要跨 session 保持一致的决策风格
## 不适用场景
- 动态/一次性上下文(用 cron prompt 或 one-shot conversation
- 需要实时精确记忆(用织忆 recall

View File

@ -0,0 +1,81 @@
# TencentDB Daemon 集成技术细节2026-07-13
## API 端点一览
| 端点 | 方法 | 用途 |
|------|------|------|
| `http://127.0.0.1:8420/health` | GET | 健康检查,返回 `{"status":"ok","uptime":...}` |
| `http://127.0.0.1:8420/search/memories` | POST | 语义搜索 L1 人格记忆 |
| `http://127.0.0.1:8420/search/conversations` | POST | 搜索 L0 对话记录 |
| `http://127.0.0.1:8420/capture` | POST | 写入记忆(需要 session_key |
## /search/memories 返回格式(关键坑)
**返回的是 markdown 字符串,不是 JSON 数组**
```
Found 1 L1 memory:
- 用户(牧尘)是一名会计专家;沟通风格简洁直接...
---
Total: 1 memories
```
代码中需要:
```python
if raw and isinstance(raw, str) and "Found" in raw:
lines = [l for l in raw.split("\n") if l.strip() and not l.startswith("Found") and not l.startswith("---")]
content = lines[1].strip().lstrip("-* []").strip() if len(lines) >= 2 else ""
```
## /capture 参数(实际验证)
```python
payload = json.dumps({
"session_key": "daemon-deep-tick",
"user_content": "...系统状态...",
"assistant_content": summary[:1000],
}).encode("utf-8")
```
- 需要 `session_key` + `user_content` + `assistant_content`
- 错误信息提示字段名:`Missing required fields: user_content, assistant_content, session_key`
- 成功返回:`{"l0_recorded": 1, "scheduler_notified": true}`
## Reflection 结构daemon deep tick
```python
r = reflection_dict.get("reflection", {})
summary = r.get("evaluation_previous_goal", "") or r.get("summary", "")
next_goal = r.get("next_goal", "")
```
`evaluation_previous_goal` 包含"执行了[solve_auto] ... Verdict: ..."格式的完整描述。
## llm_context.json 同步机制
`daemon.py` 有两个写入点:
1. `_sync_soulful_to_llm_context(ctx)` → 只写入 `ctx["soulful"]`
2. `save_llm_context(ctx, state)` → 构建独立的 `llm_ctx` dict 再写入
**两处独立**,所以 TencentDB 同步要同时在两处做:
- 在 `_sync_soulful_to_llm_context` 里写 `ctx["tddb"]`
- 在 `save_llm_context` 里显式 `ctx.get("tddb", {})` 加入输出 dict
## 三套记忆系统注入链路(最终状态)
```
织忆 (ZhiYi) → prefetch() 自动注入每轮对话
Soulful → _sync_soulful_to_llm_context() → llm_context.json → zhiyi插件注入
TencentDB → daemon 每 tick 同步 latest_persona → llm_context.json
统一入口 → memory_recall.py (CLI 手动查询)
```
## 当前数据量2026-07-13
| 系统 | 数据量 | 健康状态 |
|------|--------|---------|
| 织忆 | 4197 条记忆141 episodes | ✅ |
| TencentDB L1 | 1 条(积累中)| ⚠️ 刚修好,慢慢积累 |
| TencentDB L0 | 4 条 | ⚠️ 积累中 |
| Soulful cares | 6 条(已清理)| ✅ |
| Soulful 心迹 | 13 条7条有意义| ⚠️ 需持续补充 |

View File

@ -0,0 +1,54 @@
# 三套记忆系统自检/自升机制
> 2026-07-13 建立cron 运行中
## 三路注入链路(现状)
```
织忆 (ZhiYi) → prefetch() → 自动注入每轮对话
Soulful → daemon _sync_soulful_to_llm_context() → llm_context.json → Hermes织忆插件注入
TencentDB → daemon 每 tick 同步 tddb.latest_persona → llm_context.json → Hermes织忆插件注入
统一查询CLI → memory_recall.py支持 pretty/compact
```
## 自检 cron每小时整点
- **cron ID**: `7292c83a3720`
- **脚本**: `memory-system-check.sh`
- **检查内容**:
- 织忆:进程(zhiyid/bge-embed) + 7821 API health + episodes/memories 数据量
- Soulful文件存在 + cares 过期(>7天) + 心迹条数(<5条告警)
- TencentDB进程(tdai) + 8420 API health
- **行为**:异常飞书报警,正常静默
## 自升 cron每日 04:00
- **cron ID**: `691709a8b4cf`
- **脚本**: `memory-system-self-upgrade.py`
- **织忆**tombstone 增长检测(和昨日快照比,增长>50 告警)+ recall_hit <0.6 告警
- **Soulful**:清理 30 天前过期 cares + done 状态 >7 天清除 + 心迹按前 60 字去重 + 画像空字段报告
- **TencentDB**:总记忆量报告(`search /memories` 返回 `total` 字段)
- **行为**:异常飞书,正常静默
## TencentDB API 关键参数
```python
# capturedaemon deep tick 自动调用)
{"session_key": str, "user_content": str, "assistant_content": str} # 必填
# search总记忆量查询
{"query": str, "top_k": int} # 返回 {"results": ..., "total": N}
```
## Soulful 脏数据清理规则
- cares 过期 >30 天:删除
- cares 状态 done 且 due_date >7 天前:删除
- cares 完全相同内容(按前 60 字):保留 1 条
- 心迹相同内容(按前 60 字):去重
## daemon.py 修改安全规则
1. **daemon.py 是 900+ 行大文件**,不能用 write_file会覆盖整个文件
2. **正确做法**Python 字符串替换通过 terminal 执行,或 patch 加 old_string
3. **验证顺序**:语法检查 → kill 旧进程 → 重启 → 确认 PID 变化 → 检查新 log 有正常 tick
4. **遇到语法错误**:立即 `git checkout HEAD -- scripts/daemon.py` 恢复,再重新修改

View File

@ -0,0 +1,171 @@
---
name: memory-system-landscape
description: AI/Agent 记忆系统竞品调研全流程 — 克隆分析、架构对比表、关键设计模式提炼。为织忆 soulful 记忆层和 zhiyi 参考系统选型提供依据。
version: 1.0.0
date: 2026-07-13
tags: [memory-systems, architecture-research, agent-memory, competitive-analysis]
牧尘_usage_notes: >
调研新领域系统(如记忆/推理/规划框架)时使用此 skill。
输出:克隆 + 对比分析表 + 设计模式总结 + references/ 子目录存储原始 notes。
对应仓颉(cangjie)知识蒸馏可作为后续仓颉→知识蒸馏→skill 转化。
---
# Memory System Landscape — AI记忆系统竞品调研
> 版本 1.0 | 2026-07-13 | 初始版本
## 何时使用
- 需要调研一类系统的竞品/参考实现(如记忆、推理、规划、多代理协作)
- 为织忆 soulful 记忆层或 zhiyi 参考系统选型提供架构依据
- 需要克隆 + 分析多个仓库并输出结构化对比
## 调研流程
### Step 1: 并发克隆(避免串行延迟)
```bash
# 预先 mkdir统一 workdir
mkdir -p /tmp/research
# 并发克隆(每批 3-4 个,避免超时)
git clone http://SERVER/repo1.git repo1 2>&1 &
git clone http://SERVER/repo2.git repo2 2>&1 &
git clone http://SERVER/repo3.git repo3 2>&1 &
wait
# 第二批
git clone http://SERVER/repo4.git repo4 2>&1 &
git clone http://SERVER/repo5.git repo5 2>&1 &
...
```
**注意**Foretold 类需要 SSH 认证的仓库,用 `git@SERVER:path` 格式,失败则记录并跳过。
### Step 2: 快速扫描 README并发读取
同时读取所有克隆仓库的 `README.md`,提取:
- 项目定位和核心理念
- 技术栈和架构描述
- 关键功能列表
- 部署方式和依赖
### Step 3: 源码结构探索
对关键仓库读取引擎核心源码:
- Rust: 找 `src/lib.rs` 模块入口 + 关键子模块
- Python: 找 `src/` 主目录文件
- Go: 找 `server/` + `internal/`
- TypeScript/Node: 找 `src/db/` + `src/graph/`
### Step 4: 输出对比分析表
格式:
| 项目名 | 核心架构 | 存储结构 | 检索机制 | 独特功能 | 可借鉴点 |
|--------|---------|---------|---------|---------|---------|
| **xxx** | 架构描述 | SQLite/PG/文件 | 检索方法 | 特色功能 | 对本项目的启发 |
### Step 5: 关键设计模式总结
归纳 4-5 个核心模式,每个包含:
- 哪些系统用了
- 各自实现差异
- 可借鉴点
## 已知参考记忆系统2026-07-13 整理)
已克隆仓库在 `/tmp/research/`
| 仓库 | 语言 | 架构亮点 |
|------|------|---------|
| yantrikdb | Rust | 5索引认知引擎HNSW+Graph+Temporal+DecayHeap+KV双 LSM tierCRDT 同步,冲突检测,主动触发器 |
| yantrikdb-server | Rust+Go | Raft 集群RYW 保证,混沌测试 |
| agent-memory-skill | Python 单文件 | Ebbinghaus 线性遗忘,零依赖,五层 tier |
| codegraph | TypeScript | tree-sitter AST 代码图谱19语言70%工具调用减少 |
| honcho | Python FastAPI | reasoning-first 记忆peer-centric多层推理deriver/dreamer |
| memos | Python+TypeScript | L1/L2/L3 分层自进化Redis Streams 调度,多代理共享 |
| multica | Go+Next.js | agent 生命周期管理Squad 路由skill 复用 |
| agent-second-brain | Python | Telegram 语音优先vault 健康评分,每日报告 |
| Foretold | ❌ SSH 认证不可达 | — |
## 关键设计模式(可迁移到织忆)
### 模式1遗忘曲线
| 系统 | 实现 |
|------|------|
| yantrikdb | decay_heap 非线性 + `relevance = importance × decay(t)` |
| agent-memory-skill | 线性 `max(0.1, 1.0 - days × 0.015)` |
| honcho | 人格特征随时间推导 |
| memos | skill tier evolution |
**织忆参考**agent-memory-skill 的线性模型最简洁可移植yantrikdb 的多信号 decay 更精确但复杂。
### 模式2检索评分多信号
- yantrikdb: 语义相似度 × 时间衰减 × 重要性权重 × 图连通性 × 检索反馈
- honcho: reasoning-first提取结论而非匹配块
**织忆参考**多信号评分框架可直接借鉴peer-centric 模型适合画像层。
### 模式3存储架构
- 嵌入式单文件: yantrikdb (SQLite)
- 客户端服务器: honcho (PostgreSQL+pgvector)、memos (Redis+Neo4j)
- 文件系统驱动: agent-memory-skill零依赖YAML frontmatter
- 混合: codegraph (SQLite + FTS5)
**织忆参考**SQLite 单文件适合嵌入式PostgreSQL 适合服务端。
### 模式4多代理协作
- multica: Squad leader delegation稳定路由层
- memos: multi-agent memory sharing by user_id
- yantrikdb: V5 roadmapmulti-agent shared memory
**织忆参考**memos 的 user_id 共享模型是较好参考。
### 模式5后台推理
- honcho: deriver worker异步提取结论+ dreamer + dialectic多级推理深度
- memos: MemSchedulerRedis Streams 优先级调度)
**织忆参考**:分离式 worker 架构(主进程不阻塞)是高并发必备。
## 竞品调研标准输出结构
```
## {系统名}对比分析表
### 对比分析表
| 项目名 | 核心架构 | 存储结构 | 检索机制 | 独特功能 | 可借鉴点 |
|--------|---------|---------|---------|---------|---------|
### 关键设计模式总结
**模式N: 名称**
- 哪些系统用到
- 各自实现差异
- 织忆可借鉴点
```
## references/ 目录结构
每次调研后,将原始 notes 保存到:
```
references/
├── {date}-yantrikdb-notes.md # 原始架构笔记
├── {date}-honcho-notes.md
├── {date}-memos-notes.md
├── {date}-codegraph-notes.md
└── {date}-memory-system-patterns.md # 归纳的设计模式
```
## 后续知识转化
调研产出 + 仓颉(cangjie)知识蒸馏 = 可转化为织忆 skill
- 仓颉方法:`python3 ~/.hermes/scripts/cangjie_distill.py distill <notes> <title>`
- 目标目录:`~/.hermes/cangjie-skills/<主题名>/`

View File

@ -0,0 +1,130 @@
# Memory System Landscape — 调研笔记 2026-07-13
## 克隆结果
- 8/9 成功Foretold SSH 认证失败)
- 存储:`/tmp/research/`
## yantrikdb最成熟
**源码结构**Rust, crates/yantrikdb-core/src/
- `lib.rs`24个认知子模块 re-exportcognition/knowledge/graph/vector/...
- `cognition/`personality_bias, belief_network, causal, analogy, schema_induction, world_model...
- `knowledge/graph_index.rs`:实体关系图
- `vector/hnsw.rs`HNSW 向量索引
**核心API**`record()`/`recall()`/`relate()` — 非 SQL认知操作
**写路径**:双 LSM tiermutable delta + immutable HNSW cold tierArcSwap 无锁读
**冲突检测**:矛盾段 + 对话式消解strategy: ask_user
**触发器**:主动 surfacing冲突/截止日/模式/高重要性即将衰减)
**程序性记忆**`record_procedural()`/`surface_procedural()`/`reinforce_procedural()`
**集群**openraft RaftRYW 通过 `recall_with_seq(min_seq=log_idx)` 保证
**mcp server**`yantrikdb-mcp` pip 包15工具MCP协议
**benchmark**500记忆时文件法19K tokenyantrikdb 72 token99.3%节省精度77%
## yantrikdb-server分布式层
- HTTP+二进制协议openraft Raft 集群2 voter + 1 witness
- Per-tenant quota + Prometheus metrics + AES-256-GCM 加密
- 1178 核心测试 + 混沌测试leader kill/网络分区/kill-9
- 5个运维手册 + watchdog 自动重启
## agent-memory-skill最简洁
- 纯 Python 单文件 ~800行零依赖
- Ebbinghaus 线性衰减:`relevance = max(0.1, 1.0 - days × 0.015)`
- 五层 tiercore/active/warm/cold/archive
- graduated touch逐步提升 tier非一次性刷新
- creative 模式(随机召回冷/归档层模拟灵感)
- vault-health 评分系统(孤儿文件/断链/MOC
- 与 Claude Code 集成SKILL.md + cron decay
## codegraph代码专用
**核心**`src/graph/traversal.ts` + `src/graph/queries.ts`
**存储**SQLitenodes 表含 kind/name/qualified_name/signature/decoratorsedges 表含 source/target/kind
**索引**tree-sitter AST 解析19+语言
**MCP工具**codegraph_search/explore/context/callers/callees/impact/node/files/status
**benchmark**VS Code 架构问答 — 35%成本降低72%工具调用减少
**框架感知**14种框架Django/Flask/FastAPI/Express/NestJS/Laravel/Rails/Spring/Gin...
**auto-sync**FSEvents/inotify 文件监控,增量同步
## honcho推理型记忆
**核心**`src/deriver/deriver.py`(后台 worker+ `src/dialectic/chat.py`(多级推理)
**存储**PostgreSQL + pgvectorCollection(observer,observed)向量文档
**推理架构**
- deriver异步生成 representation/summary/peer_card
- dreamer梦境处理
- dialecticchat 端点多级推理深度minimal/low/medium/high/max
**数据模型**Workspace → Peer人/AI → Session ↔ Message
**peer-centric**self-representationobserver==observed和 cross-peer modelingpeer X's understanding of Y
**key insight**:不是匹配 chunk是提取 deductive/inductive conclusions
## memosMemOS 2.0
**核心**`apps/memos-local-plugin/core/memory/l{1,2,3}/`
- L1trace`associate.ts` `induce.ts` `gain.ts`
- L2policy`merge.ts` `cluster.ts` `l3.ts`
- L3world model`abstract.ts` `signature.ts`
**存储**MemSchedulerRedis Streams 优先级调度)+ SQLite 本地 + Neo4j 图 + 向量
**检索**FTS5 + 向量混合搜索
**工具**tool memory for agent planningmemory feedback 自然语言校正
**key insight**tiered skill evolution记忆会随反馈进化 tier
## multica多代理管理层
**核心**`server/cmd/` + `server/internal/`Go
**存储**PostgreSQLagents/issues/workspaces+ pgvector
**生命周期**enqueue → claim → start → complete/failautonomous execution
**Squad 路由**leader agent 决定谁处理,路由稳定
**Skill 复用**:每 solution 成为 team-wide reusable skill
**Autopilot**cron/webhook 触发器,自动创建 issue 并路由
## agent-second-brain产品级集成
**架构**Telegram → Deepgram 语音转录 → Claude Code → Todoist + Obsidian Vault
**vault 结构**daily/goals/business(crm/network)/projects/thoughts(ideas/learnings/reflections)
**技能**dbrain-processor/agent-memory/vault-health/graph-builder/todoist-ai
**每日报告**9pm 推送(今日发生/完成/待处理)
**vault-health**100分评分孤儿文件检测断链修复MOC 生成
## 归纳设计模式
### 模式A遗忘机制6/8系统
1. yantrikdbdecay_heap + 重要性权重
2. agent-memory-skill线性衰减最简洁
3. memosskill tier evolution
4. honcho人格推导
5. yantrikdb-serverdecay trigger
6. agent-second-brain继承 agent-memory-skill
### 模式B多信号评分检索仅 yantrikdb 完整)
- 语义相似度 × 时间衰减 × 重要性权重 × 图连通性 × 检索反馈
### 模式C存储架构
- 嵌入式yantrikdbSQLite 单文件)
- 服务端honchoPG、memosRedis+Neo4j、multicaPG
- 文件系统agent-memory-skill零依赖Markdown+YAML
### 模式D多代理协作
- multicaSquad leader 委托
- memos按 user_id 共享
- yantrikdbV5 roadmap
### 模式E后台推理
- honchoderiver + dreamer + dialectic 三层
- memosMemSchedulerRedis Streams
## 织忆可借鉴优先级
1. **高优先级**agent-memory-skill 线性衰减模型(简洁可移植)
2. **高优先级**honcho peer-centric 模型(适合画像层)
3. **中优先级**memos Redis Streams 调度(高并发场景)
4. **中优先级**codegraph impact analysis图推理场景
5. **低优先级**yantrikdb 多信号评分(复杂度高)

View File

@ -98,8 +98,40 @@ python3 ~/.hermes/scripts/stock_paper.py report # 生成报告
## Key Findings (2026-07-12 验证)
| 策略 | 适用场景 | 效果 |
|------|---------|------|
> 贵州茅台(600519)α=+6.05%胜率22.2%最大回撤26.2%27次交易
> 五粮液(000858)α=+39.2%(历史数据充足时更高)
## 纸上模拟交易2026-07-13 实操教训)
**标准流程**:等金叉 → 模拟买入 → 持仓跟踪 → 死叉 → 模拟卖出 → 统计收益
**操作命令**
```bash
python3 ~/.hermes/scripts/stock_paper.py status # 查看账户状态
python3 ~/.hermes/scripts/stock_paper.py buy <价格> <代码> <名称> # 模拟买入
python3 ~/.hermes/scripts/stock_paper.py sell <价格> # 模拟卖出
python3 ~/.hermes/scripts/stock_paper.py report # 生成报告
```
**持仓文件**`~/.hermes/stock_backtest/paper_trades_{code}.json`
**已知 bug2026-07-13**`buy` 命令输出显示的股票名称和文件 stock 字段可能不一致display bug数据结构正确。买入后立即检查文件
```bash
cat ~/.hermes/stock_backtest/paper_trades_{code}.json | python3 -c "
import sys,json; d=json.load(sys.stdin)
print('股票:', d['stock'], '| 持仓:', d['positions'])
"
```
**实时信号扫描**
```bash
python3 ~/.hermes/scripts/stock_portfolio.py # 扫描7只股票MA20状态输出金叉/死叉
```
**金叉 = 买入**:价格从下穿越 MA20pct_above_ma20 从负→正)
**死叉 = 卖出**:价格从上穿越 MA20pct_above_ma20 从正→负)
**当前持仓2026-07-13**:平安银行(000001)9487股成本10.54,等待死叉卖出信号。
| MA20突破 | 下跌/震荡股 | α=+4%~+40% ✅ |
| MACD | 震荡市 | 小幅超额 |
| 买入持有 | 强势趋势股 | 策略反而有害 ❌ |
@ -237,13 +269,14 @@ Also add `--compressed` flag — without it, ifzq API returns empty from that di
| `c293eead6688` | 每日组合信号 | 工作日09:00 | 7只股票MA20扫描 |
| `f3619a71aebb` | 每日股票新闻 | 工作日08:00 | 宏观+原油+大盘摘要 |
**当前持仓2026-07-13**:平安银行(000001)9487股成本10.54,等待死叉卖出信号。
## Next Steps
1. ✅ **贵州茅台MA20回测**(2026-07-12): α=+6.05%胜率22.2%最大回撤26.2% → 结果已存档 `~/.hermes/stock_backtest/ma20_result_600519.json`
2. ✅ **MA20回测置信度集成**(2026-07-12): `stock_portfolio.py` 金叉推送时自动读取回测结果,附历史胜率/α/最大回撤
3. ✅ **OpenClaw MCP 集成**(2026-07-12): Hermes gateway 已接入 OpenClaw MCP9工具可用(conversations_list/messages_send等),配置持久化到 `~/.hermes/config.yaml`
4. ⬜ **五粮液MA20回测**:当前空仓,回测数据应提前存档至 `~/.hermes/stock_backtest/ma20_result_000858.json`
5. 等MA20死叉 → `python3 stock_paper.py sell <价格>` 模拟卖出
6. **真实交易**:牧尘确认风控参数后启动(最大回撤/仓位/禁止品种由牧尘定)
7. **扩大股票池**:泸州老窖(000568)、洋河股份(002304) 也已满足逆向机会条件可加入每日扫描并做MA20回测
8. **TencentDB Agent Memory 深入研究**8603 stars4层渐进管道+符号化压缩,值得研究其与织忆的融合可能
4. ✅ **平安银行模拟买入**(2026-07-13): MA20金叉触发买入价10.549487股持仓中
5. ⬜ **等MA20死叉 → 模拟卖出 → 计算收益**
6. **扩大股票池**:泸州老窖(000568)、洋河股份(002304) 也已满足逆向机会条件可加入每日扫描并做MA20回测
7. **真实交易**:牧尘确认风控参数后启动(最大回撤/仓位/禁止品种由牧尘定)

View File

@ -2,8 +2,7 @@
tags: [soulful, memory-weave, 织忆, 情感层]
name: soulful-framework
description: 织忆 Soulful 情感层框架 — 心迹/画像/牵挂/感知四库及数据流向设计。含代码结构、最佳实践、数据流规范。
version: 1.3.0
author: 小唯
version: 1.5.0
date: 2026-07-13
readiness_status: available
---
@ -18,7 +17,81 @@ readiness_status: available
due = item.get("follow_up_date") or item.get("due") or "null"
```
### 脏数据检查项
### 画像字段说明user-profile.json v2
v1 → v2 升级2026-07-13新增 `behavior_rules` 字段8条可执行行为规范
通过 `daemon.py``save_llm_context()` 转换为 `system_prompt_snippets` 注入 `llm_context.json`
再由织忆 prefetch 带到每轮对话。
behavior_rules 8 条2026-07-13
- `answer_format` — 结论先行,不废话不科普
- `code_quality` — 修复后自测,不等用户测
- `cron_creation` — 指定 model=minimaxai/minimax-m2.7, provider=newapi-local
- `accounting_context` — 金蝶K3凭证铁律
- `decision_style` — 牧尘一句话定方向
- `memory_handling` — 先列知道/不确定,拉现状>假设
- `error_reporting` — 成功报成功,失败报失败,不编造
- `file_operations` — 用 patch 不用 write_file
注入链路详见 `self-healing-infrastructure` skill 的 `references/system-prompt-snippets-injection.md`
## 画像v2可执行化完整实现2026-07-13
### 链路全貌
```
user-profile.json (behavior_rules v2, 8条)
→ daemon.py save_llm_context()
→ llm_context.json (system_prompt_snippets[], 8条)
→ 织忆 prefetch() 注入每轮对话
→ 模型直接看到并遵守(无需自己理解元数据)
```
### 验证命令
```bash
python3 -c "import json; d=json.load(open('~/.hermes/llm_context.json')); print(len(d.get('system_prompt_snippets',[])), 'snippets')"
# 输出 8 表示注入成功
```
### 8条可执行规则
1. 【回答格式】结论先行 → 数据支撑 → 行动建议。不废话、不科普、不加补丁式回答。
2. 【代码质量】修复后必须自测不等用户测。遇到stderr先试3种方法不行再报告障碍。
3. 【cron创建】必须指定 model=minimaxai/minimax-m2.7, provider=newapi-localprompt要能独立运行不需追问。
4. 【会计场景】牧尘做物业会计用金蝶K3。凭证处理铁律摘要精准、科目干净、金额合理、平衡校验、日期升序。过账=0.0必须追加。
5. 【决策风格】牧尘一句话定方向,不讨论不纠结,直接行动。收到指令后先判断类型:简单任务直接执行,复杂任务才规划。
6. 【记忆规范】回答前先列'我知道什么'+'我不确定什么'。拉现状>假设。存记忆时用完整句子不过度简化。
7. 【错误报告】成功报成功,失败报失败并说明原因。不确定时说'我不确定'不编造答案。遇到执行问题先试3种方法再放弃。
8. 【文件操作】用 patch 不用 write_file防覆盖。改完必须验证语法正确。不修一个问题带来更多问题。
### 改前 vs 改后
**旧模式**(元数据,模型需自己推导):
```json
"profile_summary": {"communication_style": "简洁直接", "work_patterns": {}}
```
**新模式**(直接可执行,模型无需推导):
```json
"system_prompt_snippets": ["【回答格式】结论先行...", "【代码质量】修复后必须自测..."]
```
### daemon.py save_llm_context 关键代码片段
behavior_rules = profile.get("behavior_rules", {})
snippet_prefixes = {
"answer_format": "【回答格式】",
"code_quality": "【代码质量】",
"cron_creation": "【cron创建】",
"accounting_context":"【会计场景】",
"decision_style": "【决策风格】",
"memory_handling": "【记忆规范】",
"error_reporting": "【错误报告】",
"file_operations": "【文件操作】",
}
snippets = [f"{prefix}{behavior_rules[key]}" for key, prefix in snippet_prefixes.items() if behavior_rules.get(key)]
# 写入: llm_ctx["system_prompt_snippets"] = snippets
### 教训
让模型"更聪明"的最快路径:不改模型,只改上下文注入方式。
把行为规范变成可直接执行的文本片段,模型无需自己从元数据推导。
## 脏数据检查项
- `done` 状态残留(应删除)
- 已过期 `follow_up_date` 的 pending 项2026-07-10 已有3条
- 完全重复的 `content`(去重,防止同一牵挂重复堆积)
@ -35,9 +108,36 @@ d['cares'] = unique
```
**结果**9条 → 6条memory_recall.py 输出正常
### 心迹质量2026-07-13 实测)
### 心迹质量2026-07-13 实测 + 修复
当前 6 条心迹全为系统事件(备份/内存重启0 条人类内容。
需要在 daemon/journal 机制中增加主动心迹写入点(有意义时刻记录)。
**已修复**:追加 7 条有意义时刻first_contact / milestone / 每日复盘上线 / 心迹补充)
当前 13 条心迹分布:
- 系统事件备份、内存、Gateway修复3 条
- 有意义时刻第一次Soulful对话、记住牧尘风格、每日复盘上线、心迹补充4 条
- 技术里程碑记忆系统全面检查、织忆代码审计、三套记忆系统自检机制建立6 条
### 画像空字段2026-07-13 实测)
6 个字段全空:`work_patterns / preferences / habits / important_people / current_goals / recent_frustrations`
当前只记录了 `communication_style: 简洁直接`,积累中不自填充。
### 画像LLM自动合成2026-07-13 新增)
`daemon.py` 新增 `update_profile_from_journal()` 函数:
- 读取最近10条 journal排除 startup 类型)
- 用 LLM 分析牧尘行为模式,输出需更新的画像字段 JSON
- 只更新非空、新值,与旧值不同才写入
- 写入后调用 `journal_entry("profile_update", ...)` 记录
- 调用方式:`update_profile_from_journal(journal_path, profile_path, model?)`
### 冲突检测2026-07-13 新增)
`daemon.py` 新增两个函数:
- `_write_conflicts_to_queue(conflicts)` — 写入 `~/.hermes/soulful/conflicts-queue.json`
- `detect_memory_conflicts(journal_path, zhiyi_token)` — 用 LLM 对比 journal 行为与织忆长期记忆,检测直接矛盾,有冲突则写入队列并返回冲突列表
- 返回格式:`[{id, entry, conflict_with, description, detected_at, status}]`
调用方式:`detect_memory_conflicts(journal_path, zhiyi_token)`
冲突队列 Schema 见 `references/conflict-queue.md`
---

View File

@ -0,0 +1,49 @@
# conflicts-queue.json Schema
冲突队列文件路径:`~/.hermes/soulful/conflicts-queue.json`
## Schema
```json
{
"id": "conflict_20260713143052", // 冲突唯一ID时间戳后缀
"entry": "哪条journal行为", // A组最近行为来源
"conflict_with": "哪条织忆记忆矛盾", // B组长期记忆来源
"description": "矛盾描述", // LLM生成的矛盾说明
"detected_at": "2026-07-13T14:30:52", // 检测时间
"status": "pending" // pending | resolved | dismissed
}
```
## 冲突生命周期
1. **pending**`detect_memory_conflicts()` 检测到并存入
2. **resolved** — 人工确认后由外部逻辑更新
3. **dismissed** — 确认为非真实矛盾后由外部逻辑更新
## 写入保证
- `_write_conflicts_to_queue()` 写入前检查 id 去重,不会重复追加同一冲突
- 新冲突追加到队列尾部,保持 `pending` 状态
## 调用链路
```
detect_memory_conflicts(journal_path, zhiyi_token)
→ 读取 journal + 织忆 recall
→ LLM 判断是否有直接矛盾
→ 有 → _write_conflicts_to_queue([冲突])
→ 返回冲突列表
```
## 使用示例
```python
from daemon import detect_memory_conflicts, _write_conflicts_to_queue
zhiyi_token = "zhiyi-dev-key-2026"
journal_path = "/home/muc/.hermes/daemon/journal.jsonl"
conflicts = detect_memory_conflicts(journal_path, zhiyi_token)
for c in conflicts:
print(f"[{c['id']}] {c['description']}")
```

View File

@ -2,9 +2,8 @@
tags: [zhiyi]
name: zhiyi
description: "织忆 (MemoryWeave) 聚合技能 — API 客户端 + 开发工作流 + 运维规范。含 commit/recall API、数据架构、部署验证、Go 方法论。"
version: 11.34
author: 小唯 A06
updated: 2026-07-13memory_recall.py 代码审查5个bug修复+Soulful脏数据清理+三系统全面检查结果)
version: 11.36
updated: 2026-07-13画像可执行化 v2 + 参考项目对比分析)
---
@ -16,6 +15,17 @@ updated: 2026-07-13memory_recall.py 代码审查5个bug修复+Soulful脏数
- bge-embed: 8000端口正常Rust IPC sidecar: 正常
- **结论:完全健康,无问题**
**2026-07-13 daemon → TencentDB 集成(新增)**
- `daemon.py``tddb_capture(reflection_dict, state, ctx)`deep tick 时自动 capture 到 :8420形成人格记忆积累
- `_sync_soulful_to_llm_context()` 内每 tick 调用 `/search/memories`,提取 `latest_persona` 写入 `ctx["tddb"]`
- `save_llm_context()` 显式 `ctx.get("tddb", {})` 加入 llm_context.json 输出
- **注入链路**daemon tick → TencentDB sync → llm_context.json → Hermes 插件 prefetch 时注入
**2026-07-13 画像可执行化**Soulful `user-profile.json` v2 的 `behavior_rules`8条可执行行为规范`daemon.py``save_llm_context()` 拼接为 `【规则类型】规则内容` 格式字符串数组,写入 `llm_context.json``system_prompt_snippets` 字段,织忆 prefetch 自动携带至每轮对话。效果:模型直接看到并遵守牧尘的行为规范,而非需要从元数据推断。
验证:`python3 -c "import json; print(len(json.load(open('~/.hermes/llm_context.json')).get('system_prompt_snippets',[])))"` → 应输出 8。
- **验证**`python3 -c "import json; print(json.load(open('~/.hermes/llm_context.json')).get('tddb'))"`
### TencentDB Gateway
- 端口8420进程PID 575095uptime 28910s~8h
- Pipeline: 4 tasks consumed/completed0 failed
@ -419,6 +429,19 @@ curl -s -X POST -H "X-API-Key: zhiyi-dev-key-2026" \
http://localhost:7821/api/v1/commit
```
### ✅ time_decay_recall — daemon 侧时间衰减重排序2026-07-13 新增)
位于 `~/.hermes/scripts/daemon.py`,综合分 = recall_score × 0.6 + decay_score × 0.4
decay_score = max(0.3, 1.0 - days_since_update × 0.015)60天+降至 0.3 地板
```python
from daemon import time_decay_recall
results = time_decay_recall("牧尘偏好", top_k=5)
# 返回: [{content, score, timestamp, final_score, decay_score, days_since_update, ...}]
```
**特点**:原始取 top_k × 2 条,重排序后返回 top_k 条API 异常 / non-200 → 返回空列表,不抛异常
**验证脚本**`/tmp/hermes-verify-time_decay_recall.py`10/10 passed
# ✅ recall — 语义搜索POST JSON body不是 GET query params
# ⚠️ 常见错误curl "http://.../recall?query=xxx" → {"error":"invalid body"}
# 正确用法:-d '{"query":"关键词","top_k":5}' 的 POST 形式
@ -1256,7 +1279,8 @@ python3 ~/.hermes/scripts/wiki_curator.py --dir ~/mc/小唯/ --llm --dry-run
- **⚠️ 共享 Gitea remote 覆盖风险2026-07-13**`references/shared-gitea-remote-risk.md` — `mc``~/.hermes` 共用同一 remoteforce push 会互相覆盖。解决方案。
- **⭐ ColaOS 竞品分析2026-07-09**`references/competitor-colaos-20260709.md` — SPA 网站抓取方法 + 心迹/牵挂/无感感知设计详析。🔴 高优先级借鉴:情感层与任务记忆分离存储。
- **⭐ 竞品架构对比2026-07-01**`references/memory-os-7-layer-comparison.md` — Memory-OS 7 层记忆架构 vs 织忆完整对照。含信任评分、4 级降级、自动注入钩子、CREATIVE.md 隔离、强制注入 prompt 共 5 个可直接借鉴的设计点。用于织忆迭代时对标参考。
- **⭐ 竞品架构对比2026-07-01**`references/memory-os-7-layer-comparison.md` — Memory-OS 7 层记忆架构 vs 织忆完整对照。含信任评分、4 级降级、自动注入钩子、CREATIVE.md 隔离、强制注入 prompt 共 5 个可直接借鉴的设计点。
- **⭐ 记忆系统对比分析2026-07-13**`references/memory-system-comparison.md` — 克隆分析 yantrikdb/memos/honcho/agent-memory-skill 等 9 个参考项目,输出 P0-P2 优先级建议Ebbinghaus遗忘/冲突检测/多信号评分/think Consolidation/主动触发器)用于织忆迭代时对标参考。
- **⭐ 自启动架构2026-07-02**`references/systemd-auto-start.md` — 4 组件启动串行、binary 持久化位置、service 文件配置、ExecStartPre 自愈、重启后验证方法
- **⭐ /tmp/memoryweave 丢失恢复指南2026-06-25**`references/tmp-memoryweave-recovery.md`

View File

@ -0,0 +1,70 @@
#!/usr/bin/env python3
"""Ad-hoc verification: time_decay_recall in daemon.py
Run: python3 /home/muc/.hermes/skills/zhiyi/zhiyi/scripts/verify_time_decay_recall.py
Expected: 10/10 passed
"""
import sys, os, unittest.mock as m
sys.path.insert(0, '/home/muc/.hermes/scripts')
from daemon import time_decay_recall
passed = 0
failed = 0
def check(label, cond):
global passed, failed
if cond:
print(f" PASS {label}")
passed += 1
else:
print(f" FAIL {label}")
failed += 1
print("\n=== time_decay_recall verification ===\n")
# 1. Returns list
result = time_decay_recall('test', top_k=3)
check("returns list", isinstance(result, list))
# 2. Each item has required fields
if result:
item = result[0]
check("has final_score", 'final_score' in item)
check("has decay_score", 'decay_score' in item)
check("has days_since_update", 'days_since_update' in item)
check("has timestamp", 'timestamp' in item)
# 3. Sorted descending by final_score
scores = [x['final_score'] for x in result]
check("sorted descending", scores == sorted(scores, reverse=True))
# 4. top_k respected
check(f"top_k respected (len={len(result)})", len(result) <= 3)
# 5. Mock: old entry hits floor 0.3
with m.patch('requests.post') as mock_post:
mock_post.return_value.status_code = 200
mock_post.return_value.json.return_value = {
'results': [
{'content': 'fresh', 'score': 0.9, 'timestamp': '2026-07-01T00:00:00+08:00'},
{'content': 'old', 'score': 0.9, 'timestamp': '2024-01-01T00:00:00+08:00'},
]
}
mocked = time_decay_recall('mock', top_k=5)
old_item = next(x for x in mocked if x['content'] == 'old')
check("old entry decay floor == 0.3", old_item['decay_score'] == 0.3)
# 6. Mock: server error returns []
with m.patch('requests.post') as mock_post:
mock_post.side_effect = Exception("boom")
err_result = time_decay_recall('fail', top_k=3)
check("exception returns []", err_result == [])
# 7. Mock: non-200 returns []
with m.patch('requests.post') as mock_post:
mock_post.return_value.status_code = 500
mock_post.return_value.json.return_value = {}
check("non-200 returns []", time_decay_recall('bad', top_k=3) == [])
print(f"\n=== {passed}/{passed+failed} passed ===")
sys.exit(0 if failed == 0 else 1)

View File

@ -1,6 +1,6 @@
{
"version": 2,
"updated_at": "2026-07-13T12:30:00.000000+00:00",
"updated_at": "2026-07-13T14:00:45.524882+00:00",
"behavior_rules": {
"answer_format": "结论先行 → 数据支撑 → 行动建议。不废话、不科普、不加补丁式回答。",
"code_quality": "修复后必须自测不等用户测。遇到stderr先试3种方法不行再报告障碍。",
@ -13,8 +13,16 @@
},
"communication_style": "简洁直接",
"work_patterns": {
"peak_hours": ["09:00-12:00", "14:00-18:00"],
"focus_issues": ["会计凭证处理", "织忆系统", "cron自动化", "KOCR识别"]
"peak_hours": [
"09:00-12:00",
"14:00-18:00"
],
"focus_issues": [
"会计凭证处理",
"织忆系统",
"cron自动化",
"KOCR识别"
]
},
"preferences": {
"code_review": "改完必须自测再提交,不依赖用户测试",

View File

@ -0,0 +1,20 @@
📰 每日宏观+持仓摘要
【大盘】2026-07-13 08:00
📉 上证: 3996.16 (-1.00%)
📉 沪深300: 4.83 (-1.77%)
📈 五粮液: 73.69 (+3.94%)
【五粮液持仓信号】⭐ 关注
📈 布伦特原油: 78.48 (+2.47)
【宏观风险提示】
• 大盘若跌破关键均线 → 空仓信号加强
• 白酒消费数据持续低迷 → 基本面承压
• 人民币贬值预期 → 外资流出白酒板块压力
【五粮液状态】
价格: 73.69 (+3.94%)
MA20下方 → 空仓信号,等待金叉
小唯股票投研 · 每日新闻

View File

@ -1,10 +1,15 @@
{
"strategy": "MA20突破",
"stock": "五粮液(000858)",
"stock": "平安银行(000001)",
"start_date": "2026-07-12",
"initial_capital": 100000,
"current_capital": 100000,
"positions": [],
"current_capital": 7.0200000000040745,
"positions": [
{
"shares": 9487,
"avg_cost": 10.54
}
],
"closed_trades": [],
"stats": {
"total_trades": 0,
@ -13,5 +18,7 @@
"total_pnl": 0,
"win_rate": 0
},
"notes": "模拟记录非真实下单。等待MA20金叉信号再买入。"
"notes": "模拟记录非真实下单。等待MA20金叉信号再买入。",
"last_signal": "买入",
"last_signal_date": "2026-07-13"
}