ChatGPT local-capture format
ki acquire import --adapter chatgpt accepts only a user-prepared local capture directory. It never signs in to ChatGPT, controls a browser, contacts a network service, reads a browser profile or credentials, discovers a repository, or extracts knowledge.
The capture is an input adapter, not a KEP. The importer validates it before creating the selected KEP output directory.
Use ki acquire import --adapter chatgpt --help for the exact command grammar supported by the installed version.
Layout
capture/
├── capture.toml
├── originals/
│ └── export.json
├── records/
│ └── conversation.md
├── assets/
│ └── attachment.png
└── relationships/
└── native.jsonl
originals/ and records/ each require at least one regular file. assets/ may be empty, but it must exist. Record paths must end in .md. Every path is relative, contains only letters, numbers, ., _, -, and /, and must not be a symbolic link or escape its directory.
Capture metadata
capture.toml must contain exactly these fields, in any order, with no extra fields:
format = "ki-chatgpt-capture"
format_version = "0.1.0"
capture_boundary = "One exported conversation: example-001"
omissions = ["No project membership was available"]
The capture boundary names the bounded material selected by the user. omissions is always present: use [] only when the capture has no known omission.
Source-native relationships
relationships/native.jsonl contains one compact JSON object per line. The importer accepts only these source-native forms:
{"type":"conversation-order","record":"records/conversation.md","position":1}
{"type":"message-asset","record":"records/conversation.md","asset":"assets/attachment.png","message_id":"message-001"}
{"type":"project-conversation","record":"records/conversation.md","project_id":"project-001"}
Every referenced record and asset must exist. conversation-order positions are unique. The importer sorts relationship records deterministically and rejects duplicate, blank, malformed, inferred, or semantic relationship records.
Result
The importer copies originals and assets byte-for-byte, places records below source/records/, normalises relationship record paths below source/records/, and creates the KIS-0002 kep.toml plus lexicographically ordered SHA-256 checksums. Repeating an import with identical capture content produces byte-identical KEP payloads and the same kep:sha256: identity.
Use --dry-run to validate and report the proposed package without creating the output directory.