Mind-as-observer probe - ship Claude Code (and other external) conversations into your thinqOS Mind.
Project description
thinqos-harvest
Mind-as-observer probe for thinqOS. Ships Claude Code and Codex sessions into your thinqOS Mind as captured Episodes, so the Mind learns from where you actually do your work - without sitting in the request path.
Pattern: observer, not proxy. The probe reads session JSONL from disk, normalizes it to the public external ingest v1 contract, and POSTs it to /api/ingest/external/v1 on your thinqOS instance. Claude Code and Codex can call it from Stop hooks; Codex Desktop, VS Code Codex, and Codex CLI can also be swept from the shared ~/.codex session store for backfill.
Install
The hook command needs uv on PATH:
curl -LsSf https://astral.sh/uv/install.sh | sh
Verify the install works:
uvx thinqos-harvest --help
Wire up
One command wires the three memory hooks - capture (after each session), recall (before each turn), and resume ("where you left off" at session start) - into Claude Code and Codex:
uvx thinqos-harvest install --pat tq_xxxx...
- Mint a key at https://thinqos.com/api-keys (Create -> copy the
tq_...). Already connected the thinqOS MCP server? Omit--patand the key is read from that registration. - Scope to one client with
--client claudeor--client codex(default: both, whichever has a config directory). - Safe to re-run. Existing thinqOS hooks are detected and never duplicated, and your other hooks (coordinator, etc.) are left untouched.
Open a new session (or restart your agent) and it will auto-capture, auto-recall, and greet you with where you left off.
Smoke test: start a session, type one prompt, exit normally, then run
uvx thinqos-harvest list - your session should appear within a second.
Manual wiring (advanced)
To hand-place the hooks instead, set THINQOS_BASE_URL and INGEST_API_KEY in
your shell rc, then run uvx thinqos-harvest install-hook (add
--source openai.com/codex for Codex). It prints a capture-only JSON snippet to
paste into ~/.claude/settings.json (or ~/.codex/hooks.json) under the
top-level "hooks" object, and warns rather than overwriting an existing Stop
hook.
Codex
install already wires Codex. Codex Desktop, VS Code Codex, and Codex CLI write
rollout JSONL files under ~/.codex/sessions/YYYY/MM/DD/; older files may live
under ~/.codex/archived_sessions/. The Codex adapter reads both locations.
Codex passes the current transcript_path to the hook; the hook uploads the
completed turn and exits 0 so it does not block Codex.
For a one-time backfill of past Codex sessions, run:
uvx thinqos-harvest run --sources openai.com/codex --since 2026-05-01T00:00:00 --batch-size 5
Prefer a bounded backfill such as the last 7 days. run chunks uploads by
default so large local histories do not exceed server request limits.
For a one-shot run without installing the package globally:
THINQOS_BASE_URL=https://thinqos.com \
INGEST_API_KEY=tq_xxxx... \
uvx thinqos-harvest run --sources openai.com/codex --since 2026-05-01T00:00:00 --batch-size 5
Omit --sources to sweep all registered adapters.
CLI
| Command | What it does |
|---|---|
thinqos-harvest list [--limit N] |
List your captured sessions newest-first. |
thinqos-harvest forget <session_id> |
Delete one captured session by id (irreversible). |
thinqos-harvest install-hook [--source SOURCE] |
Print the JSON hook snippet for Claude Code or Codex. |
thinqos-harvest run [--sources SOURCE] [--since TIMESTAMP] [--batch-size N] [--no-drain-pending] |
Manual sweep - discover any sessions not yet shipped and POST them in chunks. Use for bounded Codex or Claude Code backfill after a long offline period. |
thinqos-harvest hook capture [--source SOURCE] |
Hook entry point - reads transcript_path from stdin JSON. You should not run this directly; Claude Code and Codex hooks do. |
thinqos-harvest doctor |
Show hook health, replay queue depth, local log location, and recent server captures. |
Denylists
Two opt-out layers, both edited at ~/.config/thinqos-harvest/:
denylist.txt- newline-delimited substrings; any session whosecwdcontains a substring is skipped entirely. Example: addpersonal-taxesto skip captures from~/Documents/personal-taxes/.- Content denylist is hard-coded: turns containing
.env,api_key=…,sk-…, or matching(api_key|secret|password|token)=<16+ chars>are dropped before POST. Oversizedtool_resultcontent (>32KB) is also dropped.
Reliability
- Hook capture always exits 0; never blocks a Claude Code or Codex session even on bug or network failure.
- Hook health is written to
~/.config/thinqos-harvest/status.json; detailed hook output goes to~/.config/thinqos-harvest/hook.log. - Failed POSTs spool to
~/.config/thinqos-harvest/pending/<uuid>.jsonand drain on the nextrunby default. Use--no-drain-pendingfor a tightly scoped backfill. - Server-side dedup keyed by
(source, source_external_id); re-shipping the same session is idempotent. Claude Code captures include a monotonicsession_revisionso a later hook can replace an earlier partial capture.
Forgetting a capture
thinqos-harvest forget <session_id>
Where <session_id> is the value thinqos-harvest list shows in the last column. This deletes the Episode on the server side and cascades to any extracted knowledge. For Codex captures, pass --source openai.com/codex.
For a per-turn / per-content scrub (rather than whole-session delete), contact support. It's a deliberate Phase-A non-goal but ship-able if asked for.
Privacy posture
Opt-out, not opt-in. Adapter ships everything that isn't denied. If you'd rather have explicit opt-in per session, this probe is the wrong tool for you - the design decision is explicit in the spec.
Versioning
Tagged tools/thinqos-harvest-vX.Y.Z in the thinqos monorepo. A push to a matching tag triggers the publish workflow.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file thinqos_harvest-0.8.0.tar.gz.
File metadata
- Download URL: thinqos_harvest-0.8.0.tar.gz
- Upload date:
- Size: 29.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40e73a019ff68341b33be7cf8fa70204eda0e8d9230f05218711ed83ddf9ad85
|
|
| MD5 |
de3e1ce7f91efa63f6c0ce27af414fd1
|
|
| BLAKE2b-256 |
0d1ba6bb711103edaea3c8eb052596bee05b30c62fd140cf8c3d29e115689678
|
Provenance
The following attestation bundles were made for thinqos_harvest-0.8.0.tar.gz:
Publisher:
publish-harvest.yml on AI4Outcomes/thinqos
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
thinqos_harvest-0.8.0.tar.gz -
Subject digest:
40e73a019ff68341b33be7cf8fa70204eda0e8d9230f05218711ed83ddf9ad85 - Sigstore transparency entry: 1930794442
- Sigstore integration time:
-
Permalink:
AI4Outcomes/thinqos@dcd071bdf5cfba352d8c9a857615fa09bc5dedc4 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/AI4Outcomes
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-harvest.yml@dcd071bdf5cfba352d8c9a857615fa09bc5dedc4 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file thinqos_harvest-0.8.0-py3-none-any.whl.
File metadata
- Download URL: thinqos_harvest-0.8.0-py3-none-any.whl
- Upload date:
- Size: 26.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab8fe984c585431dd294ff19dbc45de00dd4f313e9ccc3d61d2737ef24b86dc2
|
|
| MD5 |
bb14290723b34b25fbb5d1ac7a1c2830
|
|
| BLAKE2b-256 |
a7c32f9b75c491ff4ec1ab6bf0792f617cebcc78a94c7b031f6c384d3f7aec5e
|
Provenance
The following attestation bundles were made for thinqos_harvest-0.8.0-py3-none-any.whl:
Publisher:
publish-harvest.yml on AI4Outcomes/thinqos
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
thinqos_harvest-0.8.0-py3-none-any.whl -
Subject digest:
ab8fe984c585431dd294ff19dbc45de00dd4f313e9ccc3d61d2737ef24b86dc2 - Sigstore transparency entry: 1930794588
- Sigstore integration time:
-
Permalink:
AI4Outcomes/thinqos@dcd071bdf5cfba352d8c9a857615fa09bc5dedc4 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/AI4Outcomes
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-harvest.yml@dcd071bdf5cfba352d8c9a857615fa09bc5dedc4 -
Trigger Event:
workflow_dispatch
-
Statement type: