Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
20 changes: 20 additions & 0 deletions .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "lazybrain-local",
"interface": {
"displayName": "LazyBrain for Codex Desktop"
},
"plugins": [
{
"name": "lazybrain",
"source": {
"source": "local",
"path": "./"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_USE"
},
"category": "Developer Tools"
}
]
}
39 changes: 39 additions & 0 deletions .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"name": "lazybrain",
"version": "2.1.0",
"description": "Choose and visualize the right local AI-agent capability inside Codex Desktop from installed Skills, Plugins, MCP servers, agents, and commands.",
"author": {
"name": "LazyBrain contributors",
"url": "https://github.com/papperrollinggery"
},
"homepage": "https://github.com/papperrollinggery/lazy-brain",
"repository": "https://github.com/papperrollinggery/lazy-brain",
"license": "AGPL-3.0",
"keywords": [
"codex",
"claude-code",
"skills",
"plugins",
"mcp",
"agent-orchestration",
"visualization"
],
"skills": "./skills/",
"mcpServers": "./.mcp.json",
"interface": {
"displayName": "LazyBrain",
"shortDescription": "Choose local capabilities in Codex Desktop",
"longDescription": "A Codex Desktop-first local capability router. It indexes Skills, Plugins, MCP servers, agents, and commands, then turns a vague task into an explainable recommendation, comparison, interactive @Visualize payload, or safe execution order.",
"developerName": "LazyBrain contributors",
"category": "Developer Tools",
"capabilities": ["Read", "Search", "Plan", "Visualize"],
"websiteURL": "https://github.com/papperrollinggery/lazy-brain",
"privacyPolicyURL": "https://github.com/papperrollinggery/lazy-brain/blob/main/docs/PRIVACY.md",
"defaultPrompt": [
"Which local skill or tool should I use for this task?",
"Compare my installed capabilities in an interactive decision view.",
"Build a safe capability sequence for this task."
],
"brandColor": "#7C3AED"
}
}
13 changes: 13 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,18 @@ jobs:
- run: npm run lint
- run: npm run build
- run: npm test
- run: npm run validate:plugin
- run: npm audit --audit-level=high
- run: node dist/bin/lazybrain.js quickstart
- run: node dist/bin/lazybrain.js "review this PR for security"
- name: Verify Codex Desktop payload
run: |
node dist/bin/lazybrain.js desktop "review this payment PR safely" --json > /tmp/lazybrain-desktop.json
node -e "const p=require('/tmp/lazybrain-desktop.json'); if(p.surface!=='codex-desktop'||p.renderer.preferredPlugin!=='@Visualize'||p.interaction.selectionDoesNotExecute!==true) process.exit(1)"

required-test:
name: Test
needs: test
runs-on: ubuntu-latest
steps:
- run: echo "Node 18, 20, and 22 verification passed."
44 changes: 40 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ permissions:
contents: read

jobs:
npm-release:
name: npm release
verify:
name: verify (Node ${{ matrix.node-version }})
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
env:
npm_config_fetch_retries: 5
npm_config_fetch_retry_mintimeout: 20000
Expand All @@ -32,8 +35,7 @@ jobs:

- uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
node-version: ${{ matrix.node-version }}
cache: 'npm'

- name: Install
Expand All @@ -44,8 +46,42 @@ jobs:
npm run build
npm test
npm run lint
npm run validate:plugin
npm run audit:public
npm audit --audit-level=high
npm pack --dry-run --json
node dist/bin/lazybrain.js desktop "review this payment PR safely" --json > /tmp/lazybrain-desktop.json
node -e "const p=require('/tmp/lazybrain-desktop.json'); if(p.surface!=='codex-desktop'||p.renderer.preferredPlugin!=='@Visualize'||p.renderer.activation!=='user-selected-in-composer'||p.interaction.selectionDoesNotExecute!==true) process.exit(1)"

- name: Packed install smoke
run: |
TARBALL=$(npm pack --json | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>process.stdout.write(JSON.parse(s)[0].filename))")
SMOKE_DIR=$(mktemp -d)
npm install --prefix "$SMOKE_DIR" "$PWD/$TARBALL" --ignore-scripts
"$SMOKE_DIR/node_modules/.bin/lb" --version
"$SMOKE_DIR/node_modules/.bin/lb" desktop "review this payment PR safely" --json > /tmp/lazybrain-packed-desktop.json
node -e "const p=require('/tmp/lazybrain-packed-desktop.json'); if(p.surface!=='codex-desktop'||p.renderer.activation!=='user-selected-in-composer') process.exit(1)"

npm-release:
name: npm release
needs: verify
runs-on: ubuntu-latest
env:
npm_config_fetch_retries: 5
npm_config_fetch_retry_mintimeout: 20000
npm_config_fetch_retry_maxtimeout: 120000

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
cache: 'npm'

- name: Install verified lockfile
run: npm ci

- name: Publish dry run
if: ${{ github.event_name == 'workflow_dispatch' && inputs.dry_run == 'true' }}
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ docs/HANDOFF.md
docs/contingency-minimax-down.md
docs/IRI-*.md
docs/iri-2/
docs/CODEX-PROMPT.md
docs/GOAL-EXECUTION-PROMPT.md
docs/HANDOFF-PROMPT.md
docs/SESSION-PROMPTS.md

# Test coverage
coverage/
Expand Down
8 changes: 8 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"lazybrain": {
"command": "lazybrain-mcp",
"args": []
}
}
}
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Changelog

## [v2.1.0]

- Repositioned LazyBrain as a local capability control plane for Codex and Claude Code rather than another installer.
- Added local indexing for Codex/Claude plugin manifests, bundled capabilities, and MCP server names without copying credential values.
- Added the fail-closed `lb ask` decision contract with structured JSON, alternatives, clarification, and visualization-ready data.
- Added `lazybrain_recommend` and `lazybrain_catalog` MCP tools with explicit safety annotations and package-version readback.
- Added a validated Codex plugin manifest, bundled `$lazybrain-find` Skill, and local marketplace development configuration.
- Made Codex Desktop the primary product surface and added a versioned `desktopVisualization` contract for the OpenAI `@Visualize` plugin.
- Added `lb desktop`, accessible Markdown/table fallback, selection-without-execution semantics, and desktop interaction regression tests.
- Expanded README SEO/GEO content, FAQ, real scan matrix, use cases, privacy boundaries, and release gates.

## [v2.0.1]

- Removed the leftover optional HuggingFace/embedding dependency from the public package.
Expand Down
Loading
Loading