{"id":51626700,"url":"https://github.com/waitdeadai/searchoclock-core","last_synced_at":"2026-07-13T02:02:15.591Z","repository":{"id":361170544,"uuid":"1253130749","full_name":"waitdeadai/searchoclock-core","owner":"waitdeadai","description":"Universal core of Search o'Clock: a portable socx engine + adapters bringing date-aware, durable, double-validated failure-troubleshooting to any agentic CLI (Codex, Gemini, Cursor, opencode, Goose, Cline, shell, MCP).","archived":false,"fork":false,"pushed_at":"2026-05-29T12:00:10.000Z","size":35,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T14:02:45.701Z","etag":null,"topics":["ai-agents","claude-code","cli","codex","developer-tools","gemini-cli","mcp","opencode"],"latest_commit_sha":null,"homepage":"https://waitdead.com","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/waitdeadai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-29T07:17:27.000Z","updated_at":"2026-05-29T12:00:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/waitdeadai/searchoclock-core","commit_stats":null,"previous_names":["waitdeadai/searchoclock-core"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/waitdeadai/searchoclock-core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waitdeadai%2Fsearchoclock-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waitdeadai%2Fsearchoclock-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waitdeadai%2Fsearchoclock-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waitdeadai%2Fsearchoclock-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/waitdeadai","download_url":"https://codeload.github.com/waitdeadai/searchoclock-core/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waitdeadai%2Fsearchoclock-core/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35407393,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-13T02:00:06.543Z","response_time":119,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","claude-code","cli","codex","developer-tools","gemini-cli","mcp","opencode"],"created_at":"2026-07-13T02:02:14.867Z","updated_at":"2026-07-13T02:02:15.559Z","avatar_url":"https://github.com/waitdeadai.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Search o'Clock — core (works in any agentic CLI) 🔎🕐\n\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)\n![works anywhere](https://img.shields.io/badge/harness-agnostic-success)\n\n\u003e **Your AI keeps fixing bugs with answers from before its training cutoff.** It defaults to the\n\u003e old, most-common pattern instead of the current API, slaps on `--force` / `@ts-ignore` to make\n\u003e the error disappear, skips the web-search tool that's right there, and burns retry loops on the\n\u003e same stale guess. Bigger models don't fix this — they trained on yesterday's code too.\n\n**Search o'Clock** intercepts the failure, stamps **today's date**, and makes the agent research the\nfix against **live, dated sources** — pick the most **durable** one (not the fastest band-aid) — and\nhave an **independent second model agree from the evidence** before the fix is trusted.\n\nThe Claude Code plugin is [its own repo / marketplace submission](https://github.com/waitdeadai/searchoclock).\n**This** repo is the harness-agnostic **core** so *everyone* gets results — Codex, Gemini CLI, Cursor,\nopencode, Goose, Cline, Aider, and any shell.\n\n## Why existing fixes don't cut it\n- **A bigger model** still trains on yesterday's code and defaults to the old pattern.\n- **`AGENTS.md` / system prompts** go stale and the model can ignore them — a prompt is a suggestion, a hook is enforcement.\n- **An optional `/command`** doesn't fire when you need it — in-prompt good behavior stops transferring the moment the model can act ([arXiv:2602.16943](https://arxiv.org/abs/2602.16943)).\n- **Self-review** doesn't work — a model checking its own answer invents errors or rubber-stamps. You need a *separate* model. See [`docs/WHY.md`](docs/WHY.md).\n\n## The core: one portable engine\n`socx` is a dependency-light (`bash` + `python3`) deterministic engine. Given a failed command + error,\nit emits a date-anchored, durability-ranked, double-validated **research protocol** on stdout. No model\nis in its trigger path; it never blocks; any internal error → exit 0 (fail-open).\n\n```\nsocx hook          # read a normalized failure event (JSON) on stdin → protocol on stdout  (for adapters)\nsocx run -- CMD…   # run CMD; on non-zero exit, print the protocol  (universal, no hooks needed)\nsocx text | json   # debug render\nsocx selftest      # exit 0 if it works\n```\n\n## Install — pick your integration (precedence: native hook \u003e shell-wrapper \u003e MCP)\n\n| Harness | Mechanism | How |\n|---|---|---|\n| **Claude Code** | native hook ✅ | the dedicated plugin — `/plugin marketplace add waitdeadai/searchoclock` |\n| **OpenAI Codex CLI** | native hook ✅ | `adapters/codex-cli/` — PostToolUse fires on non-zero Bash exit |\n| **Google Gemini CLI** | native hook ✅ (v0.26.0+) | `adapters/gemini-cli/` — extension-bundled PostToolUse/AfterTool |\n| **Cursor** | native hook ✅ (1.7+) | `adapters/cursor/` — `afterShellExecution` in `.cursor/hooks.json` |\n| **opencode** | native hook ✅ | `adapters/opencode/` — `tool.execute.after` TS plugin (MCP-tool calls excluded, issue #2319) |\n| **Goose** | native hook ✅ (v1.34.0+) | `adapters/goose/` — PostToolUse hook |\n| **Cline** | native hook ✅ (in-code) | `adapters/cline/` — `@cline/sdk` lifecycle hook |\n| **Aider · Crush · Amp · Continue** | shell-wrapper ✅ | no failure hook → `socx-run -- \u003ccmd\u003e` / aliases (`adapters/shell-wrapper/`) |\n| **Hermes (Nous) · OpenClaw** | shell-wrapper / MCP | gateway/agent, no tool-lifecycle hook → wrap the backend command or MCP |\n| **any MCP-capable harness** | MCP (supplement) | `mcp/` — `research-on-failure` tool; model-elective, not guaranteed-on-failure |\n\n\u003e Adapter mechanisms are from each tool's 2026 docs; some hook schemas evolve fast — each adapter\n\u003e folder notes the doc to confirm against. The **shell-wrapper works everywhere** and needs nothing\n\u003e from the harness, so start there if in doubt.\n\n### 30-second universal start (any CLI)\n```bash\ngit clone https://github.com/waitdeadai/searchoclock-core\nexport PATH=\"$PWD/searchoclock-core:$PATH\"\n# wrap the commands your agent runs:\nsocx-run -- npm run build\n# or alias them so failures always trigger research:\nalias build='socx-run -- npm run build'\n```\n\n## Configuration\nSame knobs as the plugin, read as `SOCX_*` (or `SEARCHOCLOCK_*`): `ENABLE`, `SOLUTION_MODE` (durable|fast|both),\n`MIN_CANDIDATES`, `PROBE_ALL`, `VALIDATE`, `VALIDATOR_MODEL`, `VALIDATE_MIN_CONFIDENCE`, `COOLDOWN_SEC`,\n`MIN_INTERVAL_SEC`, `MAX_PER_SESSION`, `SEVERITY_MIN`, `GOAL_SCOPE`, `STATE_DIR`, `HARNESS` (label shown in the protocol).\n\n## Relationship to the Claude Code plugin\nThe plugin is the polished, marketplace-validated Claude Code adapter. This core is the shared engine +\nthe other-harness adapters. They keep the **same protocol, durability rubric, and double-validation** so a\nfix you'd get in Claude Code is the fix you'd get anywhere. `adapters/claude-code/` is the reference adapter.\n\n## Sister tools\nPart of the [waitdeadai](https://github.com/waitdeadai) family of Claude Code governance hooks —\n[`searchoclock`](https://github.com/waitdeadai/searchoclock) (the Claude Code plugin),\n[`time-anchor`](https://github.com/waitdeadai/time-anchor),\n[`no-sycophancy`](https://github.com/waitdeadai/no-sycophancy),\n[`llm-dark-patterns`](https://github.com/waitdeadai/llm-dark-patterns). More at [waitdead.com](https://waitdead.com).\n\n## License\nApache-2.0. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaitdeadai%2Fsearchoclock-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwaitdeadai%2Fsearchoclock-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaitdeadai%2Fsearchoclock-core/lists"}