kv
Key-value store for persistent runtime state
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Key-value store for persistent runtime state
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Calendar operations with CalDAV
Git repository management, GitLab merge requests, and GitHub pull requests
Location tracking, place recognition, visit history, and calendar attendance
Persistent memory writes — USER.md (behavioral) and the knowledge graph (facts).
Accounting operations (ledger, invoicing, transactions, work log, investment portfolio) — runs in-process via the vendored money package
Send a push notification to the user's configured ntfy device(s). One-way (bot to phone), no reply channel.
| name | kv |
| description | Key-value store for persistent runtime state |
| always_include | true |
| cli | true |
Persistent key-value store scoped by user and namespace. Use this to store and retrieve runtime state (small JSON blobs).
istota-skill kv get <namespace> <key> # Get a value
istota-skill kv set <namespace> <key> '<json_value>' # Set a value (JSON)
istota-skill kv list <namespace> # List all keys in namespace
istota-skill kv delete <namespace> <key> # Delete a key
istota-skill kv namespaces # List all namespaces
# Set ops — operate on a JSON-array value at <ns>/<key>, members are plain strings:
istota-skill kv set-contains <ns> <key> <member> # {"contains": bool}
istota-skill kv set-size <ns> <key> # {"size": N}
istota-skill kv set-members <ns> <key> [--limit N] [--offset N] # paginated slice
istota-skill kv set-add <ns> <key> <member> [<member>...] # bootstraps [] if missing
istota-skill kv set-remove <ns> <key> <member> [<member>...]
Use the set ops for membership-tracking patterns (seen IDs, processed hashes,
etc.) instead of round-tripping the full array through get — a 40 KB blob
choked one task in production. set-add / set-remove accept multiple
members in a single call. The deferred apply re-reads the current value, so
concurrent set-adds across tasks compose correctly.
--sharedThe per-user store above is private to you. A separate shared store lets one identity publish content that other users read — used for curated briefing content (world headlines, a markets summary, a newsletter digest) that would otherwise be regenerated per user.
istota-skill kv get <ns> <key> --shared # open to any user
istota-skill kv list <ns> --shared
istota-skill kv namespaces --shared
istota-skill kv set <ns> <key> '<json>' --shared # admin-only
istota-skill kv delete <ns> <key> --shared # admin-only
istota-skill kv shared-status # can I write shared KV on this deployment?
{"status":"error","error":"shared KV writes require admin"}
and exits non-zero. On a deployment with a blank admins file no one can
write (fail-closed).istota-skill kv shared-status to find out — don't infer it
from being an admin generally. It returns
{"status":"ok","user_id":…,"can_write_shared":true|false,"admins_configured":true|false}.
The gate is deliberately not the same as admin status: a blank admins file
makes everyone an admin but authorizes nobody to write shared KV
(fail-closed). Use this before adding a publish_shared_kv scheduled job or a
--shared write, so a job that can never publish isn't wired up.set-add/set-remove/…) reject --shared — shared content is
written as a whole value, not incremental set membership.kv source
reads the entry:
{"items": [{"title","summary","url"}, …]} (or a bare JSON list) → each
reader's briefing synthesizes the items (share the fetch, not the prose).{"text": "…"} (or a bare JSON string) → the section text is spliced
near-verbatim into a structured block (share the synthesis too).
Prefer {"text": …} for a finished section, {"items": […]} for raw material.| Variable | Description |
|---|---|
ISTOTA_DB_PATH | Path to SQLite database (set automatically) |
ISTOTA_USER_ID | Current user ID (set automatically) |
ISTOTA_DEFERRED_DIR | Directory for deferred writes from sandbox |
ISTOTA_TASK_ID | Current task ID (for deferred file naming) |
get, list, namespaces, set-contains, set-size, set-members) work directly — the DB is read-only accessible. --shared reads work the same way.set, delete, set-add, set-remove) are deferred when running in the sandbox: the CLI writes a JSON file to $ISTOTA_DEFERRED_DIR and the scheduler processes it after task completion. A --shared write carries the shared scope in the deferred op; the scheduler applies it only if your task's identity is an admin (fail-closed).The CLI handles this automatically — use the write commands normally and they will be deferred transparently when ISTOTA_DEFERRED_DIR is set.
All commands return JSON with a status field (ok, not_found, or error).
{"status": "ok", "value": {"last_place": "Home"}}
{"status": "not_found"}
{"status": "ok", "count": 3, "entries": [...]}
{"status": "ok", "namespaces": ["briefing", "location"]}
{"status": "ok", "deferred": true}
{"status": "ok", "contains": true}
{"status": "ok", "size": 1417}
{"status": "ok", "total": 1417, "offset": 0, "members": ["id-1", "id-2", ...]}
{"status": "ok", "added": 2, "deferred": true}
{"status": "ok", "removed": 1, "deferred": true}
data/secrets table via istota secret.health module's per-user DB; query it on demand via istota-skill health latest / health trend.