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
36 changes: 36 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: CI

on:
push:
branches: [main]
pull_request:

permissions:
contents: read

jobs:
build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-go@v5
with:
# Must stay >= 1.26.5: GO-2026-5856 (Encrypted Client Hello privacy
# leak in crypto/tls) is fixed in the toolchain, not in our code.
go-version: '1.26.5'
check-latest: true

- name: Build
run: go build ./...

- name: Vet
run: go vet ./...

- name: Test
run: go test ./...

- name: Govulncheck
run: |
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...
36 changes: 36 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Release

on:
push:
tags: ['v*']

permissions:
contents: write

jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
# goreleaser derives the changelog and version from tag history.
fetch-depth: 0

- uses: actions/setup-go@v5
with:
# Keep in step with ci.yml — see the note there about GO-2026-5856.
go-version: '1.26.5'
check-latest: true

- name: Verify before publishing
run: |
go build ./...
go vet ./...
go test ./...

- uses: goreleaser/goreleaser-action@v6
with:
version: '~> v2'
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,13 @@ coverage.*

# OS
.DS_Store

# Internal session handoff — kept locally, mirrored to ~/.claude/handoffs/
# Carries operational detail (hosts, account structure, local paths) that
# does not belong in a public repo.
HANDOFF.md

# One-off generator/verification reports — internal tooling output
dogfood-results.json
apify-actor-audit-report.json
workflow-verify-report.json
6 changes: 5 additions & 1 deletion .goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ builds:
env:
- CGO_ENABLED=0
ldflags:
- -s -w -X canvas-pp-cli/internal/cli.version={{ .Version }}
- -s -w -X github.com/johnnyrobot/canvas-pp-cli/internal/cli.version={{ .Version }}
targets:
- darwin_amd64
- darwin_arm64
Expand Down Expand Up @@ -41,6 +41,10 @@ checksum:
name_template: checksums.txt
brews:
- name: canvas-pp-cli
# Disabled until github.com/johnnyrobot/homebrew-tap exists — goreleaser
# fails the entire release if it cannot push the formula. Create that repo,
# then remove this line to start publishing the formula.
skip_upload: true
repository:
owner: johnnyrobot
name: homebrew-tap
Expand Down
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Changelog

This file is maintained by printing-press-library release automation. Do not hand-edit release sections in normal PRs.
Release notes for canvas-pp-cli. Versions follow the git tags on this repository; release artifacts are published by goreleaser.

255 changes: 0 additions & 255 deletions HANDOFF.md

This file was deleted.

82 changes: 20 additions & 62 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,99 +8,58 @@ Created by [@johnnyrobot](https://github.com/johnnyrobot).

## Install

The recommended path installs both the `canvas-pp-cli` binary and the `pp-canvas` agent skill (Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, and other agents supported by the upstream [`skills`](https://github.com/vercel-labs/skills) CLI) in one shot:
### Go install

```bash
npx -y @mvanhorn/printing-press-library install canvas
```

For CLI only (no skill):

```bash
npx -y @mvanhorn/printing-press-library install canvas --cli-only
```

For skill only — installs the skill into the same agents as the default command above, but skips the CLI binary (use this to update or reinstall just the skill):

```bash
npx -y @mvanhorn/printing-press-library install canvas --skill-only
```

To constrain the skill install to one or more specific agents (repeatable — agent names match the [`skills`](https://github.com/vercel-labs/skills) CLI):
Requires Go 1.26.5 or newer:

```bash
npx -y @mvanhorn/printing-press-library install canvas --agent claude-code
npx -y @mvanhorn/printing-press-library install canvas --agent claude-code --agent codex
go install github.com/johnnyrobot/canvas-pp-cli/cmd/canvas-pp-cli@latest
```

### Without Node (Go fallback)

If `npx` isn't available (no Node, offline), install the CLI directly via Go (requires Go 1.26.5 or newer):
To also install the MCP server binary:

```bash
go install github.com/mvanhorn/printing-press-library/library/productivity/canvas/cmd/canvas-pp-cli@latest
go install github.com/johnnyrobot/canvas-pp-cli/cmd/canvas-pp-mcp@latest
```

This installs the CLI only — no skill.

### Pre-built binary

Download a pre-built binary for your platform from the [latest release](https://github.com/mvanhorn/printing-press-library/releases/tag/canvas-current). On macOS, clear the Gatekeeper quarantine: `xattr -d com.apple.quarantine <binary>`. On Unix, mark it executable: `chmod +x <binary>`.

<!-- pp-hermes-install-anchor -->
## Install for Hermes
Download a binary for your platform from the [latest release](https://github.com/johnnyrobot/canvas-pp-cli/releases/latest). Builds are published for macOS, Linux and Windows on both amd64 and arm64.

Install the CLI binary first. The installer writes binaries to a per-user managed bin directory by default: `$HOME/.local/bin` on macOS/Linux and `%LOCALAPPDATA%\Programs\PrintingPress\bin` on Windows.
On macOS, clear the Gatekeeper quarantine after downloading:

```bash
npx -y @mvanhorn/printing-press-library install canvas --cli-only
xattr -d com.apple.quarantine canvas-pp-cli
```

Then install the focused Hermes skill.

From the Hermes CLI:
On Unix, mark it executable:

```bash
hermes skills install mvanhorn/printing-press-library/cli-skills/pp-canvas --force
chmod +x canvas-pp-cli
```

Inside a Hermes chat session:
### From source

```bash
/skills install mvanhorn/printing-press-library/cli-skills/pp-canvas --force
git clone https://github.com/johnnyrobot/canvas-pp-cli.git
cd canvas-pp-cli
make build # or: go build ./cmd/canvas-pp-cli
make build-all # CLI + MCP server
```

Restart the Hermes session or gateway if the newly installed skill is not visible immediately.
### Agent skill

## Install for OpenClaw
Install both the CLI binary and the focused OpenClaw skill. The installer defaults binaries to a per-user bin directory (`$HOME/.local/bin` on macOS/Linux, `%LOCALAPPDATA%\Programs\PrintingPress\bin` on Windows):

```bash
npx -y @mvanhorn/printing-press-library install canvas --agent openclaw
```

Restart the OpenClaw session or gateway if the newly installed skill is not visible immediately.
`SKILL.md` in this repo is a ready-to-use agent skill describing the CLI's commands and recipes. Point your agent at it directly, or copy it into your agent's skills directory.

## Use with Claude Desktop

This CLI ships an [MCPB](https://github.com/modelcontextprotocol/mcpb) bundle — Claude Desktop's standard format for one-click MCP extension installs (no JSON config required).

To install:

1. Download the `.mcpb` for your platform from the [latest release](https://github.com/mvanhorn/printing-press-library/releases/tag/canvas-current).
2. Double-click the `.mcpb` file. Claude Desktop opens and walks you through the install.
3. Fill in `CANVAS_API_TOKEN` when Claude Desktop prompts you.

Requires Claude Desktop 1.0.0 or later. Pre-built bundles ship for macOS Apple Silicon (`darwin-arm64`) and Windows (`amd64`, `arm64`); for other platforms, use the manual config below.

<details>
<summary>Manual JSON config (advanced)</summary>
The MCP server (`canvas-pp-mcp`) exposes the whole Canvas surface to Claude Desktop through a `canvas_search` + `canvas_execute` pair, so an agent reaches every endpoint without loading a tool per endpoint.

If you can't use the MCPB bundle (older Claude Desktop, unsupported platform), install the MCP binary and configure it manually.
Install the MCP binary, then add it to your Claude Desktop config.


```bash
go install github.com/mvanhorn/printing-press-library/library/productivity/canvas/cmd/canvas-pp-mcp@latest
go install github.com/johnnyrobot/canvas-pp-cli/cmd/canvas-pp-mcp@latest
```

Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):
Expand All @@ -118,7 +77,6 @@ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_
}
```

</details>

## Authentication

Expand Down
9 changes: 0 additions & 9 deletions apify-actor-audit-report.json

This file was deleted.

2 changes: 1 addition & 1 deletion cmd/canvas-pp-cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ package main
import (
"os"

"canvas-pp-cli/internal/cli"
"github.com/johnnyrobot/canvas-pp-cli/internal/cli"
)

func main() {
Expand Down
2 changes: 1 addition & 1 deletion cmd/canvas-pp-mcp/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"os"
"strings"

mcptools "canvas-pp-cli/internal/mcp"
mcptools "github.com/johnnyrobot/canvas-pp-cli/internal/mcp"
"github.com/mark3labs/mcp-go/server"
)

Expand Down
98 changes: 0 additions & 98 deletions dogfood-results.json

This file was deleted.

2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module canvas-pp-cli
module github.com/johnnyrobot/canvas-pp-cli

go 1.26

Expand Down
2 changes: 1 addition & 1 deletion internal/cli/agent_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"os"
"sort"

"canvas-pp-cli/internal/cliutil"
"github.com/johnnyrobot/canvas-pp-cli/internal/cliutil"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
Expand Down
2 changes: 1 addition & 1 deletion internal/cli/analytics.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"sort"
"strings"

"canvas-pp-cli/internal/store"
"github.com/johnnyrobot/canvas-pp-cli/internal/store"
"github.com/spf13/cobra"
)

Expand Down
Loading
Loading