Skip to content

Commit 75ff7d1

Browse files
committed
chore(integrations): consolidate agent packages
Signed-off-by: phernandez <paul@basicmachines.co>
1 parent ff5d872 commit 75ff7d1

144 files changed

Lines changed: 25211 additions & 32 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude-plugin/marketplace.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"name": "basicmachines-co",
3+
"owner": {
4+
"name": "Basic Machines",
5+
"email": "hello@basicmachines.co"
6+
},
7+
"metadata": {
8+
"description": "Official Basic Memory plugins from the canonical basic-memory repository",
9+
"version": "0.3.13"
10+
},
11+
"plugins": [
12+
{
13+
"name": "basic-memory",
14+
"source": "./plugins/claude-code",
15+
"description": "Skills, agents, and hooks for Basic Memory MCP — placement-aware note writing and knowledge graph workflows",
16+
"version": "0.3.13",
17+
"author": {
18+
"name": "Basic Machines"
19+
},
20+
"keywords": ["memory", "knowledge", "mcp", "specs", "context"]
21+
}
22+
]
23+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
name: Consolidated Packages
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- ".claude-plugin/**"
7+
- "plugins/**"
8+
- "skills/**"
9+
- "integrations/**"
10+
- "scripts/update_versions.py"
11+
- "scripts/validate_*.py"
12+
- "justfile"
13+
- ".github/workflows/consolidated-packages.yml"
14+
push:
15+
branches:
16+
- main
17+
paths:
18+
- ".claude-plugin/**"
19+
- "plugins/**"
20+
- "skills/**"
21+
- "integrations/**"
22+
- "scripts/update_versions.py"
23+
- "scripts/validate_*.py"
24+
- "justfile"
25+
- ".github/workflows/consolidated-packages.yml"
26+
27+
permissions:
28+
contents: read
29+
30+
jobs:
31+
claude-code:
32+
name: Claude Code marketplace
33+
runs-on: ubuntu-latest
34+
steps:
35+
- uses: actions/checkout@v4
36+
37+
- uses: extractions/setup-just@v4
38+
39+
- name: Validate manifests, agent, and bundled skills
40+
run: just --justfile plugins/claude-code/justfile --working-directory plugins/claude-code ci-check
41+
42+
- name: Verify shared version dry run
43+
run: just release-dry-run v0.99.0
44+
45+
skills:
46+
name: Shared skills
47+
runs-on: ubuntu-latest
48+
steps:
49+
- uses: actions/checkout@v4
50+
51+
- uses: extractions/setup-just@v4
52+
53+
- name: Validate SKILL.md source
54+
run: just --justfile skills/justfile --working-directory skills check
55+
56+
hermes:
57+
name: Hermes unit tests
58+
runs-on: ubuntu-latest
59+
defaults:
60+
run:
61+
working-directory: integrations/hermes
62+
steps:
63+
- uses: actions/checkout@v4
64+
65+
- uses: extractions/setup-just@v4
66+
67+
- name: Install uv
68+
uses: astral-sh/setup-uv@v3
69+
70+
- name: Set up Python
71+
run: uv python install 3.12
72+
73+
- name: Validate manifest and run unit tests
74+
run: just check
75+
76+
openclaw:
77+
name: OpenClaw package
78+
runs-on: ubuntu-latest
79+
defaults:
80+
run:
81+
working-directory: integrations/openclaw
82+
steps:
83+
- uses: actions/checkout@v4
84+
85+
- uses: extractions/setup-just@v4
86+
87+
- name: Setup Bun
88+
uses: oven-sh/setup-bun@v2
89+
with:
90+
bun-version: "1.3.8"
91+
92+
- name: Setup Node
93+
uses: actions/setup-node@v4
94+
with:
95+
node-version: "24"
96+
registry-url: "https://registry.npmjs.org"
97+
98+
- name: Install dependencies
99+
run: bun install --frozen-lockfile
100+
101+
- name: Release readiness
102+
run: just release-check

.github/workflows/pr-title.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,8 @@ jobs:
4040
ui
4141
deps
4242
installer
43+
plugins
44+
skills
45+
integrations
4346
# Allow breaking changes (needs "!" after type/scope)
4447
requireScopeForBreakingChange: true

.github/workflows/release.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,46 @@ jobs:
5656
with:
5757
password: ${{ secrets.PYPI_TOKEN }}
5858

59+
openclaw:
60+
name: Publish OpenClaw npm Package
61+
needs: release
62+
# npm publishes only for stable product tags. Pre-release Python tags use
63+
# versions like 0.21.3b1, which are not valid npm pre-release semver.
64+
if: ${{ !contains(github.ref_name, 'dev') && !contains(github.ref_name, 'b') && !contains(github.ref_name, 'rc') }}
65+
runs-on: ubuntu-latest
66+
permissions:
67+
contents: read
68+
id-token: write
69+
defaults:
70+
run:
71+
working-directory: integrations/openclaw
72+
steps:
73+
- uses: actions/checkout@v6
74+
75+
- uses: extractions/setup-just@v4
76+
77+
- name: Setup Bun
78+
uses: oven-sh/setup-bun@v2
79+
with:
80+
bun-version: "1.3.8"
81+
82+
- name: Setup Node
83+
uses: actions/setup-node@v4
84+
with:
85+
node-version: "24"
86+
registry-url: "https://registry.npmjs.org"
87+
88+
- name: Install dependencies
89+
run: bun install --frozen-lockfile
90+
91+
- name: Release readiness
92+
run: just release-check
93+
94+
- name: Publish to npm
95+
run: npm publish --access public --provenance
96+
env:
97+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
98+
5999
homebrew:
60100
name: Update Homebrew Formula
61101
needs: release

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,9 @@ claude-output
5858
.mcpregistry_*
5959
/.testmondata
6060
.benchmarks/
61+
62+
# Consolidated package build artifacts
63+
/integrations/openclaw/node_modules/
64+
/integrations/openclaw/dist/
65+
/integrations/openclaw/skills/
66+
/integrations/openclaw/*.tgz

AGENTS.md

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ See the [README.md](README.md) file for a project overview.
2626
- Run MCP smoke test: `just test-smoke`
2727
- Fast local loop: `just fast-check` (default iteration flow)
2828
- Local consistency check: `just doctor`
29+
- Run all consolidated agent package checks: `just package-check`
30+
- Run Claude Code plugin checks: `just package-check-claude-code`
31+
- Run shared skills checks: `just package-check-skills`
32+
- Run Hermes plugin checks: `just package-check-hermes`
33+
- Run OpenClaw plugin checks: `just package-check-openclaw`
34+
- Run host-native agent harness checks: `just agent-harness-check`
2935
- Generate HTML coverage: `just coverage`
3036
- Single test: `pytest tests/path/to/test_file.py::test_function_name`
3137
- Run benchmarks: `pytest test-int/test_sync_performance_benchmark.py -v -m "benchmark and not slow"`
@@ -50,20 +56,34 @@ See the [README.md](README.md) file for a project overview.
5056
1) **Code:** make changes.
5157
2) **Test:** `just fast-check` (lint/format/typecheck + pytest-testmon impacted tests for changed code).
5258
3) **Verify:** `just doctor` (end-to-end file ↔ DB loop in a temp project).
53-
4) **Full gate (when needed):** `just test` or `just check` for SQLite + Postgres.
59+
4) **Package verify:** `just package-check` when changes touch `plugins/`, `skills/`, `integrations/`, package metadata, or release wiring.
60+
5) **Full gate (when needed):** `just test` or `just check` for SQLite + Postgres.
5461

5562
Run `just test-smoke` when you specifically need the MCP smoke flow.
5663

5764
If testmon is “cold,” the first run may be long. Subsequent runs get much faster.
5865

66+
### Consolidated Agent Package Checks
67+
68+
The monorepo ships several host-native packages alongside the Python core. Use the root justfile as the canonical entry point:
69+
70+
- `just package-check` — validates every copied package and generated bundle path.
71+
- `just package-check-claude-code` — validates the root and plugin-local Claude marketplace manifests, bundled Claude Code skills, hooks, `basic-memory-manager` agent, and runs `claude plugin validate . --strict`.
72+
- `just package-check-skills` — validates every top-level `skills/memory-*/SKILL.md` frontmatter block.
73+
- `just package-check-hermes` — validates `integrations/hermes/plugin.yaml`, the Hermes provider entrypoint, bundled skill, and runs the hermetic unit suite.
74+
- `just package-check-openclaw` — runs the OpenClaw package install, copies top-level skills into the generated bundle, typechecks, lints, builds `dist/`, runs Bun tests, and performs `npm pack --dry-run`.
75+
- `just agent-harness-check` — checks the host-specific harnesses without the shared markdown-only skills target.
76+
77+
Package-local justfiles live in `plugins/claude-code/`, `skills/`, `integrations/hermes/`, and `integrations/openclaw/`. Prefer the root targets for PR verification so command names stay stable as package internals evolve.
78+
5979
### PR CI Gate
6080

6181
Before opening or updating a PR, run the checks that mirror the common required CI failures:
6282

6383
- Run `just typecheck` in addition to targeted `ruff` and `pytest` commands when tests were added or changed.
6484
- Sign commits with `git commit -s` so DCO passes. If a PR branch already has unsigned commits, rewrite the branch with signed-off commits before asking for review.
6585
- Use a semantic PR title accepted by `.github/workflows/pr-title.yml`: `type(scope): summary`.
66-
- Use one of the allowed scopes: `core`, `cli`, `api`, `mcp`, `sync`, `ui`, `deps`, `installer`.
86+
- Use one of the allowed scopes: `core`, `cli`, `api`, `mcp`, `sync`, `ui`, `deps`, `installer`, `plugins`, `skills`, `integrations`.
6787

6888
### Test Structure
6989

@@ -162,6 +182,10 @@ See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for detailed architecture docum
162182
- `/schemas` - Pydantic models for validation
163183
- `/services` - Business logic layer
164184
- `/sync` - File synchronization services + `coordinator.py` for lifecycle management
185+
- `/plugins/claude-code` - Claude Code plugin marketplace package, hooks, skills, and agent harness
186+
- `/skills` - Canonical framework-agnostic Basic Memory `SKILL.md` source
187+
- `/integrations/hermes` - Hermes memory-provider plugin
188+
- `/integrations/openclaw` - OpenClaw npm/TypeScript plugin
165189

166190
**Composition Roots:**
167191
Each entrypoint (API, MCP, CLI) has a composition root that:
@@ -263,10 +287,12 @@ Releases are driven by `just release` / `just beta` — never by a bare `git tag
263287
just release v0.21.3
264288
```
265289

266-
The recipe runs `just lint` + `just typecheck`, then updates `__version__` in `src/basic_memory/__init__.py` and `"version"` in `server.json` (MCP registry metadata), commits as `chore: update version to X.Y.Z for vX.Y.Z release`, creates the `vX.Y.Z` tag, and pushes both the commit and the tag to `origin/main`. After the tag lands, the `Release` workflow builds the package, publishes to PyPI, creates the GitHub release with auto-generated notes, and updates the Homebrew formula. The recipe finishes by printing the post-release tasks the workflow doesn't cover.
290+
The recipe runs `just lint` + `just typecheck`, then updates every release manifest through `scripts/update_versions.py`: `src/basic_memory/__init__.py`, `server.json`, the root Claude marketplace, the Claude Code plugin manifest and local marketplace, the Hermes `plugin.yaml`, and the OpenClaw `package.json`. It commits as `chore: update version to X.Y.Z for vX.Y.Z release`, creates the `vX.Y.Z` tag, and pushes both the commit and the tag to `origin/main`. After the tag lands, the `Release` workflow builds the Python package, publishes to PyPI, creates the GitHub release with auto-generated notes, publishes the OpenClaw npm package, and updates the Homebrew formula. The recipe finishes by printing the post-release tasks the workflow doesn't cover.
267291

268292
**Beta release:** `just beta v0.21.3b1` — same flow with a beta-suffixed tag. PyPI consumers install with `pip install basic-memory --pre`.
269293

294+
**Release dry run:** `just release-dry-run v0.21.4` previews the consolidated version update without writing files.
295+
270296
**Development builds:** every commit to `main` publishes a `0.21.3.dev26+468a22f`-style version to PyPI automatically via `.github/workflows/dev-release.yml`. No human action.
271297

272298
**Do not tag releases by hand.** A bare `git tag vX.Y.Z` skips the in-code version bump. Package metadata is still correct (uv-dynamic-versioning derives it from the git tag) but `basic-memory --version` reports the previous release, which is what happened with v0.21.2 → v0.21.3.
@@ -480,7 +506,7 @@ With GitHub integration, the development workflow includes:
480506
5. **Code Commits**: ALWAYS sign off commits with `git commit -s`
481507
6. **Pull Request Titles**: PR titles must follow the semantic format enforced by `.github/workflows/pr-title.yml`: `type(scope): summary`
482508
- Allowed types: `feat`, `fix`, `chore`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`
483-
- Allowed scopes: `core`, `cli`, `api`, `mcp`, `sync`, `ui`, `deps`, `installer`
509+
- Allowed scopes: `core`, `cli`, `api`, `mcp`, `sync`, `ui`, `deps`, `installer`, `plugins`, `skills`, `integrations`
484510
- Example: `fix(cli): propagate cloud workspace routing`
485511

