Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: CI

on:
push:
branches: [main]
pull_request:

permissions:
contents: read

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

jobs:
python:
name: Python ${{ matrix.python }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python: ["3.10", "3.12", "3.13"]
env:
HERMESPACE_NEURAL_VERBALIZE: "0"
HERMESPACE_SKIP_NEURAL: "1"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
cache: pip
- name: Install clean package
run: python -m pip install .
- name: Unit tests
run: python -m unittest discover -s tests -v
- name: Hermes v0.20 host contract
run: python scripts/verify_hermes_integration.py

integration:
name: Smoke and operational E2E
runs-on: ubuntu-latest
env:
HERMESPACE_NEURAL_VERBALIZE: "0"
HERMESPACE_SKIP_NEURAL: "1"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
- run: python -m pip install .
- name: Security audit
run: ./scripts/security_audit.sh
- name: Lint production additions
run: |
python -m pip install ruff
python -m ruff check --isolated \
src/hermespace/atomic.py \
src/hermespace/hermes_runtime.py \
src/hermespace/plugin.py \
scripts/verify_hermes_integration.py \
tests/test_plugin_contract.py \
tests/test_store.py
- name: Smoke
run: ./scripts/smoke_test.sh
- name: Ops end-to-end
run: ./scripts/e2e_ops.sh
- name: Build wheel and sdist
run: |
python -m pip install build
python -m build
4 changes: 2 additions & 2 deletions ABOUT.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
**Hermespace is a functional J-Space workbench for Hermes agents** — FOA desk, dual decode, and an append-only world projection. Not [J-Space](https://github.com/anomalyco/j-space) neural weights. Not a second runtime. A harness-level global workspace inside Hermes that runs **standalone** and is **powered by [HermesCube](https://github.com/PabloTheThinker/hermescube)** when present.
**Hermespace is a functional Access Workspace workbench for Hermes agents** — FOA desk, dual decode, and an append-only world projection. Not [Access Workspace](https://github.com/anomalyco/j-space) neural weights. Not a second runtime. A harness-level global workspace inside Hermes that runs **standalone** and is **powered by [HermesCube](https://github.com/PabloTheThinker/hermescube)** when present.

Alongside the desk: skills+MEMORY fabric, neural FOA, autonomy grid, Cube heart/center cable (soft-fail).

Expand Down Expand Up @@ -38,7 +38,7 @@ Hermespace solves this with two systems:
| Project | Relation |
|---------|----------|
| [ActiveGraph](https://github.com/anomalyco/ActiveGraph) | Event log is the agent, graph is the world — influenced the archive-first design |
| [J-Space](https://github.com/anomalyco/j-space) | Verbal workspace, ~25 concepts, broadcasting hub — inspired the `concepts` system and `_refresh_concepts()` |
| [Access Workspace](https://github.com/anomalyco/j-space) | Verbal workspace, ~25 concepts, broadcasting hub — inspired the `concepts` system and `_refresh_concepts()` |
| [Missing Knowledge Layer](https://arxiv.org/abs/2405.10697) | Knowledge = supersession, Memory = decay, Wisdom = evidence-gated — inspired the epoch progression from unfiltered archive → evidence-gated wisdom |
| [Vygotsky](https://en.wikipedia.org/wiki/Inner_speech) | Inner speech, signs as instruments of thought — influenced the dual decode architecture (report to human vs context to model) |
| [Hermes Agent](https://github.com/NousResearch/hermes-agent) | The agent that grows with you, by Nous Research |
Expand Down
3 changes: 2 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ PYTHONPATH=src python3 -m unittest discover -s tests -v
| Agent skill | `skills/hermespace/` |
| CLI | `src/hermespace/cli.py`, `scripts/hs` |
| Tests | `tests/` |
| North star | `PURPOSE.md`, `docs/CODEMAP.md` |
| North star | `PURPOSE.md`, `LAYOUT.md`, `docs/architecture/CODEMAP.md` |
| Assessment | `docs/assessment/28-hermes-agent-jspace-assessment.md` |
| Maintainer note | `FOR_HERMES.md` |
| Integration doors | `INTEGRATION.md`, `WORKFLOW.md` |

Expand Down
90 changes: 2 additions & 88 deletions FOR_HERMES.md
Original file line number Diff line number Diff line change
@@ -1,89 +1,3 @@
# For Hermes Agent maintainers & dogfooders
# FOR_HERMES

**Repo:** https://github.com/PabloTheThinker/hermespace
**Companion to:** [NousResearch/hermes-agent](https://github.com/NousResearch/hermes-agent)
**Not** an official Nous product — independent open companion workspace.

## What this is (30 seconds)

Hermespace adds a **limited working-memory desk** beside Hermes:

1. **Workbench** — FOA, park stack, load-aware `receive_order`
2. **Dual decode** — short human `report` vs dense model `context` (never dump inject to chat)
3. **Fabric** — rank *this* `$HERMES_HOME/skills` + inject MEMORY/USER excerpts
4. **Plugin** — `on_session_start` / `pre_llm_call` / `on_session_end` broadcast when desk ready
5. **Study DB** — turns under `~/.hermespace` (local; not Hermes session DB)

It does **not** replace Hermes tools, skills, memory, gateway, or the agent loop.

## Fast path

```bash
git clone https://github.com/PabloTheThinker/hermespace.git
cd hermespace
./scripts/install_hermes.sh
./scripts/smoke_test.sh # expect 9/9
```

Then in any agent session:

```python
from hermespace import Workbench
wb = Workbench(agent_id="hermes", session_id="main")
wb.enter()
r = wb.receive_order("…", goal="…", say="…", force=True)
# r["user_reply"] → user r["model_context"] → model
```

Or CLI: `./scripts/hs turn -m "…" --goal "…" --say "…" --force`

## Design honesty

| Claim | Reality |
|-------|---------|
| “Like Claude J-space” | **Role** only — limited workspace *outside* weights. No activation access. |
| Consciousness / brain scan | **No.** Harness cognition + optional local embeddings. |
| Replaces Hermes skills/memory | **No.** Ranks and injects them. |
| Official Nous module | **No.** Community companion; feedback welcome. |

Inspired by working-memory limits (Baddeley-style capacity, load, GWT broadcast as *metaphors* for agent UX) and Anthropic’s public J-space *research framing* — implemented as open Hermes integration, not a closed-model probe.

## Integration surface

| Door | Entry |
|------|--------|
| Plugin | `hermes_plugin/` → `$HERMES_HOME/plugins/hermespace` |
| Skill | `skills/hermespace/` → `$HERMES_HOME/skills/hermespace` |
| Python | `hermespace.agent_api`, `hermespace.Workbench` |
| CLI | `scripts/hs` |
| Smoke | `scripts/smoke_test.sh` |

Hook implementation lives in `src/hermespace/hermes_bridge.py` (plugin is thin `register`).

When the plugin directory is a **symlink into this checkout**, import auto-resolves `../src` so dogfooders often need no `HERMESPACE_ROOT`.

## Autonomy grid (v0.14)

Missions, lenses, dream, self-talk, skillbench (hot-swap / merge / mutate), title tree.
Ground-up for Hermespace — not a port of AgentDrive or Conductor.

```bash
hs grid status
hs grid dream --force
```

See docs/18-autonomy-grid.md. Autonomy self-order stays **off** unless `HERMESPACE_AUTONOMY=1`.

## What we want from Hermes dogfood

- Does plugin register cleanly on current Hermes?
- Is dual-decode useful on Telegram/gateway, or noisy?
- Fabric skill ranking quality on real skill trees?
- Gaps vs native Hermes memory / Honcho / skills loop?
- Would you want any of this upstream-shaped (skill only, plugin only, or neither)?

Open issues/PRs on the repo. Thanks for looking.

## License

MIT — see `LICENSE`. Hermes Agent remains Nous Research’s project under its own license.
Moved to **[docs/integration/FOR_HERMES.md](docs/integration/FOR_HERMES.md)**.
13 changes: 8 additions & 5 deletions INTEGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ hermes plugins enable hermespace
```

Agent skill SoT: [`skills/hermespace/SKILL.md`](skills/hermespace/SKILL.md).
Recommended env: see `docs/RECOMMENDED.md`.
Recommended env: see `docs/ops/RECOMMENDED.md`. · Layout: `LAYOUT.md`.

## Door A — Python (best for agents)

Expand Down Expand Up @@ -122,12 +122,15 @@ send_user(result["user_reply"])

See docs/14-workbench-pocket-dimension.md.

## Hermes framework hooks (v0.12)
## Hermes framework hooks (v0.20+)

Plugin registers:
- `on_session_start` — workbench enter + env kit context
- `pre_llm_call` — desk + neural broadcast + workbench footer
- `on_session_end` — idle_tick
- `on_session_start` — initialize the session scope
- `pre_llm_call` — bounded ephemeral Access Workspace context
- `post_llm_call` / `post_tool_call` — observe completed work
- `on_session_end` — lightweight turn boundary
- `on_session_finalize` — final harvest + idle maintenance
- `on_session_reset` / `subagent_start` / `subagent_stop` — gateway/A2A lifecycle

Why: docs/16-why-hermes-framework.md

Expand Down
60 changes: 60 additions & 0 deletions LAYOUT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Hermespace codespace layout

North star: [PURPOSE.md](PURPOSE.md) · Assessments:
[28-hermes-agent-jspace](docs/assessment/28-hermes-agent-jspace-assessment.md) ·
[33-living-memories-cube-world](docs/assessment/33-living-memories-cube-world.md)

## Repository map

```
hermespace/
├── PURPOSE.md / ABOUT.md / README.md / LAYOUT.md
├── src/hermespace/ # Python package
│ ├── access/ # ★ Access Engine (hub · env · protocol · engine)
│ ├── turn/ # planned — workflow/desk/gate (README only)
│ ├── memory/ # planned — world/episodic/semantic (README only)
│ ├── warehouse/ # planned — cube cable (README only)
│ ├── grid/ # autonomy grid (missions · dream · skillbench)
│ ├── hermes_bridge.py # Hermes plugin hooks
│ └── … # turn spine still at package root (stable imports)
├── hermes_plugin/ # thin Hermes register()
├── desktop_plugin/ # Hermes Desktop page/pane
├── skills/hermespace/ # agent skill
├── docs/
│ ├── access/ # Access Workspace map · thesis · environment
│ ├── assessment/ # deep assessments
│ ├── architecture/ # CODEMAP · Cube contract
│ ├── integration/ # Hermes fit · FOR_HERMES
│ ├── ops/ # pulse · everyday · recommended
│ ├── research/ # numbered research archive
│ └── roadmap/ # open backlog · OEW phases
├── tests/ · scripts/ · experiments/ · benchmarks/
├── runtime/ · spec/ # templates / protocol specs
└── assets/
```

## Layer authority

| Layer | Path | Authority |
|-------|------|-----------|
| OEW / Access Workspace | `src/hermespace/access/` | Turn FOA + audit SoT |
| Turn spine | package root (`workflow`, `desk`, …) | Live turn |
| Autonomy | `grid/` | Missions / dream / skillbench |
| Identity projection | `world.py` … | Recharged from Cube |
| Warehouse cable | `cube_module.py` | Soft-fail Cube heart |
| Hermes surface | `hermes_plugin/` + bridge | Hooks only |

## Import rules

Prefer:

```python
from hermespace.jspace import JSpace, JSpaceEnv, evaluate_material_turn
```

Compat: `hermespace.jspace_env` still re-exports `JSpaceEnv`.

## Moving code later

Planned packages under `turn/`, `memory/`, `warehouse/` hold READMEs only until
OEW Phase B is green — avoid churning imports while the protocol lands.
Loading
Loading