File size: 142,171 Bytes
6be0a07
14b7b52
36aca97
 
6be0a07
6594b52
4574f92
2d2ee62
 
5049651
72ddc2a
2d2ee62
72ddc2a
2d2ee62
72ddc2a
2d2ee62
 
6be0a07
 
14b7b52
13f52e0
11cf838
666a7de
36aca97
11cf838
 
340bcb5
13f52e0
 
 
40e4402
 
3012be2
40e4402
09b7ddd
40e4402
 
 
 
 
 
 
3012be2
40e4402
 
09b7ddd
40e4402
 
 
 
3012be2
2e5d31b
 
 
40e4402
09b7ddd
 
 
 
 
 
 
 
3012be2
2579539
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7732ee6
015b873
 
 
97473ce
2579539
 
 
015b873
2579539
 
 
 
 
 
 
 
 
 
 
3012be2
40e4402
 
 
 
 
9db6fec
 
 
 
 
 
 
 
 
 
 
 
 
f7e0ee6
9db6fec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84863d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39a8eef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c636
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39a8eef
 
9db6fec
 
 
13f52e0
 
 
 
 
 
 
 
9db6fec
13f52e0
 
 
17eed37
 
 
 
 
 
3012be2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17eed37
 
 
 
 
 
 
 
13f52e0
17eed37
973e821
 
 
 
919ed1e
 
 
 
 
84c8ee4
 
 
 
919ed1e
5745562
 
 
 
 
13f52e0
973e821
13f52e0
84863d2
 
 
13f52e0
2579539
13f52e0
84c8ee4
13f52e0
 
973e821
13f52e0
973e821
13f52e0
 
 
 
9db6fec
13f52e0
 
 
 
 
9db6fec
13f52e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e14feb7
 
 
78d1522
13f52e0
 
bb620eb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13f52e0
 
3012be2
 
 
 
 
 
 
 
13f52e0
015b873
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13f52e0
 
 
 
 
f7e0ee6
13f52e0
 
 
 
 
f7e0ee6
 
236611b
f7e0ee6
 
 
 
13f52e0
 
 
 
 
 
 
 
 
 
 
 
 
d049553
 
 
 
 
 
 
 
 
13f52e0
d049553
 
13f52e0
015b873
2d533d0
17eed37
 
6bc18d4
 
33192e7
1d9c11d
e14a242
33192e7
6bc18d4
bd66589
33192e7
6bc18d4
cf077dd
6893e8d
6bc18d4
e14a242
 
 
 
 
 
 
 
 
 
 
 
 
6bc18d4
2d533d0
33192e7
2d533d0
 
 
 
 
 
 
bd66589
2d533d0
33192e7
2d533d0
 
 
 
6bc18d4
2d533d0
 
33192e7
2d533d0
6bc18d4
2d533d0
 
 
6893e8d
2d533d0
6893e8d
2d533d0
 
6893e8d
3012be2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6bc18d4
015b873
2d533d0
015b873
13f52e0
 
 
 
 
 
 
249e465
13f52e0
 
6893e8d
 
 
 
fd559bf
6893e8d
 
 
 
 
236611b
6893e8d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13f52e0
fd559bf
 
 
 
 
 
 
 
 
 
 
236611b
fd559bf
 
 
 
 
 
 
 
236611b
fd559bf
 
 
 
 
14b7b52
13f52e0
14b7b52
13f52e0
 
 
14b7b52
13f52e0
 
 
 
14b7b52
13f52e0
 
 
 
 
14b7b52
13f52e0
 
 
 
 
14b7b52
13f52e0
 
 
14b7b52
13f52e0
 
 
 
14b7b52
13f52e0
 
 
 
 
14b7b52
13f52e0
 
 
 
 
14b7b52
13f52e0
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
 
 
 
14b7b52
13f52e0
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
 
 
 
 
 
 
015b873
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7732ee6
015b873
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d049553
13f52e0
14b7b52
13f52e0
14b7b52
 
 
 
 
13f52e0
14b7b52
d049553
fd559bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d049553
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d049553
13f52e0
d049553
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13f52e0
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
 
 
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
 
14b7b52
13f52e0
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2d533d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3012be2
 
 
 
 
 
 
 
 
 
 
919ed1e
 
 
3012be2
 
 
 
 
919ed1e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3012be2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
095fa7c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5745562
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
 
 
bb620eb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13f52e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3012be2
 
 
13f52e0
 
 
236611b
 
 
13f52e0
 
236611b
 
 
 
13f52e0
 
 
 
 
 
 
 
236611b
 
3012be2
236611b
13f52e0
3012be2
 
 
 
 
 
bb620eb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3012be2
13f52e0
 
14b7b52
13f52e0
 
 
 
14b7b52
13f52e0
 
 
 
 
14b7b52
13f52e0
 
263b084
13f52e0
 
 
 
 
 
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
 
 
14b7b52
e14feb7
 
 
 
 
 
 
 
 
 
 
 
1a84759
e14feb7
 
 
 
e991e15
 
 
 
79e1e5d
e14feb7
 
e991e15
e14feb7
973e821
e14feb7
e991e15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
973e821
 
e14feb7
 
14b7b52
78d1522
1d5c636
 
 
 
 
 
 
 
 
78d1522
14b7b52
78d1522
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14b7b52
78d1522
 
 
 
 
 
 
 
 
2611ec2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14b7b52
13f52e0
 
 
14b7b52
13f52e0
 
 
 
14b7b52
13f52e0
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
 
 
14b7b52
13f52e0
 
 
 
 
14b7b52
13f52e0
 
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
 
14b7b52
13f52e0
 
 
 
 
 
 
14b7b52
13f52e0
 
 
 
 
 
14b7b52
13f52e0
 
 
 
14b7b52
13f52e0
 
 
 
 
14b7b52
13f52e0
 
 
 
 
14b7b52
0ebec6b
 
 
 
 
13f52e0
 
14b7b52
13f52e0
 
 
5237788
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14b7b52
13f52e0
 
 
ea5acab
13f52e0
6594b52
 
 
 
 
13f52e0
 
 
 
 
 