486512
This level of integration represents a new paradigm in AI-human collaboration, where the AI assistant becomes a full-fledged team member rather than just a tool for generating code snippets.

CHANGELOG.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,46 @@
11
# CHANGELOG
22

3+
## Unreleased
4+
5+
### Core
6+
7+
- Consolidated the Basic Memory satellite repositories into the main
8+
`basic-memory` tree as the canonical source, discovery, documentation,
9+
issue, and release home.
10+
- Added root marketplace/package validation for the consolidated repository
11+
layout while keeping Phase 1 focused on parity.
12+
- Added root and package-local justfile targets so Claude Code, skills,
13+
Hermes, and OpenClaw builds can be verified from the monorepo.
14+
15+
### Skills
16+
17+
- Added the shared Basic Memory `SKILL.md` collection under top-level
18+
`skills/`.
19+
- Updated skills documentation to point at `basicmachines-co/basic-memory`
20+
and document manual copy as the temporary fallback when subpath installs are
21+
unavailable.
22+
23+
### Claude Code
24+
25+
- Added the Claude Code plugin under `plugins/claude-code/` with its native
26+
`.claude-plugin`, hooks, skills, agent, changelog, and docs.
27+
- Added the root Claude marketplace manifest pointing `basic-memory` to
28+
`./plugins/claude-code`.
29+
30+
### Hermes
31+
32+
- Added the Hermes memory provider plugin under `integrations/hermes/` with
33+
its native Python module, `plugin.yaml`, skill, tests, docs, and release
34+
metadata.
35+
- Updated Hermes install and development docs for monorepo subpath usage.
36+
37+
### OpenClaw
38+
39+
- Added the OpenClaw plugin under `integrations/openclaw/` with its native
40+
npm/TypeScript package shape, tests, docs, and release metadata.
41+
- Updated OpenClaw package metadata to point at the monorepo subdirectory and
42+
changed skill bundling to copy from the top-level `skills/` source.
43+
344
## v0.21.5 (2026-05-26)
445

546
Workspace/project routing fixes for MCP, plus a SQLite vector reindex stability fix.

0 commit comments

Comments
 (0)