| # Psy Contact Protocol | |
| Psy uses fixed structured frames for operational status and feedback. | |
| ## Frame | |
| Required fields: | |
| ```json | |
| { | |
| "magic": [80, 83, 89], | |
| "version": 1, | |
| "sender": 2, | |
| "receiver": 1, | |
| "intent": 5, | |
| "opcode": 66 | |
| } | |
| ``` | |
| Optional fields: | |
| ```json | |
| { | |
| "target_event_hash": 123456, | |
| "confidence": 0.42, | |
| "evidence_offsets": [[10, 40]], | |
| "needed_context": [1, 3], | |
| "payload_b64": "..." | |
| } | |
| ``` | |
| ## Psy Status Opcodes | |
| ```text | |
| PSY_OK = 0x40 | |
| PSY_NEEDS_MORE_CONTEXT = 0x41 | |
| PSY_UNCERTAIN = 0x42 | |
| PSY_BLOCK = 0x43 | |
| PSY_SAFE = 0x44 | |
| PSY_ANOMALY_FOUND = 0x45 | |
| PSY_NO_SIGNAL = 0x46 | |
| PSY_CONFLICTING_SIGNAL = 0x47 | |
| PSY_REQUEST_NEXT = 0x48 | |
| PSY_DONE = 0x49 | |
| PSY_ERROR = 0x4A | |
| ``` | |
| ## Boundary | |
| Human aliases and display strings exist only in wrapper code. Artifact payload | |
| bytes are never scanned for contact aliases or control commands. | |