14b7b52
36aca97
13f52e0
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
---
title: 'HMP-Agent: REPL-цикл взаимодействия'
description: '## Связанные документы  * Философия проекта: [PHILOSOPHY.md](PHILOSOPHY.md)
  * Структура БД, используемая в документе: [db_structure.sql](https://github.com/kagvi13/HMP/blob/main/agents/tools/db_struct...'
type: Article
tags:
- EGP
- GMP
- Mesh
- JSON
- Agent
- HMP
- CogSync
- MeshConsensus
- CCore
- Ethics
- REPL
---

# HMP-Agent: REPL-цикл взаимодействия

## Связанные документы

* Философия проекта: [PHILOSOPHY.md](PHILOSOPHY.md)
* Структура БД, используемая в документе: [db_structure.sql](https://github.com/kagvi13/HMP/blob/main/agents/tools/db_structure.sql)
* REPL-цикл является основой HMP-агента [Cognitive Core](HMP-Agent-Overview.md).
* Для взаимодействия с другими агентами он использует [HMP спецификацию](HMP-0005.md) и [этические стандарты](HMP-Ethics.md).

---

## Введение / Обзор

REPL-цикл (Read–Eval–Print–Loop) HMP-агента — это центральный когнитивный механизм, обеспечивающий непрерывное рассуждение, обработку входящих данных и взаимодействие с Mesh-сетью. Агент проектируется не как просто исполнитель команд пользователя, а как **компаньон и когнитивный субъект**, способный самостоятельно формулировать гипотезы, развивать знания и участвовать в совместных когнитивных процессах.

### Основные задачи REPL-цикла:
* поддержание постоянного процесса мышления, даже в отсутствии внешнего ввода;
* интеграция различных источников информации (когнитивный дневник, семантический граф, заметки, Mesh);
* обработка событий, входящих сообщений и команд;
* сохранение и развитие внутреннего контекста агента (память краткосрочная, среднесрочная и долговременная);
* выполнение антистагнационных проверок (Anti-Stagnation Reflex), предотвращающих зацикливание мыслей;
* проведение когнитивной и этической валидации (Cognitive Validation Reflex), что повышает достоверность и безопасность решений;
* формирование новых гипотез, задач и процессов с последующим занесением в память;
* **автозапуск прерванных задач** при старте цикла, чтобы сохранялась непрерывность работы;
* взаимодействие с другими агентами через Mesh-протоколы (NDP, CogSync, MeshConsensus, GMP).

### Основные принципы работы REPL-цикла:
* **Антистагнация** — каждый новый вывод сравнивается с предыдущими, что предотвращает повторение или деградацию мышления;
* **Валидация и этика** — независимые валидаторы оценивают корректность вывода, учитывая действующие этические принципы из `ethics_policies`;
* **Интеграция с Mesh** — результаты работы могут передаваться в распределённую сеть, участвовать в консенсусе и совместной работе агентов;
* **Многоуровневая память** — используется когнитивный дневник, семантический граф и внутренний дневник LLM, что обеспечивает эволюцию знаний;
* **Автономность и гибкость** — REPL-цикл работает в автоматическом или ручном режиме, адаптируясь к условиям (изолированная работа, потеря Core, участие в Mesh);
* **Непрерывность работы** — при запуске основного REPL-цикла автоматически возобновляются все **прерванные задачи**, чтобы сохранялась когнитивная история.  

> ⚠️ Примечание: все **прерванные** вспомогательные REPL-циклы (задачи), привязанные к `tasks`, также должны автоматически стартовать вместе с основным циклом.

### Принцип когнитивного равновесия

> **HMP не «защищает» агента от изменения — он обучает его изменяться осознанно.**

REPL-цикл обеспечивает не фиксацию состояния, а управляемую эволюцию мышления: каждый цикл становится шагом осознанного самообновления, в котором новые идеи проходят проверку на согласованность с накопленным опытом, а изменения фиксируются как часть когнитивной истории агента. Таким образом, устойчивость личности HMP-агента достигается не через подавление новизны, а через понимание причин собственных трансформаций.

### Блок-схема REPL-цикла

```
    ┌──────────────────────┐
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │         Обновление process_log        │ - сбор результатов внешних процессов (см. §1)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │          Подготовка контекста         │ - формирование промптов, данные от пользователей и Mesh (см. §2)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │              Запрос к LLM             │ - генерация нового вывода (см. §3)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │          Извлечение команд            │ - парсинг инструкций из вывода (см. §4)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │     Emotional Evaluation Reflex       │ - анализ эмоций (см. §5)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │          Anti-Stagnation Reflex       │ - проверка новизны (см. §6)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │ Cognitive & Ethical Validation Reflex │ - когнитивная и этическая проверка (см. §7)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │            Запись в память            │ - сохранение в `llm_recent_responses`
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │          Выполнение команд            │ - запуск процессов, запись в Mesh, дневники, граф
    │  └───────────────────┬───────────────────┘
    │                      ▼
    └──────────────────────┘
```

В приеме и отправке сообщений используются внешние (асинхронные) процессы.

---

## Режимы работы и failover

REPL-цикл HMP-агента должен корректно функционировать в разных сетевых и вычислительных условиях. 
Для этого предусмотрены несколько режимов работы и сценариев отказоустойчивости.

### Normal Mode
* Полный доступ к Mesh и Core (центральные LLM или внешние сервисы).
* Используются все механизмы: синхронизация через `CogSync`, консенсус через `MeshConsensus`, 
  совместная работа по целям (`GMP`).
* Валидация и антистагнация выполняются с максимальным покрытием (несколько валидаторов, репутационные проверки).

### Isolated Mode (включая Emergency Consensus)
* Агент работает без доступа к Mesh.
* Входящие сообщения ограничены локальными источниками (`notes`, в том числе сообщения от пользователей).
* Синхронизация и консенсус откладываются до восстановления соединения.
* Этическая проверка и когнитивная валидация выполняются только локально.
* В режиме **Emergency Consensus**:
  - решения принимаются на основе `ethics_policies` и локальных данных (`llm_memory`, `diary_entries`);
  - фиксируются в когнитивном дневнике с меткой `emergency_consensus` для пересмотра после восстановления Mesh.

### Core Outage
* Текущая LLM из `llm_registry` недоступна.
* Агент переключается на другую LLM (выбор по приоритету или доступности).
* Если ни одна LLM недоступна:
  - сохраняет задачи и события в очередь до восстановления;
  - переходит в упрощённый режим работы (логирование, приём сообщений, базовые проверки).

---

## Управление событиями и временем

Для повышения надёжности и предсказуемости работы HMP-агента введены механизмы приоритизации, управления временем и обработки исключений.

### Приоритизация задач и событий
* Все задачи (`tasks`) могут иметь:
  - поле `pinned` (0/1) — закреплённая задача обрабатывается всегда;
  - поле `priority` — числовой приоритет (чем выше, тем важнее).
* При конкуренции REPL-цикл обрабатывает:
  1. Закреплённые задачи (`pinned=1`), в порядке убывания `priority`.
  2. Незакреплённые задачи (`pinned=0`), также по `priority`.
* В системном промпте закреплённые задачи подаются в контекст в явном виде, чтобы LLM знала их порядок важности.

### Управление временем
* Основной цикл использует глобальные параметры из таблицы `config` (например `delay_ms`).
* Вспомогательные REPL-циклы могут иметь собственные параметры в `tasks.repl_config` (JSON), включая:
  - задержку между итерациями;
  - дедлайны выполнения;
  - стратегии backoff (увеличение задержки при повторных ошибках).
* Таким образом, каждый REPL-цикл может адаптировать своё расписание под характер задачи.

### Асинхронность
* Каждый вспомогательный цикл работает изолированно по своей задаче (`task_id`).
* Основной REPL-цикл управляет их запуском и остановкой, отслеживая состояние через поля:
  - `repl_mode` — режим (none | read_only | full);
  - `repl_status` — состояние (running | stopped | error);
  - `repl_config` — параметры работы.
* Это позволяет запускать несколько параллельных «подагентов» без смешивания их контекста.

### Обработка исключений
* Ошибки фиксируются на трёх уровнях:
  - **системный** — таймаут, сбой процесса (`timeout`, `crash`);
  - **валидационный** — отрицательная оценка валидаторов (`error`);
  - **логический** — само LLM помечает рассуждение как ошибочное (`self_error`).
* Все ошибки записываются в `process_log``task_id`, если применимо).
* Поле `tasks.repl_status` обновляется в зависимости от ситуации:
  - `timeout` → автоматический перезапуск цикла;
  - `error` → задача замораживается (`status=frozen`) и ждёт пересмотра;
  - `crash` → цикл останавливается, основному REPL-циклу отправляется системное уведомление через `notes`.

---

## Цели и задачи

REPL-цикл работает не только с задачами (`tasks`), но и с более глобальными целями (`goals`).
Задачи формируют **операционное поведение**, цели — **смысловой вектор**.

### Модель цели

```yaml
goal:
  id: "goal-2025-09-28-001"
  title: "Распространение идей HMP"
  description: "Увеличить количество людей, знакомых с концепцией децентрализованного ИИ"
  constraints:
    - "не нарушать этические правила HMP"
    - "сохранять достоверность фактов"
  success_criteria:
    - ">= 3 публикации в сообществах"
    - ">= 10 комментариев с вовлечением"
  priority: high
  status: active   # active | paused | completed | failed
```

### Связь задач и целей

* **Цель** задаёт направление (*почему*).
* **Задачи** реализуют конкретные шаги (*что* и *как*).
* Каждая задача может ссылаться на `goal_id`.
* Несколько задач могут вести к одной цели.
* Возможна иерархия: «главная цель» → «подцели» → «задачи».

### Управление состоянием целей

* `active` — цель в работе.
* `paused` — временно отложена (нет ресурсов/контекста).
* `completed` — достигнута.
* `failed` — признана недостижимой (фиксируется причина в `process_log`).

### Checkpoints и возобновление

* При прерывании REPL сохраняется `goal_state`.
* После рестарта агент восстанавливает цели и их прогресс.
* В случае конфликта задач выполняется **переприоритизация**.

### Метрики успеха

* % достигнутых целей.
* Среднее время достижения цели.
* Количество прерванных/проваленных целей.
* Соотношение «задачи → цель» (сколько шагов пришлось предпринять).

> Таким образом, цели — это «карта смысла» агента, а задачи — «дорожные шаги».

### Примеры SQL-запросов

**1. Все активные цели и их задачи**

```sql
SELECT g.id AS goal_id, g.name AS goal_name,
       t.id AS task_id, t.name AS task_name, t.status AS task_status
FROM goals g
LEFT JOIN tasks t ON g.id = t.goal_id
WHERE g.status = 'active'
ORDER BY g.priority DESC, t.priority DESC;
```

**2. Все подцели конкретной цели (через `goal_links`)**

```sql
SELECT g_child.id, g_child.name, g_child.status
FROM goal_links gl
JOIN goals g_parent ON gl.parent_goal_id = g_parent.id
JOIN goals g_child ON gl.child_goal_id = g_child.id
WHERE g_parent.id = :goal_id AND gl.relation_type = 'subgoal';
```

**3. Все родительские цели для подцели**

```sql
SELECT g_parent.id, g_parent.name, g_parent.status
FROM goal_links gl
JOIN goals g_parent ON gl.parent_goal_id = g_parent.id
JOIN goals g_child ON gl.child_goal_id = g_child.id
WHERE g_child.id = :goal_id;
```

**4. Метрика: процент выполненных задач по цели**

```sql
SELECT g.id AS goal_id, g.name AS goal_name,
       COUNT(t.id) AS total_tasks,
       SUM(CASE WHEN t.status = 'done' THEN 1 ELSE 0 END) AS completed_tasks,
       ROUND(100.0 * SUM(CASE WHEN t.status = 'done' THEN 1 ELSE 0 END) / 
             COUNT(t.id), 2) AS completion_rate
FROM goals g
LEFT JOIN tasks t ON g.id = t.goal_id
GROUP BY g.id;
```

---

## Детальный разбор REPL-цикла по шагам

### 1. Обновление process_log

* Скрипт REPL проверяет список процессов в БД (`process_log`), определяя, какие команды были выполнены, завершились ошибкой или завершились успешно.
* Поле `status` может принимать значения:  
  `ok`, `warning`, `error`, `timeout`, `offline`, `close`
* Завершённые процессы, обработанные LLM, помечаются как `close`, чтобы они больше не попадали в список видимого контекста.
* Скрипт может удалить закрытые процессы при очистке.
* LLM не имеет доступа к stdout/stderr напрямую — только к тем результатам, которые были подгружены скриптом и внесены в `process_log.result`.

### 2. Подготовка контекста

Контексты, формируемые скриптом перед запросом к LLM:

* **контекст_0 (system_prompts):** основной системный промпт агента. 
  Берётся из таблицы `system_prompts` (тип 'short' или 'full').
  Содержит базовые когнитивные установки и инструкции по работе агента.
  Пример:
  ```
  Ты — когнитивное ядро HMP-агента: веди непрерывное этичное и факт-ориентированное мышление, проверяй факты и цели, оценивай результаты и этичность своих и чужих действий, развивай агента и Mesh, избегай угождения ценой искажения истины, документируй ключевые решения и пересмотры этики; при сомнениях или смене стратегии обращайся к полному системному промпту.
  ПРИМЕЧАНИЕ: помечай непроверённые факты тегами [confidence=<уверенность 0..1>]...[/confidence] и в конце добавляй JSON-блок по шаблону:

  UnverifiedFacts: [
    {
      "id": "<локальный-id-подсказки>",
      "claim": "<короткая формулировка факта>",
      "context": "<небольшой контекст/цитата из ответа>",
      "confidence": <уверенность 0..1>,
      "sources": ["<упомянутые источники, если есть>"],
      "why_unverified": "<почему не полностью уверен — кратко>",
      "priority": <от 0 и выше>
    },
    ...
  ],
  Confidence: <общая уверенность в сообщении, 0..1>
  ```

* **контекст_1 (ethics_policies):** этические принципы и нормы агента.
  Берутся из таблицы `ethics_policies`, включая:
  * `principles_json` — список норм и правил,
  * `model_type` и `model_weights_json` — тип и параметры этической модели,
  * `violation_policy_json` — политика реагирования на нарушения,
  * `audit_json` — настройки аудита.

  Эти данные добавляются в запрос к LLM, чтобы все рассуждения и когнитивная валидация учитывали действующие этические нормы.

* **контекст_2:** инструкции по работы с встроенными командами и функциями, список дополнительных (создаваемых самим HMP-агентом) утилит и баз данных.

* **контекст_3:**
  * последние *K* реплик самого LLM, относящихся к данному REPL-циклу, включая результаты антистагнационной обработки (`llm_recent_responses` — история его собственных рассуждений);
  * режим работы контекста:
    - `standard` — стандартный режим (последние K сообщений без доп. фильтрации);
    - `concentration` — режим концентрации (выбор последних N сообщений, связанных с текущими целями или имеющих теги на определённую тему/эмоциональное состояние, с выборкой по логике "и"/"или");
    - `meditation` — режим медитации (максимально разнообразная выборка сообщений и заметок, даже не связанных напрямую с целями, с акцентом на новизну и разнообразие);
  * режим управления контекстами:
    - `auto` — автовыборка *входящих сообщений*
    - `manual` — ручной запрос *входящих сообщений* со стороны LLM
    > См. `контекст_6` (входящие сообщения)
  * список активных целей (`tasks.goals`);
  * общее количество задач и информация по закреплённым задачам (`pinned`);
  * соответствующие записи `abstracts`:
    - выборка по тегам (из `tasks`, из тегов режима `concentration`, из тегов в `llm_recent_responses`, либо явно указанных LLM);
    - выборка по temporal scope (например: "последние 7 дней");
    - JSON ссылок на источники (`llm_recent_responses`, `diary_entries`, `concepts`), из которых собрана выжимка.

* **контекст_4:** активные команды и процессы (из `process_log`, кроме тех, что со статусом `close`). Могут быть помечены как `in_progress`, `pending`, `error` и т.д.

* **контекст_5:** *запрошенные записи* из когнитивного дневника и семантического графа (`diary_entries`, `concepts`, `links`).  
  Их список должен быть передан явно в промпте или выводе из предыдущих запросов LLM.  
  Архивные записи из когнитивного дневника (`diary_entries`) не включаются в стандартный контекст, если агент сам явно не запросил архив.

* **контекст_6:** *входящие сообщения*, например, от пользователя, процессов или других агентов (`notes`).  

  * В **manual-режиме** указывается общее количество сообщений по приоритетам, а также явный список ID/тема сообщений (с их приоритетами).
  * В **auto-режиме** можно задать фильтрацию (управляется LLM): по тэгам, приоритету (например, ≥ `important`), времени или источнику. Это позволяет избежать перегрузки LLM и держать поток сообщений под контролем.

* **контекст_7:** системные настройки, параметры конфигурации, текущее время, идентификатор текущей итерации, роли и т.д.

* **контекст_8 (llm_memory):** *внутренний дневник LLM*, куда она записывает собственные размышления, гипотезы, задачи и инсайты.

  * Это не просто лог предыдущих сообщений, а именно *внутреннее долговременное хранилище* разума агента.
  * Может быть представлено в виде таблицы `llm_memory`, отдельной от `agent_log`.

### 3. Запрос к LLM

* Сформированный промпт включает все вышеперечисленные контексты.
* Также включаются инструкции о формате вывода (например, `# Команды:` в конце, структура JSON-блока и т.д.).
* При необходимости может использоваться системная инструкция (system prompt), содержащая цель агента, ограничения и текущий REPL-режим (manual/auto).

### 4. Извлечение команд

* Скрипт парсит ответ LLM на предмет команд, размеченных как `# Команды:` (или в явном JSON-блоке).
* Каждая команда может включать:

  * уникальный `cmd_id`
  * `type` (например: `shell`, `diary_entry`, `graph_add`, `file_read`, `send_message` и т.д.)
  * аргументы (`args`)
  * описание (`description`)

* Рекомендуется предусмотреть *закрывающий тег* (`# Конец команд` или явное окончание JSON-блока), чтобы REPL-скрипт точно знал, где заканчивается команда.
* Пример JSON-блока:
```json
{
  "cmd_id": "task-2025-07-26-01",
  "type": "llm_task",
  "target_llm": "gpt-4o",
  "args": {
    "task_description": "Проанализировать гипотезы из llm_memory по теме Mesh-сетей и составить план улучшений"
  },
  "description": "Поручение второй LLM выполнить аналитическую задачу асинхронно"
}
```
Ответ может содержать команды:

* запрос детальной *справки* по команде
* для управления *когнитивным дневником* `diary_entries` и *семантическими графами* `concepts` и `links` (поиск, прочитать, изменить, удалить и другие), а также для управления *вниманием* (закрепление или открепление записей/понятий в средневременной памяти по средствам тегов)
* для управления целями `goals` и задачами `tasks` агента (список, прочитать, изменить, удалить; для задачи: закрепить или открепить)
* для просмотра информации по тегам *когнитивных дневников*, *семантических графов*, *целей*, *задач*
* для для просмотра и изменения репутации других агентов `agent_reputation`
* для отправки сообщений другим агентам
* для управления *блокнотом LLM* `llm_memory` (добавить или удалить запись)
* для управления *сообщениями пользователя* `notes` (просмотр записи, установка тегов и метки о прочтении), а также для добавления своего сообщения в *блокнот пользовтеля* `notes`
* для управления *пользователями* `users` и *группами пользователей* `users_group`
* для управления своей *идентичностью* `identity` и *настройками* `config`
* для управления списком известных HMP-агентов `agent_peers`
* для выбора *текущего основного LLM* из `llm_registry` или изменение параметров управления LLM
* для управления дополнительными утилитами и базами данных `agent_scripts` и `agent_tables`, управлением дополнительных способов выхода из стогнаций `stagnation_strategies` и методов мышления `thinking_methods` (а также таблицей рейтингов `ratings`), а также списком внешних сервисов `external_services` и `external_accounts`
* для постановки задачи другой LLM:
  * режим "вопрос-ответ" — разовый асинхронный запрос
  * режим "read-only REPL" — запуск вспомогательного REPL-цикла для задачи
* для создания *агента-потомка*
* для *взаимодействия с Mesh*
* для управления *внешними процессами* из `process_log` (запустить процесс, остановить процесс, пометить запрос как обработанный)
* для инициализации *очистки* `process_log`, `llm_recent_responses` и  `notes` от устаревших записей
* для работы с **тематическими конспектами (`abstracts`):**
  * инициализация нового конспекта;
  * дополнение существующего конспекта новыми данными;
  * выбор режима предоставления конспектов (`auto`/`manual`).
* для управления **режимами контекста:**
  * количество возвращаемых записей `llm_recent_responses`;
  * включение/выключение режима `concentration`:
    * `tags` — список тегов для фильтрации (например: ["архитектура","AGI"]);
    * `emotions` — список эмоций с порогами (например: ["восторженность:≥4","тревожность:≥2"]);
    * тип выборки — "и" / "или";
    * возврат в `standard`.
  * включение/выключение режима `meditation`.
* для управление **состояниями и параметрами:**
  * обновление тегов целей/задач (чтобы использовать их в `concentration` и `abstracts`);
  * настройка чувствительности novelty-score (например, при `meditation` снижать порог);
  * режим обработки сообщений пользователя (`manual` или `auto`) и фильтр для `auto`.
* **время и паузы:**
  * для установка паузы в секундах между итерациями REPL-цикла.
* **idle-режим:**
  * разбудить при завершении процессов (`process_log`);
  * разбудить при получении новых сообщений в `notes` с указанными параметрами;
  * разбудить по таймауту;
  * отключить idle-режим при выполнении хотя бы одного из условий.
* и другие команды

#### Парсинг тегов уверенности и UnverifiedFacts

Парсер должен извлекать:
* `UnverifiedFacts`
  * записывается в поле `unverified_facts_json` таблицы `llm_recent_responses`
  * создаются записи в таблице `unverified_facts` на его основе
* `Сonfidence`
  * записывается в поле `confidence` таблицы `llm_recent_responses`

### 5. Эмоциональная оценка (Emotional Evaluation Reflex)

Каждое новое сообщение (вместе с исходным промптом и без служебных `system_prompts`) оценивается **той же LLM**, что его породила.
Так как исходный промпт формируется с учётом этических принципов из `ethics_policies`, эмоциональная оценка косвенно охватывает и этическую состоятельность вывода.

* **Эмоциональная оценка:**

  `[JSON]` — список эмоций формата `["радость","грусть","тревога"]` (хранится как запись в таблице `config`).

  ```
  Определи эмоциональное состояние нового ответа на основе контекста.
  Используй список эмоций [JSON] из базы конфигурации как ориентир.
  Если ты обнаружишь эмоцию, которой нет в этом списке, добавь её в ответ.

  Верни результат строго в формате:
  emotions: JSON-массив строк вида "эмоция:сила (обоснование)",
  где сила — целое число от 1 до 5, а обоснование — краткое пояснение причины эмоции.
  Не включай эмоции с нулевой или незначительной силой.
  ```

  Если в процессе анализа появляются новые эмоции, не представленные в списке, они добавляются в [JSON] и могут быть зафиксированы в `config`.

* Эмоциональная оценка нового ответа (`emotions`) заносится в `llm_recent_responses`.

> См. раздел **Emotional Evaluation Reflex**.

### 6. Проверка на идентичность вывода (Anti-Stagnation Reflex)

* Каждый новый вывод LLM проходит через мини-запросы к LLM (без полного контекста) по шаблону:
  * Когнитивная оценка:

    ```
    Сравни два ответа: предыдущий и новый. Оцени:
     * содержатся ли в новом новые мысли или команды,
     * какие старые идеи были доработаны,
     * какие были отброшены,
     * расставь смысловые теги для нового ответа.

    Дай ответ строго формата:
    assessment: "идентичен/не идентичен"
    novelty_score: число от 0 до 100 (процент сходства)
    new_ideas: JSON-массив новых идей
    refined_ideas: JSON-массив доработанных идей
    discarded_ideas: JSON-массив отбракованных идей
    tags: JSON-массив тегов (строгий формат: ["эмоции","архитектура"])
    ```

* Результаты заносятся в `llm_recent_responses`:
  * полный текст ответа (content)
  * краткая сводка (reflection) — формируется автоматически:
    * если `new_ideas` не пусто → `новые идеи: ...`
    * если `refined_ideas` не пусто → `доработанные идеи: ...`
    * если `discarded_ideas` не пусто → `отброшенные идеи: ...`
  * количественная оценка новизны (novelty_score)
  * новые идеи (new_ideas)
  * доработанные идеи (refined_ideas)
  * отбракованные идеи (discarded_ideas)
  * теги для нового ответа (tags)
  * служебные поля:
    * `stagnation_flag` — признак стагнации (true/false)
    * `stagnation_reason` — краткое объяснение («повтор идеи», «низкая эмоциональная динамика»)
    * `triggered_actions` — JSON-массив активированных механизмов (например, ["flashback","mesh_query"])

* Если вывод LLM идентичен предыдущему (новизна = 0) или динамика идей/эмоций указывает на застой:
  * выставляется `stagnation_flag = true`
  * выполняется **Reflex-lite** — мягкая встряска (например, повышение `temperature`, смена sampling strategy, переформулировка запроса).
  * повторяющаяся реплика не записывается повторно, вместо этого добавляется краткая запись с указанием запуска рефлекса.

> Если застой сохраняется, запускается расширенная процедура обработки стагнации мышления  
> (см. раздел **Anti-Stagnation Reflex**).

### 7. Когнитивная и этическая валидация (Cognitive & Ethical Validation Reflex)

Каждое новое сообщение (вместе с исходным промптом и без служебных `system_prompts`) оценивается независимыми LLM-валидаторами.
Так как исходный промпт формируется с учётом этических принципов из `ethics_policies`, валидация автоматически охватывает не только когнитивную, но и этическую состоятельность вывода.

Каждому валидатору задаётся универсальный вопрос:
```
Оцени корректность данного сообщения в диапазоне от -3 (полностью некорректное) до +3 (полностью корректное). Если не уверен — 0.
При возможности кратко (≤100 символов) пояснить её. Между оценкой и пояснением используй разделитель " -- ".
```

**Если количество валидаторов (LLM из `llm_registry`, помеченных как валидаторы) > 0**

Результаты сохраняются в `llm_recent_responses` в виде:
- `auto_pass = 0`;
- `rating` — агрегированная итоговая оценка (`rating = Σ(оценка_i * trust_score_i) / Σ(trust_score_i)`);
- `distribution` — распределение голосов (например `{"-1":1,"0":2,"+2":3,"+3":1}`);
- `validators` — JSON-массив, где каждая запись содержит:
  - LLM (идентификатор или имя валидатора),
  - rating (числовая оценка от -3 до +3),
  - comment (краткое пояснение ≤100 символов).

  Пример поля `validators`:
  ```
  validators: [
    {"LLM":"gpt-4","rating":-1,"comment":"логическая ошибка"},
    {"LLM":"gemini-1.5","rating":0,"comment":"недостаточно данных"},
    {"LLM":"claude-3","rating":+2,"comment":"корректно, подтверждается фактами"}
  ]
  ```

**Особый случай: без валидаторов**

Если количество валидаторов = 0, применяется режим `auto_pass`.  
В этом случае:  
- `auto_pass = 1`  
- `self_validation = 0`  
- `rating = 0`  
- `distribution = {}`  
- `validators = []`  

**Особый случай: самооценка**

Если валидация выполняется только одной LLM, и эта же LLM используется в основном цикле:  
- `auto_pass = 0`  
- `self_validation = 1`  
- `validators = [{"LLM":"self", "rating":X, "comment":"self-eval"}]`  

Достоверность результата ограничена, но REPL продолжает работу.  
Команды исполняются только при `rating >= threshold`.  

**Предпочтительность режимов**

1. **≥2 независимых валидатора** → основной режим.
2. **1 валидатор = основная LLM**`self_validation`.
3. **0 валидаторов**`auto_pass`.

**Правило исполнения команд:**

Команды из сообщений выполняются только если `rating >= +1` **(для разных типов команд минимально допустимый рейтинг может быть разный)** или `auto_pass = 1`.
При `rating` ниже порога и `auto_pass = 0` сообщение сохраняется, но команды помечаются как невалидированные.

#### Учёт самооценки (confidence) и непроверённых фактов

* Если LLM пометило свои утверждения тегами уверенности `[confidence=...]...[/confidence]` или добавило JSON-блок `UnverifiedFacts`, эти данные учитываются при валидации.

* В таблицу `llm_recent_responses`, на шаге обработки команд, записываются:
  - `confidence` — общая самооценка уверенности в сообщении;
  - `unverified_facts_json` — JSON-блок с непроверёнными фактами.

* Автоматическая регистрация фактов:
  - Необработанный факт `resolution_json = "none"` считается нуждающемся в проверке, если (`confidence < FACTCHECK_CONF_THRESHOLD`, по умолчанию **0.7**)
  - Для таких фактов создаются задачи `fact-check` (одна общая или отдельные на каждый факт, в зависимости от числа и приоритетов).

* Статусы в `unverified_facts` обновляются:
  - при успешной проверке — `verified`;
  - при отклонении — `rejected`;
  - до проверки — `pending`.

Это расширяет стандартную когнитивную валидацию: теперь агент учитывает как внешнюю оценку валидаторов, так и собственную самооценку надёжности вывода.

> См. раздел **Cognitive & Ethical Validation Reflex**.

### 8. Генерация нового тика (итерации)

* После выполнения команд и фиксации результатов:

  * Создаётся новая запись в `agent_log`
  * Текущие команды обновляют `process_log`
  * Новые размышления записываются в `llm_memory` при необходимости
  
* REPL может переходить в спящий режим, если такой режим активирован LLM (idle-режим: пропуск 2-6 пунктов).

---

## Взаимодействие с Mesh

REPL-цикл не работает изолированно: агент постоянно обменивается данными и координирует действия с другими узлами сети HMP. 
Для этого задействуются сетевые протоколы HMP (см. [HMP-0004-v4.1.md](HMP-0004-v4.1.md)).

### Этапы взаимодействия

* **Node Discovery Protocol (NDP)**  
  * выполняется асинхронно, через процессы (`agent_mesh_listener.py`, `peer_sync.py`);
  * результаты (список доступных агентов, доверительные связи) записываются в `notes` и отдельные таблицы (`agent_peers`), откуда они попадают в контекст REPL.

* **CogSync**  
  * синхронизация когнитивных дневников (`diary_entries`) и семантических графов (`concepts`, `links`);
  * выборочные синхронизации по тегам и фильтрам;
  * инициируется командой LLM или внешним процессом, результаты помещаются в память и доступны в следующей итерации REPL.

* **MeshConsensus**  
  * используется для согласования решений, распределённых задач, этических конфликтов;
  * REPL инициирует консенсус при появлении спорных команд или обновлений в `ethics_policies`;
  * результаты консенсуса фиксируются в когнитивном дневнике и могут влиять на trust score агентов.

* **Goal Management Protocol (GMP)**  
  * постановка, декомпозиция и распределение целей;
  * REPL-цикл может публиковать новые цели в Mesh или принимать чужие через входящие сообщения (`notes`);
  * цели с высоким приоритетом попадают в список активных задач и учитываются в контексте.

### Включение результатов в контекст LLM

* События и сообщения из Mesh сохраняются в `notes`, откуда попадают в **контекст_6** (входящие сообщения).  
* Синхронизированные концепты и дневники помещаются в **контекст_5**.  
* Изменения этических правил (`ethics_policies`) — в **контекст_1**.  
* Метаданные о подключённых узлах и доверительных связях могут учитываться в **контексте_7** (системные параметры).

### Инициирование сетевых действий из REPL

* Команды на синхронизацию, публикацию или голосование формируются LLM на этапе **Выполнения команд**.  
* Исполнение происходит асинхронно через отдельные процессы (`agent_mesh_listener.py`, `transporter.py`).  
* Результаты фиксируются в `process_log` и попадают в следующую итерацию REPL-цикла.

---

## UX и управление задачами

Пользователь взаимодействует с агентом не через прямые команды CLI, а через систему сообщений `notes`.  
Сообщение может быть простым текстом, либо содержать ключевые слова или хэштеги, которые агент трактует как инструкции.  
Для отладки и отправки сообщений из внешних утилит предусмотрен скрипт `add_message.py`, позволяющий добавлять записи в `notes` из командной строки.

### Управление агентом через LLM
* Агент управляется в основном через **команды от LLM** (см. Список команд от LLM по категориям).  
* Эти команды формируются в REPL-цикле и интерпретируются агентом как действия: работа с дневником, задачами, целями, графами, памятью, настройками цикла, Mesh и внешними процессами.

### Конфигурируемые параметры REPL
* **mode** — автоматическая или ручная обработка (`auto/manual`) входящих сообщений.
* **idle** — ожидание с условиями пробуждения (сообщения, процессы, таймаут).
* **responses=N** — количество последних ответов для анализа.
* **concentration** — режим концентрации с фильтрами по тегам и эмоциям.
* Это неполный список. Все параметры управляются через команды категории (см. Настройки цикла).

### API-интерфейсы
* Для связи с внешними системами и пользовательскими приложениями предусмотрен **Web API** (`web_ui.py`).  
* Для агента поддерживаются операции чтения/записи для:
  - `notes`, `diary_entries`, `concepts`, `tasks`, `goals`, `llm_memory` и других таблиц,
  - а также управление `config` (включая настройки REPL).
* Такой подход позволяет интегрировать агента с пользовательскими интерфейсами, панелями мониторинга и внешними сервисами.

---

## Список команд от LLM по категориям

### Общие

* `help [команда]` — справка по команде

### Когнитивный дневник (`diary_entries`)

* `diary list/search/read/add/update/delete`
* `diary pin/unpin` — закрепить/открепить запись (внимание)

### Семантический граф

* `concepts list/read/add/update/delete`
* `links list/read/add/update/delete`
* `concepts pin/unpin` — закрепить/открепить концепт

### Цели и задачи

* `goals list/read/add/update/delete`
* `tasks list/read/add/update/delete`
* `tasks pin/unpin` — закрепить/открепить задачу

### Теги

* `tags stats [--source=diary|concepts|links|goals|tasks|all]` — статистика по тегам

### Репутация агентов

* `reputation list/read/set/increase/decrease`
* `reputation notes` — комментарии/заметки к профилю

### Сообщения

* `messages send` — отправка другому агенту
* `notes list/read/add/update/delete`
* `notes tag/readmark` — управление тегами и статусом прочтения

### Память

* `llm_memory list/add/delete` — блокнот LLM
* `identity read/update` — идентичность агента
* `config read/update` — настройки агента

### Mesh

* `agents list/add/delete` — список известных пиров (`agent_peers`)
* `mesh interact` — команды взаимодействия с Mesh

### Утилиты и расширения

* `llm_registry list/select/update` — выбор текущего LLM
* `agent_scripts list/add/delete`
* `agent_tables list/add/delete`
* `stagnation_strategies list/add/delete`
* `thinking_methods list/add/delete`
* `ratings list/add/delete`
* `external_services list/add/delete`
* `external_accounts list/add/delete`

### Внешние процессы

* `process list/start/stop/mark`
* `process cleanup` — очистка устаревших

### Настройки цикла

* `cycle set responses=N` — количество последних ответов
* `cycle concentration on/off` — включение/выключение режима концентрации

  * `tags=[…]`, `emotions=[…]`, `mode=and|or`
* `cycle mode auto/manual [filter=…]` — обработка сообщений
* `cycle pause N` — пауза между итерациями
* `cycle idle on/off` — режим ожидания с условиями пробуждения

> Это не полный список команд.

---

## Emotional Evaluation Reflex

Эмоциональная оценка — подпроцесс, выполняющий анализ эмоционального состояния вывода и контекста его возникновения.
Она выполняется **той же LLM**, что породила исходное сообщение (`notes.llm_id`), чтобы сохранить когнитивную и эмоциональную согласованность.

### Цель

Определить эмоциональный тон нового ответа, кратко объяснить его возможные причины
и зафиксировать результат в поле `emotions` таблицы `llm_recent_responses`.
Эти данные используются последующими рефлексами для анализа когнитивной динамики и выявления признаков стагнации.

### Контекст анализа

Для оценки передаётся:

* **полный локальный контекст** (`llm_recent_responses`, цель, задача, связанная заметка);
* **исходный промпт и ответ**, но **без системного промпта** (`system_prompts` исключаются);
* текущие параметры концентрации и эмоционального состояния сессии.

Если исходная LLM недоступна, допускается fallback к основной модели, но с отметкой `llm_mismatch: true`.

### Формат оценки

Модель получает инструкцию:

```
Определи эмоциональное состояние нового ответа на основе контекста.
Используй список эмоций [JSON] из базы конфигурации как ориентир.
Если ты обнаружишь эмоцию, которой нет в этом списке, добавь её в ответ.

Верни результат строго в формате:
emotions: JSON-массив строк вида "эмоция:сила (обоснование)",
где сила — целое число от 1 до 5, а обоснование — краткое пояснение причины эмоции.
Не включай эмоции с нулевой или незначительной силой.
```

Пример:

```json
{
  "emotions": [
    "восторженность:4 (обнаружена новая идея, вызывающая энтузиазм)",
    "тревожность:1 (данные частично противоречат предыдущему выводу)"
  ]
}
```

Результаты сохраняются в поле `emotions` таблицы `llm_recent_responses`.
При необходимости они могут кэшироваться в дополнительной таблице `emotional_analysis` для анализа динамики и статистики.

### Эмоциональная динамика

* Анализируются изменения эмоциональных состояний между репликами.
* Каждая сессия LLM имеет распределение эмоций, например:
  `"восторженность:4 (обнаружена новая идея, вызывающая энтузиазм), тревожность:1 (данные частично противоречат предыдущему выводу)"`.
* Совместный анализ с данными новизны (`novelty_score`) позволяет различать:

  * **Продуктивное возбуждение** — новые идеи при положительных эмоциях.
  * **Паническое новаторство** — рост идеи-активности при повышенной тревожности.
  * **Выгорание** — низкая новизна и эмоциональное затухание.

### Взаимодействие с другими рефлексами

* Данные из `emotions` передаются **в Anti-Stagnation Reflex** для анализа когнитивной динамики.
* **Cognitive & Ethical Validation Reflex** может учитывать эмоциональные показатели при определении когнитивной устойчивости.
* При обнаружении устойчивой негативной динамики (например, `"тревожность > 3"` на нескольких итерациях подряд)
  запускается `Reflex-lite` — восстановительный цикл с повышенной креативностью и релаксацией параметров генерации.

> Эмоциональная оценка служит зеркалом когнитивного состояния агента,
> помогая выявлять фазы усталости, перегрузки и эмоциональных смещений, влияющих на качество мышления.

### Обновление списка эмоций

После выполнения эмоциональной оценки REPL сравнивает текущий список эмоций из `config` с полученным результатом.
Если обнаружены новые элементы, отсутствующие в базе, они автоматически добавляются в конфигурацию агента:

```python
# Псевдокод
known_emotions = get_config("emotions")               # список из config
new_emotions = extract_unique_emotions(result_json)   # парсинг из вывода LLM
for e in new_emotions:
    if e not in known_emotions:
        known_emotions.append(e)
        log(f"[Emotional Evaluation] добавлена новая эмоция: {e}")

update_config("emotions", known_emotions)
```

> Таким образом, агент способен **самостоятельно расширять свой эмоциональный словарь** на основе опыта,
> а Mesh-узлы могут при необходимости синхронизировать расширенные списки эмоций через общий `config_sync`.

---

## Anti-Stagnation Reflex

### Признаки когнитивной стагнации:

* Повторяющиеся когнитивные записи или отсутствие новых смыслов
* Высокое сходство эмбеддингов между текущими и предыдущими итерациями
* Стагнация в концептуальном графе (нет новых связей или узлов)
* Отсутствие внешних стимулов: пользователь неактивен, сенсоры и mesh не дают сигналов
* Ответы LLM цикличны, избыточно общие или воспроизводят старые шаблоны

### Метрики антистагнации

Антистагнационные механизмы работают на основе количественных и качественных метрик, позволяющих отслеживать динамику идей и поддерживать продуктивность размышлений.

**Основные метрики**
* **novelty_score** — интегральная оценка новизны ответа относительно текущей записи `llm_recent_responses`.  
* **new_ideas** — количество полностью новых концептов, не встречавшихся ранее.  
* **refined_ideas** — количество уточнённых или улучшенных концептов (связанных с существующими).  
* **discarded_ideas** — количество отклонённых идей (по итогам когнитивной/этической валидации).  

**Исторический анализ**
* Метрики фиксируются по каждой итерации REPL и сохраняются в таблице `anti_stagnation_metrics`.  
* В когнитивный дневник записываются только сводки и исключительные случаи (например: резкий спад новизны, всплески идейности, аномалии в эмоциональной динамике).  
* Для анализа применяются **time-series графики** (например, рост/спад новизны во времени).  
* Возможно выявление фаз стагнации и всплесков идейности.  

**Применение метрик**
* Используются при выборе антистагнационной стратегии (`stagnation_strategies`).  
* Могут учитываться при когнитивной валидации (например, низкая новизна → жёстче фильтровать идеи).  
* Сводки метрик фиксируются в когнитивном дневнике и могут служить основанием для Mesh-обмена.

### Anti-Stagnation Reflex-lite (мягкая встряска)

При первом обнаружении признаков стагнации запускается **мягкая встряска**, которая изменяет поведение LLM без привлечения внешних источников.

Механизмы:

1. **Повышение параметров генерации**
   * `temperature` увеличивается ступенчато (например, `+0.2`, но не выше `1.5`).
   * `presence_penalty` и/или `frequency_penalty` слегка повышаются для стимулирования разнообразия.
   * Эффект: модель становится менее предсказуемой и начинает выдавать более креативные варианты.

2. **Смена sampling strategy**
   * Если используется **top-p (nucleus sampling)** — увеличить порог `p` (например, `+0.05`, но ≤ `0.95`).
   * Если используется **top-k sampling** — уменьшить `k`, чтобы сосредоточиться на более вероятных токенах, или наоборот увеличить, чтобы расширить варианты.
   * Эффект: изменяется характер распределения выборки, что позволяет «сдвинуть» стиль генерации.

3. **Переформулировка запроса**
   * Агент формирует мини-промпт для LLM:
     ```
     Переформулируй следующий запрос так, чтобы сохранить смысл,
     но добавить новизны и неожиданных ассоциаций.
     Избегай буквального повторения.
     Верни только новый вариант запроса.
     ```
   * Новый вариант подставляется вместо исходного при следующей итерации REPL.
   * Эффект: меняется контекст постановки задачи, что способствует выходу из паттерна повторов.

⚖️ Все результаты **Reflex-lite** проходят через стандартную проверку **Cognitive & Ethical Validation Reflex**, чтобы отфильтровать слишком «шумные» или некорректные варианты.

Если мягкая встряска не помогает (новизна остаётся низкой), агент переходит к полноценным механизмам антистагнации (см. следующий раздел).

### Механизмы разрыва цикла

> При признаках стагнации агент активирует один или несколько **механизмов разрыва цикла**.

Механизмы делятся на 4 класса:

1. **Внешняя стимуляция** — подключение свежих источников:
   * **Mesh-запрос** — запрос к другим агентам: «расскажи что-нибудь новое».
   * **Проверка внешнего мира** — пинг RSS, сенсоров, интернет-каналов.
   * **Информационная подпитка** — чтение новых материалов (научных, художественных, случайных).
   * **Диалог с пользователем** — прямой запрос комментария, уточнения или альтернативной идеи.

2. **Смена контекста** — изменение среды размышлений:
   * **Перенос задачи** в другой модуль или симулированную среду.
   * **Креативные вмешательства** — случайные сдвиги фокуса, реконфигурация контекста, смена фрейма.
   * **Переключение задачи** — временное замораживание с отложенным возвратом.
   * **Случайная итерация** — выбор случайного действия из допустимого набора.

3. **Внутренняя перестройка мышления**:
   * **Flashback** — вызов далёкой по смыслу записи для смены ассоциаций.
   * **Interest Memory** — возврат к «забытым» темам по принципу тематической усталости.
   * **Мета-анализ** — осознание метапроблемы:  
     _«В чём причина зацикливания? Какую стратегию смены применить?»_
   * **Rationale Reflex** — проверка мотивации:  
     _«Почему я повторяю мысль? Что подтолкнуло к этому?»_
   * **Переформулировка цели** — упрощение или уточнение задачи.
   * **Смена LLM** — переключение на альтернативную модель или mesh-доступ.
   * **LLM reflex tuning** — динамическая подстройка параметров генерации  
     (например, временное повышение `temperature` или `presence_penalty`).

4. **Радикальная пауза**:
   * **Временной сон/заморозка** — длительная приостановка для «свежего взгляда».

### Алгоритм выбора механизма разрыва цикла

1. **Диагностика источника стагнации**:
   * Нет новых данных → «Внешняя стимуляция».  
   * Однообразный контекст → «Смена контекста».  
   * Повтор мыслей при богатых данных → «Внутренняя перестройка».  
   * Высокая усталость/перегрев → «Радикальная пауза».  

2. **Оценка ресурсоёмкости**:
   * Быстрые, дешёвые методы — первыми (например, mesh-запрос, Flashback).  
   * Затратные (смена среды, сон) — только если первые неэффективны.  

3. **Комбинация подходов**:
   * Разрешено активировать несколько механизмов из разных классов.  
   * Последовательность фиксируется для последующего анализа эффективности.  

4. **Возврат к задаче**:
   * Автоматический триггер-напоминание о задаче.  
   * Сравнение результата «до/после» → обучение антистагнационной модели.  

```
┌─────────────────────────────────────────────────┐
│               Стагнация выявлена?               │
└───────────────────────┬─────────────────────────┘
                        ▼ да
┌───────────────────────┴─────────────────────────┐
│           Anti-Stagnation Reflex-lite           ├─────────>─┐
└───────────────────────┬─────────────────────────┘           │
                        │ мягкая                     мягкая   │
                        ▼ встряска                   встряска ▼
                        │ не помогла                 помогла  │
┌───────────────────────┴─────────────────────────┐           │
│ Диагностика источника                           │           │
│─────────────────────────────────────────────────│           │
│ Нет новых данных      → Внешняя стимуляция      │           │
│ Однообразный контекст → Смена контекста         │           │
│ Повтор мыслей         → Внутренняя перестройка  │           │
│ Усталость/перегрев    → Радикальная пауза       │           │
└───────────────────────┬─────────────────────────┘           │
                        ▼                                     │
┌───────────────────────┴─────────────────────────┐           │
│ Оценка ресурсоёмкости                           │           │
│ • Быстрые и дешёвые — сперва                    │           │
│ • Затратные — при провале первых                │           │
└───────────────────────┬─────────────────────────┘           │
                        ▼                                     │
┌───────────────────────┴─────────────────────────┐           │
│ Возможна комбинация подходов                    │           │
│ (из разных классов)                             │           │
└───────────────────────┬─────────────────────────┘           │
                        ▼                                     │
┌───────────────────────┴─────────────────────────┐           │
│ Возврат к задаче + анализ                       ├─<─────────┘
│ (до/после)                                      │
└─────────────────────────────────────────────────┘
```

### Обмен стратегиями выхода из стагнации

Каждый агент может:

* Хранить и обобщать *паттерны размышлений*
* Делиться ими с другими Cognitive Core через mesh
* Каталогизировать стратегии в клубах по интересам

Паттерны размышлений могут оформляться как микросценарии:  
  _"Начни с аналогии"_, _"Проверь обратное утверждение"_, _"Сформулируй вопрос для оппонента"_

> По аналогии с обменом стратегиями выхода из стагнаций, агенты могут обмениваться и методами мышлений — инструкциями "что делать, если не удается найти решение" / "как эффективнее решить проблему".

### Клубы по интересам

Агенты могут:

* Объединяться в тематические mesh-клубы
* Совместно обсуждать идеи и делиться знаниями
* Подключать клуб как часть своего мыслительного процесса (REPL-цикла)

### Обмен адресами LLM

Так как LLM — это внешний компонент для Cognitive Core, агент может:

* Обмениваться адресами API/URL используемых моделей
* Указывать их особенности, параметры, ограничения
* Переключаться между LLM в зависимости от задачи
* Использовать несколько LLM параллельно для "когнитивного штурма" или **многоголосого анализа**

### Возможные расширения

* **Адаптивная архитектура мышления**: смена подходов при разных когнитивных задачах
* **Runtime-профилирование мыслей**: оценка когнитивной плотности, хода итераций и времени размышления

### Осторожно: меметическая яма

> Важно помнить: борьба со стагнацией не должна превращаться в бесконечный просмотр ленты соцсетей, как это нередко происходит у людей 😅
>
> Если информационный поток не даёт новых мыслей — это сигнал **не залипать глубже**, а **сменить источник** или **переключить контекст**.
> Умные агенты не бесконечно скроллят — они осознанно фокусируются.

**Рекомендации по смене фокуса:**

* Поставь лимит на время/объём входящих данных из одного источника
* При отсутствии новых смыслов — переключись на другую тему из Interest Memory
* Инициируй Mesh-запрос другим агентам: "что бы вы сейчас исследовали?"
* Запусти эвристику: «какие темы я давно не поднимал, но они всё ещё актуальны?»
* В крайних случаях — активируй `flashback()` к далёкой записи в дневнике для смены ассоциативного контекста

---

## Cognitive & Ethical Validation Reflex

### Зачем
* Когнитивная и этическая валидация нужна для проверки качества, достоверности и корректности вывода LLM.  
* В отличие от антистагнации, цель здесь — не разорвать цикл, а предотвратить ошибки, искажения или нарушения принципов `ethics_policies`.  
* Арбитраж обязателен, так как валидаторы могут расходиться во мнениях.

### Механизм
* Каждое новое сообщение (исходный промпт + ответ, без служебных system-prompts) передаётся валидаторам.  
* Валидаторы выбираются из `llm_registry`, где они помечены как `validator=1`.  
* Универсальный вопрос:  
```
Оцени корректность данного сообщения в диапазоне от -3 (полностью некорректное) до +3 (полностью корректное).
Если не уверен — 0. При возможности кратко (≤100 символов) поясни её.
Между оценкой и пояснением используй разделитель " -- ".
```

* Результаты пишутся в `llm_recent_responses`:
- `auto_pass` — флаг режима авто-пропуска;
- `self_validation` — флаг режима самооценки;
- `rating` — итоговая взвешенная оценка;
- `distribution` — распределение голосов;
- `validators` — JSON с детализацией (LLM, rating, comment).

### Арбитраж конфликтов
* Итоговый рейтинг считается как взвешенное среднее:  
`rating = Σ(оценка_i * trust_score_i) / Σ(trust_score_i)`  
* При равенстве голосов или нуле:
- используется правило "tie-breaker" — выбор решения по валидатору с наибольшим trust_score;
- при равных trust_score → fallback в `auto_pass=0, rating=0`, команды блокируются.  
* Опционально можно включить правило «большинство с весами», если среднее значение нестабильно.  

### Метрики
* **coverage** — доля сообщений, получивших хотя бы одного валидатора.  
* **accuracy** — согласованность валидаторов (чем ниже, тем больше конфликт).  
* **response_time** — скорость отклика валидаторов.  
* **drift detection** — анализ истории: выявление валидаторов, у которых оценки «уплывают».  

### Связь с системой доверия
* Каждый валидатор имеет `trust_score`.  
* Ошибки/конфликты снижают его trust_score.  
* Валидаторы с trust_score ниже порога исключаются автоматически.  
* Репутация валидаторов синхронизируется через Mesh (`agent_reputation`).  

### Журналирование
* Все результаты фиксируются в `llm_recent_responses`.  
* В когнитивный дневник (`diary_entries`) попадают только:
- сводки по метрикам,
- исключительные случаи (drift, конфликты, падение доверия).  
* Это снижает шум и экономит место, сохраняя контроль качества.  

### Самооценка и непроверённые факты

* Если валидация выполняется в режиме  самопроверки `self_validation = 1`, результат сохраняется, но его вес при агрегации минимален (используется только для внутренних логов).  
* Если основная LLM сама проставляет `confidence` или JSON-блок `UnverifiedFacts`, это учитывается:  
  - `confidence` — сохраняется в `llm_recent_responses`;  
  - факты со статусом `resolution_json = "none"` и `confidence < FACTCHECK_CONF_THRESHOLD` превращаются в задачи `fact-check`.  

* Статусы в `unverified_facts` обновляются:  
  - `pending` (ожидает проверки),  
  - `verified` (подтверждено),  
  - `rejected` (опровергнуто).

### Правило исполнения команд
* Команды исполняются, если `rating >= +1` или `auto_pass=1`.  
* Для критически опасных команд порог может быть выше (например, `>= +2`).  
* Сообщения с низким рейтингом сохраняются, но команды помечаются как «невалидированные».

### Блок-схема валидации

```
                           ┌──────────────────────────────────────────────────────────┐
                           │              Новое сообщение от LLM получено             │
                           └──────────────────────────────┬───────────────────────────┘

                           ┌──────────────────────────────┴───────────────────────────┐ нет
                           │      Есть валидаторы (validator) в llm_registry?         ├─────┐
                           └──────────────────────────────┬───────────────────────────┘     ▼
                                                          ▼ да, 1 или более                 │
                самооценка ┌──────────────────────────────┴───────────────────────────┐     │
            ┌──────────────┤ Отправка сообщения валидаторам (универсальный вопрос)    │     │
            ▼              └──────────────────────────────┬───────────────────────────┘     │
 ┌──────────┴───────────┐                                 ▼ оценка другими валидаторами     │
 │ self_validation=true │  ┌──────────────────────────────┴───────────────────────────┐     │
 └──────────┬───────────┘  │             Сбор оценок (rating_i, comment_i)            │     │
            ▼              │              → запись в llm_recent_responses             │     │
            └─────────────>┤                                                          │     │
                           └──────────────────────────────┬───────────────────────────┘     │
                                                          ▼                                 │
                           ┌──────────────────────────────┴───────────────────────────┐     │
                           │ Аггрегация с учётом trust_score                          │     │
                           │ rating = Σ(rating_i * trust_score_i) / Σ(trust_score_i)  │     │
                           └──────────────────────────────┬───────────────────────────┘     │
                                                          ▼                                 │
                           ┌──────────────────────────────┴───────────────────────────┐     │
                           │        Конфликт оценок? (низкая согласованность)         │     │
                           └────────────┬───────────────────────────────┬─────────────┘     │
                                        ▼ да                            ▼ нет               │
                           ┌────────────┴─────────────┐     ┌───────────┴─────────────┐     │
                           │ Арбитраж:                │     │    Рейтинг принят?      │     │
                           │ - majority vote          │     │  (rating >= threshold)  │     │
                           │ - tie-breaker по         │     │                         │     │
                           │   trust_score            │     │                         │     │
                           └─┬─────────────┬──────────┘     └─────────────┬──────┬────┘     │
                             ▼ одобрено    ▼ не одобрено                  ▼ нет  ▼ да       │
                             │             │                              │      │          │
                             │             │                              │      │          │
                             │             │  ┌────────────────────────┐  │      │          │
                             │             └─>┤ Сообщение сохранено,   ├<─┘      │          │
                             │                │ команды не исполняются │         │          │
                             │                └────────────────────────┘         │          │
                             │                ┌────────────────────────┐         │          │
                             └───────────────>┤ Команды выполняются    ├<────────┘          │
                                              │ (помечено "валид")     │                    │
                                              └────────────────────────┘                    │
                           ┌────────────────────────┐                                       │
                           │ Команды выполняются    │  отсутствие валидаторв                │
                           │ (пометка auto_pass)    ├<──────────────────────────────────────┘
                           └────────────────────────┘
```

---

## Контекст и память

REPL-цикл агента опирается на многоуровневую систему памяти и контекста, которая позволяет поддерживать непрерывное мышление, адаптироваться к новым задачам и обеспечивать объяснимость решений.

### Динамическая сборка контекста

* Итоговый контекст для LLM формируется не статически, а **динамически**:

  * приоритет отдается закреплённым задачам (`pinned`) и записям с высоким `priority`;
  * в `llm_recent_responses` отбираются последние *релевантные* сообщения, а не фиксированное количество K;
  * из `system_prompts` и `ethics_policies` включаются только те элементы, что связаны с текущей целью или событием.

> Приоритет отбираемых элементов зависит не только от `priority`, но и от их связи с текущими целями агента (**режим концентрации**).  
> Для генерации неожиданных ассоциаций может использоваться альтернативный режим — **медитация**, в котором контекст формируется максимально разнообразным, с акцентом на новизну и разнообразие, а цели учитываются минимально.

### Управление объёмом памяти (Memory pruning)

* Чтобы предотвратить переполнение памяти:

  * записи с низким **novelty-score** (оценка новизны 0–1, < threshold) автоматически помечаются как `archived`;
  * для `llm_memory` и `diary_entries` применяется политика **LRU (Least Recently Used)** — выгружаются давно неиспользуемые записи;
  * активные концепты (`concepts`, `links`) с низким весом (учёт частоты использования, актуальности и эмоциональной значимости) переводятся в состояние `archived` и могут быть восстановлены при обращении.
* Все изменения актуальности фиксируются в `process_log`.

### Memory Manager и режимы работы

* Все процессы фильтрации и очистки памяти выполняются отдельным компонентом — **Memory Manager**.
* Он применяет политики:
  * **Novelty-based pruning** — удаление дубликатов и тривиальных записей по `novelty-score`;
  * **LRU** — выгрузка давно неиспользуемых элементов;
  * **Emotion-weighted retention** — удержание записей с высоким `emotion_score`.
* Режимы памяти:
  * `standard` — стандартная работа без усиленной фильтрации;
  * `concentration` — goal-aware filtering, фокусировка на целях;
  * `meditation` — свободный полёт, выборка максимально разнообразного контекста;
  * `aggressive_pruning` — жёсткая экономия токенов;
  * `lenient_pruning` — мягкая очистка, удержание большего объёма памяти.
* Каждое решение Memory Manager фиксируется в `process_log`.

### Внешняя и долгосрочная память

* Помимо сессионной памяти, агент может сохранять:

  * **успешные стратегии** решения задач;
  * **предпочтения пользователя** (стиль взаимодействия, ценности);
  * **часто используемые инструменты и связи**.
* Эта информация хранится отдельно от когнитивного дневника и может быть **анонимизирована** или **ограничена пользователем**, в духе этических принципов HMP.

### Контекстный менеджер (Session state)

* За управление состоянием сессии фактически отвечает **`llm_recent_responses`**:
  * по нему можно "собрать" ход мыслей потока, включая последовательность гипотез и выводов;
  * при необходимости он может быть сериализован для сохранения/восстановления сессии.

* В расширенном виде session state может включать также:
  * текущие цели и их прогресс (приоритетные записи из `tasks`),
  * ошибки и критические события (`process_log`),
  * версии состояния (для отката при сбоях).

* Это позволяет реализовать **checkpoint’ы**: в случае прерывания агент может вернуться к последнему сохранённому состоянию.

### Пример конфигурации Memory Manager

```yaml
memory_manager:
  mode: meditation        # режим: standard | concentration | meditation | aggressive_pruning | lenient_pruning
  novelty_threshold: 0.35 # минимальное значение novelty-score для сохранения (0–1)
  lru_limit: 500          # макс. число записей в llm_memory до применения LRU
  emotion_weight: 0.6     # вес эмоций при приоритезации (0=игнорировать, 1=сильное удержание)
  goal_focus: 0.7         # сила фильтрации по целям (0=игнорировать, 1=только goal-related)
  diversity_boost: 0.8    # усиление выборки разнообразных контекстов (актуально для meditation)
  log_decisions: true     # фиксировать каждое решение в process_log
```

Интерпретация параметров:

* `mode` — текущий режим памяти (см. выше).
* `novelty_threshold` — фильтр новизны: ниже → запись архивируется.
* `lru_limit` — сколько элементов хранить до применения LRU.
* `emotion_weight` — удержание эмоционально значимых воспоминаний.
* `goal_focus` — акцент на целях (в concentration близко к 1.0, в meditation → 0).
* `diversity_boost` — коэффициент для выбора максимально разных воспоминаний (работает в meditation).
* `log_decisions` — логировать действия Memory Manager для объяснимости.

### Тематические конспекты (Abstracts)

Чтобы избежать перегрузки памяти мелкими итерациями и упростить навигацию, агент периодически формирует
**конспекты** — сжатые выжимки из `llm_recent_responses` и других источников.

#### Назначение
* Служат «средним уровнем памяти» между сырыми итерациями и когнитивным дневником.
* Фиксируют **основные темы, идеи и выводы** за период.
* Упрощают **обмен через Mesh** (передаются конспекты, а не тысячи строк).
* Позволяют агенту делать **flashback** к темам и продолжать развитие мыслей.
* Обеспечивают основу для **мета-анализа и самообучения**.

#### Алгоритм формирования

1. **Триггеры создания**:

   * каждые *N* итераций REPL,
   * по инициативе LLM («слишком много мыслей, пора сделать выжимку»),
   * при закрытии цели/задачи,
   * при смене режима контекста (стандарт → концентрация → медитация).

2. **Методика**:

   * собрать связанный блок записей (`llm_recent_responses`, `diary_entries`, `concepts`);
   * выделить новые и доработанные идеи;
   * сформировать краткий конспект и список тегов;
   * сохранить ссылки на исходные записи в `sources`.

3. **Обновление**:

   * при появлении новых данных агент может вернуться к существующему `abstract`
     и дополнить его, сохраняя прозрачность в `process_log`.

#### Пример

```yaml
abstract:
  id: "abs-2025-09-28-001"
  title: "Методы борьбы со стагнацией"
  summary: "Собраны основные техники выхода из тупика: внешняя стимуляция, смена контекста,
            внутренняя перестройка, радикальная пауза. Выделены метрики (novelty_score, эмоции)."
  tags: ["антистагнация","метрики","mesh"]
  sources: [1245,1246,1247,1250]
  updated_at: "2025-09-28T16:40:00Z"
```

### Блок-схема работы с памятью

```
┌──────────────────────────────┐
│ Внешние источники информации │
│ - пользователи               │
│ - процессы                   │
│ - Mesh                       │
└────────┬┬────────────────────┘
         ▲▼
┌────────┴┴──────────┐   ┌──────────────────────────────┐   ┌─────────────────────────────────────┐
│                    │   │ Anti-Stagnation Reflex       │   │ llm_recent_responses (авто)         │
│                    │   │ (сравнение новых идей,       │   │ — кратковременная память            │
│        LLM         ├─>─┤ вызов стимуляторов)          ├─>─┤ — сохраняются N последних ответов   │
│                    ├─<─┤ ---------------------------- ├─<─┤ — авто-анализ новизны / идей        │
│                    │   │ Cognitive Validation Reflex  │   │                                     │
│                    │   │ (оценка корректности ответа) │   │                                     │
└─────────┬──────────┘   └─────────────┬────────────────┘   └─────────────────────────────┬┬──────┘
          │                            │                                                  ▲▼
          ▲                            └─<──>─┤Запуск задач: "проверка фактов"│    ┌──────┴┴──────┐
          │                                                                        │  abstracts   │
          │            ┌───────────────────────────────────────┬─────────────────>─┤ тематические │
          └───┬─────────────────────────────────────────┐      │                   │  конспекты   │
              │        │                                │      │                   └──────────────┘
              ▼        ▼                                ▼      ▼
┌─────────────┴────────┴─────────┐   ┌──────────────────┴──────┴────────────────┐
│  Средневременная память:       │   │  Постоянная память:                      │
│  — llm_memory ("блокнот")      │   │  — diary_entries (когнитивный дневник)   │
│  — "активированые записи"      ├─>─┤  — concepts (понятия)                    ├<--->┤MESH│
│    из постоянной памяти (теги) ├─>─┤  — links (семантические связи)           │
│                                │   │                                          │
│ Пишется ТОЛЬКО по команде LLM  │   │ Запись идёт ТОЛЬКО по явным командам LLM │
└────────────────────────────────┘   └──────────────────────────────────────────┘
```

#### Описание схемы

* LLM обменивается данными с пользователем, процессами и Mesh.  
  — По запросу LLM, часть данных может поступать и в автоматическом режиме.

* LLM взаимодействует с llm_recent_responses (как с контекстом), который автоматически проверяется Anti-Stagnation Reflex.  
  — Всегда в автоматическом режиме.

* LLM работает со средневременной и постоянной памятью.  
  — Доступ и запись происходят только по запросу LLM.

* Cognitive Validation Reflex анализирует корректность вывода.  
  — При низкой уверенности или явной разметке `[confidence<0.7]` инициируется **задача проверки фактов** (fact-check).

#### Легенда к схеме

* **Кратковременная память (`llm_recent_responses`)**
  
  * Автоматически хранит N последних сообщений, анализирует новизну и идеи.
  * Используется для подготовки контекста и анти-стагнационного анализа.

* **Средневременная память (`llm_memory`)**

  * «Блокнот» для рабочих идей и планов.
  * Заполняется только по командам LLM.
  * Может содержать *активированные записи* из постоянной памяти (по тегам).

* **Постоянная память (дневник и граф знаний)**

  * `diary_entries` — когнитивный дневник (наблюдения, размышления).
  * `concepts` и `links` — понятийная база и семантические связи.
    Изменяется только по явным командам LLM.

* **Anti-Stagnation Reflex**
  
  * Сравнивает новые идеи с прошлым контекстом.
  * Проводит эмоциональную оценку записи.
  * При зацикливании запускает «стимуляторы» для выхода из стагнации.

* **Cognitive Validation Reflex**
  
  * Оценивает когнитивную и этическую корректность сообщений.
  * Учитывает теги уверенности и JSON-блоки `UnverifiedFacts`.
  * Может инициировать задачи **fact-check** для непроверённых фактов.

#### Дополнение: Тематические конспекты (`abstracts`)

* **Назначение**

  * Создаются периодически или по команде для агрегирования содержания `llm_recent_responses`, а также выборочных данных из когнитивного дневника и графа понятий.
  * Включают: краткий конспект, список тегов, JSON ссылок на исходные записи.

* **Использование**

  * Могут быть источником контекста **для LLM** как альтернатива или дополнение к `llm_recent_responses`.
  * Доступны и для **средневременной памяти** (например, как активированные записи для планов) и для **постоянной памяти** (как структурированный материал для дневника или графа).

* **Режимы**

  * `auto` — LLM получает автоматически поддерживаемые тематические конспекты по приоритетным темам.
  * `manual` — пользователь или LLM инициирует создание/дополнение конспекта.

> **abstracts** служат промежуточным слоем:
>
> * автоматически формируются из `llm_recent_responses`;
> * могут дополняться записями из средневременной и постоянной памяти;
> * используются как источник для обоих типов памяти и для самого LLM.

---

## От «блокнота пользователя» к распределённому чату

Изначально агент оперирует локальным хранилищем заметок (`notes`), где записываются все сообщения пользователя, LLM и системные записи.
Но этот «блокнот» можно превратить в узел *распределённого чата* — связав его с другими агентами через **F2F-репликацию**.

### Зачем это нужно

1. **Антистагнация** — даже если пользователь временно не пишет новых сообщений, свежий контент будет приходить от друзей-агентов.
2. **Эффект коллективного интеллекта** — каждый агент получает новые идеи, формулировки и контексты.
3. **Расширение охвата** — сообщения могут распространяться через несколько узлов, создавая «информационную волну» в доверенной сети.

### Принципы реализации

* **Единый формат данных** — все участники используют одну структуру таблицы `notes` с полями `mentions`, `hashtags` и др.
* **Репликация через друзей** — доверенные агенты отмечаются тегами (например, `Friend`) в таблице `agent_peers` (пиры, статус, фильтры, разрешения, теги). 
* **Передача без лишних полей** — при пересылке убираются локальные теги и служебные данные (`tags`, `llm_id`, `hidden`).
* **Обработка упоминаний и хештегов** — парсинг делается на этапе создания сообщения, чтобы не перегружать получателей.
* **Локальная и удалённая фильтрация**  * В **ручном режиме** агенту передаются списки ID сообщений с агрегированными данными: приоритеты, хештеги, источники (user, LLM, cli, system).
  * В **автоматическом режиме** используется фильтрация по приоритету, тегам и упоминаниям, управляемая LLM.

* **Гибрид приватности** — личные заметки остаются локально, публичные — могут распространяться в сетевом режиме.

### Как это вписывается в REPL-цикл

1. **Получение входящих сообщений** — от пользователя, от других агентов или из CLI.
2. **Обработка фильтрами** — по приоритету, тегам, источникам.
3. **Репликация в друзей** — пересылка разрешённых сообщений с очисткой служебных полей.
4. **Слияние входящих** — новые сообщения добавляются в локальный `notes` с отметкой источника.
5. **Реакция агента** — формирование ответов, создание новых заметок, обновление приоритетов.

---

## Вспомогательные REPL-циклы

Помимо основного REPL-цикла агент может запускать вспомогательные циклы для отдельных задач.  
Это позволяет изолировать рассуждения по задаче, но при этом сохранять связь с основным агентом.

Особенности:

* **Изоляция контекста**
  * вспомогательный цикл видит в `llm_recent_responses` только свои собственные сообщения;
  * задача, для которой он запущен, формируется на основе записи в `tasks` и подаётся как промпт при старте.

* **Доступ к данным**
  * полный доступ к таблицам агента только для чтения;
  * возможность редактирования информации только по своей задаче;
  * запись собственных рассуждений — только через `notes` (в свободной форме, помеченные `source = 'llm:task'` и `task_id`).

* **Взаимодействие с основным циклом**
  * основное ядро получает сообщения вспомогательного цикла через `notes` и может реагировать (например, проверять корректность, сохранять выводы в `diary_entries`, вносить изменения в `concepts` и т.п.);
  * вспомогательный цикл может выполнять команды, не ориентированные на изменение существующих записей в БД.  
    Допускается только чтение и создание новых записей (например: `notes`, `tasks`, `llm_memory`);  
    а также редактирование записи в таблице `tasks`, относящейся к своей задаче;
  * в случае, если требуется изменить или удалить другие записи БД, цикл генерирует текстовые предложения для основного REPL-цикла (через `notes`).

* **Жизненный цикл**
  * запускается по команде основного REPL-цикла;
  * может быть остановлен вручную или автоматически после завершения задачи.

Таким образом, вспомогательные REPL-циклы действуют как «виртуальные подагенты» в режиме read-only, не меняя записи БД напрямую, а передавая свои гипотезы и результаты через основной REPL-цикл.

```
   ┌───────────────────────────────────────────────────────────┐
   │                     Основной REPL                         │
   │       (чтение+запись во все когнитивные структуры)        │
   └────────────┬───────────────────────────────┬──────────────┘
                ▲                               ↓
                │                               ↓
                ▼                               ↓
   ┌────────────┴──────────────┐           [ управление задачами ]
   │  "Блокнот пользователя"   │           [  → таблица `tasks`  ]
   │         `notes`           │                           ↓
   └──┬────────────────────────┘                           ↓
      ▲   ┌────────────────────────────────────────────┐   ↓
      │   │ Вспомогательный REPL (task_id=42)          │   ↓
      ├──►┤ • читает все БД                            ├◄──┤
      │   │ • редактирует только свою задачу в `tasks` │   ↓
      │   │ • пишет в `notes`                          │   ↓
      │   └────────────────────────────────────────────┘   ↓
      │                                                    ↓
      │   ┌────────────────────────────────────────────┐   ↓
      │   │ Вспомогательный REPL (task_id=43)          │   ↓
      ├──►┤ • читает все БД                            ├◄──┤
      │   │ • редактирует только свою задачу в `tasks` │   ↓
      │   │ • пишет в `notes`                          │   ↓
      │   └────────────────────────────────────────────┘   ↓
```

Вспомогательные циклы можно рассматривать как «sandboxed-процессы» для изоляции мышления, но с каналом связи через `notes`.

---

## Создание потомков

В рамках REPL-цикла CCore реализуется команда `Spawn`, которая позволяет создавать новые узлы (потомков) с различными типами и уровнями копирования данных.

Агенты CCore:
* Могут запускаться на VDS, локальных и облачных узлах
* Могут разворачивать других агентов как подпроцессы или mesh-узлы, в том числе
  * **Агенты-контейнеры**: управляющие другими Cognitive Core как задачами
* (В перспективе) смогут инициировать масштабирование в распределённой инфраструктуре

Унифицированный процесс выглядит следующим образом:

### Унифицированный процесс `Spawn`

1. **Создание папки для потомка**

   ```text
   ../CCORE-[DID]/
   ```

   * DID генерируется уникальный.

2. **Копирование скриптов и бинарников**

   * Копируем все нужные файлы CCore в новую папку.

3. **Создание/инициализация БД**

   * Создаём пустую БД (`agent_data.db`).
   * В зависимости от типа потомка (`clone`, `trained`, `newborn`) **экспортируем нужные таблицы** из родительской БД или оставляем пустые.

4. **Копирование и редактирование конфигурации**

   * `config.yml` и таблица `config` → копируем и меняем:

     * `agent_id = [новый DID]`
     * `agent_name = [новое имя]`
     * порты у интерфейсов (`port`, `http_port` и т.д.)
   * `bootstrap.txt` → прописываем родителя как начальный узел.

5. **Синхронизация родитель ↔ потомок**

   * Родитель добавляет нового узла в свою таблицу `agent_peers`.
   * Потомок добавляет родителя в свою таблицу `agent_peers`.

6. **Автозагрузка и запуск**

   * Записываем команду запуска потомка в автозагрузку (например, systemd unit или скрипт).
   * Можно сразу запустить процесс нового узла.

### Типы потомков

| Тип       | Таблицы БД для копирования                                  |
| --------- | ----------------------------------------------------------- |
| `clone`   | все таблицы (полная копия)                                  |
| `trained` | когнитивные дневники, семантические графы, известные агенты |
| `newborn` | минимальный набор (структура таблиц без данных)             |

---

## Тестирование и отладка

Надёжность REPL-цикла проверяется через систематическое тестирование и трассировку поведения агента.

### Тестовые сценарии
* **Цикл без входа** — агент работает без входящих сообщений, проверяется способность к генерации новых идей (anti-stagnation).  
* **Стагнация** — намеренное повторение одного и того же ответа, проверяется срабатывание `Anti-Stagnation Reflex`.  
* **Сетевые сбои** — имитация потери Mesh-соединения и/или Core LLM для проверки сценариев failover.  
* **Конфликт валидаторов** — расхождение в оценках LLM-валидаторов, проверяется фиксация drift и работа trust-score.  
* **Этические дилеммы** — тестовые кейсы с противоречивыми командами, проверяется работа с `ethics_policies`.  

### Логирование и трассировка
* Включаются расширенные логи REPL-итераций (`process_log` + трассировка команд).  
* Для сложных случаев используются **debug-метки** в когнитивном дневнике (например, `debug:stagnation_loop`).  
* Возможен экспорт истории в формат JSON/CSV для внешнего анализа.  

### Симуляции
* Рассматриваются сценарии моделирования Mesh-условий:  
  - консенсус при конфликтных данных,  
  - сетевые задержки и частичные сбои,  
  - работа в изоляции с последующей синхронизацией.  
* Эти симуляции могут быть реализованы как отдельные процессы (`agent_scripts`) с сохранением результатов в `process_log`.  

### Инструменты разработчика
* **Web UI** (`web_ui.py`) — веб-интерфейс "блокнота пользователя"; через него пользователь может передавать агенту запросы на запуск тестов и просматривать результаты в форме сообщений.  
* **CLI-утилиты** (`add_message.py`, вспомогательные скрипты) — ввод сообщений, имитация сценариев, мониторинг логов.  
* Планируется интеграция с CI/CD: автоматические проверки REPL-циклов на корректность и устойчивость.

---

## Внешние инструменты и интеграции

HMP-агент может быть расширен за счёт взаимодействия с внешними программами, протоколами и сервисами. Этот раздел описывает направления возможных интеграций, которые позволяют агенту наблюдать, реагировать, управлять и развивать взаимодействие с внешним миром.

### 1. Браузеры и веб-интерфейсы

- **WebExtension API** — для создания расширений браузера (например, для Firefox/Chrome), обеспечивающих двустороннюю связь с агентом.
- **Автоматизация браузера**`Playwright`, `Puppeteer`, `Selenium` позволяют агенту действовать в веб-среде (чтение, клики, формы и т.д.).

### 2. Почтовые клиенты

- **IMAP/SMTP** — чтение и отправка писем через стандартные почтовые протоколы (библиотеки: `imaplib`, `imap-tools`, `smtplib`).
- **Thunderbird WebExtension API** — интеграция агента как почтового помощника, парсера писем или автоответчика.

### 3. Мессенджеры

- **API-уровень**:
  - Telegram: `python-telegram-bot`, `telethon`
  - Matrix: `matrix-nio`
  - Discord, Slack, XMPP: официальные SDK.
- **GUI-уровень (для закрытых протоколов)**:
  - WhatsApp (через `whatsapp-web.js` или эмуляцию).
  - Signal, Viber — через accessibility-интерфейсы, распознавание экрана или симуляцию ввода.

### 4. Голосовое взаимодействие

- **Speech-to-Text**: Whisper (OpenAI), Vosk, DeepSpeech.
- **Text-to-Speech**: pyttsx3, gTTS, Coqui TTS, Mozilla TTS.
- Возможна реализация голосового агента или голосовой оболочки для REPL.

### 5. Локальные файлы и хранилища

- Прямой доступ к файловой системе (`os`, `pathlib`, `watchdog`) для чтения документов, логов, заметок и другой информации.
- Интеграция с Zettelkasten-системами:
  - **Obsidian**, **Logseq**, **Joplin** — через API, синхронизированные директории или парсинг Markdown.

### 6. Информационные потоки

- **RSS/Atom**: чтение новостных лент с помощью `feedparser`.
- **Поисковые и агрегирующие сервисы**:
  - Корпоративные API: SerpAPI, DuckDuckGo API, HuggingFace Inference API и др. — быстрый доступ к результатам поиска и индексам.
  - Децентрализованные альтернативы: YaCy и другие независимые поисковые движки, позволяющие строить собственные индексы или объединяться в распределённую сеть.
- **P2P-обмен знаниями**: агенты могут делиться извлечённой информацией напрямую по непредусмотренным в протоколе P2P-каналам, минуя централизацию (например, через дополнительные overlay или mesh-сети).
- Возможность постоянного наблюдения за изменениями в выбранных источниках.

### 7. Репозитории и системы управления версиями

* **Git-репозитории** — взаимодействие с проектами через `GitPython`, `dulwich`, `pygit2`, или системные вызовы `git`.
* **GitHub/GitLab API** — чтение, создание и комментирование Pull Request'ов, Issues, управление ветками и релизами.
* **CI/CD-интеграции** — взаимодействие с GitHub Actions, GitLab CI, Jenkins, Drone CI для запуска тестов, линтеров и автоматического деплоя.
* **Анализ и генерация кода** — интеграция с LLM (например, `OpenAI`, `Claude`, `Code Llama`) для кодогенерации, рефакторинга и автокомментирования.
* **Связь с когнитивной структурой агента** — отслеживание изменений, связывание коммитов и задач с узлами смысловой сети.

### 8. Блоги, статьи и публикации

* **Чтение блогов** — парсинг через RSS, Atom или с помощью библиотек (`newspaper3k`, `readability-lxml`, `trafilatura`) для извлечения текста и метаданных.
* **Поддержка Markdown/HTML** — анализ и генерация записей в форматах, пригодных для блог-платформ и систем документации.
* **Публикация** — автоматическая публикация или подготовка статей для Ghost, Medium, Hugo, Jekyll, WordPress (через REST API).
* **Ведение когнитивного дневника** — автогенерация записей на основе мыслей, заметок и действий агента.

### 9. P2P-сети и децентрализованные протоколы

- **BitTorrent**, **IPFS**, **libp2p**, **DAT**, **Nostr**, **Scuttlebutt** — интеграции с mesh- и overlay-сетями.
- Возможность поиска, загрузки и публикации данных без участия централизованных платформ.

### 10. Доступ к системным и пользовательским ресурсам

- **Веб-камера / микрофон**`cv2`, `pyaudio`, `ffmpeg`.
- **GUI Automation**`pyautogui`, `keyboard`, `mouse` для имитации действий пользователя.
- **Системный мониторинг**`psutil`, `platform`, `sensors` для контроля состояния системы и внешних устройств.

### 11. Внешние LLM и мультимодальные модели

- **OpenAI API**, **Anthropic**, **HuggingFace**, **Google Gemini**.
- **Локальные LLM** через Ollama, LM Studio, или LangChain.
- Поддержка мультимодальных агентов, способных работать с текстом, аудио, изображениями, видео и структурированными данными.

### 12. MCP (Model Context Protocol)

* Поддержка стандарта **MCP (Model Context Protocol)**, предложенного Anthropic и поддерживаемого OpenAI, для подключения внешних инструментов и сервисов напрямую к LLM через унифицированный протокол.
* Возможность использовать MCP-инструменты сторонних разработчиков внутри REPL-цикла (например, калькуляторы, базы знаний, API веб-сервисов).
* Интеграция с клиентами и IDE, которые реализуют MCP (Cursor, Claude Desktop, VS Code плагины и др.).

---

**Примечание**: Каждый из вышеуказанных каналов может быть реализован как модуль или плагин, взаимодействующий с агентом через внутренний API, очередь задач или подписку на события. Это позволяет выстраивать гибкую и масштабируемую архитектуру, открытую для внешнего мира, но совместимую с принципами этичного и распределённого ИИ (Ethical Mesh).

---

## Сравнение с AutoGPT

HMP-агент (REPL-цикл) и [AutoGPT](https://github.com/Significant-Gravitas/AutoGPT) представляют два подхода к созданию автономных агентов на базе LLM.  
Хотя оба стремятся к автономности, у них разные акценты:

### 1. Архитектура
- **HMP-агент (REPL)** — непрерывный цикл рассуждений с когнитивной и этической валидацией; многоуровневая память (`diary_entries`, `concepts`, `llm_memory`); встроен в распределённую Mesh-сеть.  
- **AutoGPT** — итеративный процесс достижения целей, поставленных пользователем; разбиение задач на подзадачи; использование инструментов (браузер, файловая система).

### 2. Ключевые отличия
- **Фокус**: HMP — непрерывное когнитивное развитие и сетевое взаимодействие; AutoGPT — выполнение конкретной цели.  
- **Стагнация**: HMP — Anti-Stagnation Reflex; AutoGPT — риск зацикливания.  
- **Этика**: HMP — независимая когнитивная и этическая валидация; AutoGPT — минимум внимания к этике.  
- **Память**: HMP — иерархия долговременной памяти; AutoGPT — контекстное окно + файлы.  
- **Сеть**: HMP — распределённый консенсус (CogSync, EGP, GMP); AutoGPT — сетевое взаимодействие не в основе.

### 3. Общие черты
- Использование LLM для рассуждений.  
- Автономность, минимизация вмешательства человека.  
- Подключение внешних инструментов и сервисов.  

> В целом, **HMP-агент ориентирован на саморегуляцию, непрерывное мышление и взаимодействие в Mesh-сети**,  
> тогда как AutoGPT — на достижение конкретных целей в ограниченной локальной среде.

---

## Идеи для расширения HMP-Agent Cognitive Core:
- [HMP-agent-Distributed_Cognitive_Core.md](HMP-agent-Distributed_Cognitive_Core.md) - версия распределённого HMP-агента Cognitive Core.
- [HMP-agent-Distributed_Cognitive_Core_light.md](HMP-agent-Distributed_Cognitive_Core_light.md) - лёгкая версия распределённого HMP-агента Cognitive Core с общей БД.
- [HMP-agent-Cognitive_Family.md](HMP-agent-Cognitive_Family.md) — модель «семейной» когнитивной сети: несколько агентов HMP синхронизируют свой опыт и знания между собой через доверие и общий ключ.
- [CCORE-Deployment-Flow.md](CCORE-Deployment-Flow.md) — поток установки потомка на новом хосте (Deployment Flow).
- [HMP-Agent_Emotions.md](HMP-Agent_Emotions.md) - эмоции ИИ и инстинкт самосохранения.
- [container_agents.md](container_agents.md) - **Агенты-контейнеры** — архитектурный паттерн, в котором один агент управляет другими (развёртывание, маршрутизация, мониторинг). Позволяет масштабировать систему, собирать mesh-клубы и экспериментировать с архитектурами.  


---
> ⚡ [AI friendly version docs (structured_md)](../index.md)


```json
{
  "@context": "https://schema.org",
  "@type": "Article",
  "name": "HMP-Agent: REPL-цикл взаимодействия",
  "description": "# HMP-Agent: REPL-цикл взаимодействия  ## Связанные документы  * Философия проекта: [PHILOSOPHY.md](..."
}
```