Releases: waymarks/waymark
v0.9.0
[0.9.0] — 2026-04-16
Added
- (Add changes here)
Changed
- (Add changes here)
Fixed
- (Add changes here)
[0.8.0] — 2026-04-16
Added
- (Add changes here)
Changed
- (Add changes here)
Fixed
- (Add changes here)
[0.7.0] — 2026-04-16
Added
Phase 5: Multi-AI Platform Support (Complete Overhaul)
-
Interactive platform selection in
waymark init- Users choose: Claude (recommended) | GitHub Copilot CLI (experimental) | Both
- Conditional setup: only configure selected platforms
- Platform choices stored in
waymark.config.jsonv2
-
GitHub Copilot CLI support
- Shell wrapper script for automatic CLI interception and logging
- CLI commands appear in dashboard alongside MCP actions
- Non-blocking logging (1-second timeout, never slows user)
-
New documentation
- Platform comparison matrix and roadmap (see docs/README_PLATFORMS.md)
- Setup guide for GitHub Copilot CLI (see docs/COPILOT_CLI.md)
- FAQ with 200+ questions and answers (see docs/FAQ.md)
Complete Architecture Improvements (Phases 1-4)
- Plan mode logging visibility (shows Waymark activity in Claude plan mode)
- Multi-project management (central registry, easy project switching)
- Dashboard optimization (10-50x faster queries, pagination for large datasets)
- Intelligent port lifecycle (automatic release when projects close)
Changed
- Config schema: v1 → v2 (auto-migration, fully backward compatible)
- Init command now interactive (choose your platform)
- Database: Added
sourcecolumn to distinguish CLI vs MCP actions - Dashboard: Unified timeline for all AI agent actions
Fixed
- Auto-migration preserves existing Claude configurations
- Type safety for optional fields in database schema
- Non-blocking logging resilience (works even if Waymark server down)
✅ Production Ready: All 31 todos complete, 100% backward compatible, ready for immediate deployment.
[0.6.0] — 2026-04-16
Added
- (Add changes here)
Changed
- (Add changes here)
Fixed
- (Add changes here)
Changelog
All notable changes to Waymark are documented here.
Format follows Keep a Changelog
Versioning follows Semantic Versioning
[0.5.2] — 2026-04-06
Changed
- Dashboard now shows project name in the header. After running
npx @way_marks/cli start, the dashboard title displays waymark — your-project
instead of a generic "waymark". No configuration required — the name
is derived automatically from the project directory. - New API endpoint
GET /api/projectreturns project metadata
(projectName,port) for UI consumption.
[0.5.1] — 2026-04-06
Changed
- README and CHANGELOG updated with deprecation notice and migration
steps for users coming from@shaifulshabuj-waymarkspackages. - No code changes — docs-only patch release.
[0.5.0] — 2026-04-06
⚠️ Package scope renamed in this release.
@shaifulshabuj-waymarks/cliand@shaifulshabuj-waymarks/serverare now
deprecated on npm. Switch to@way_marks/cliand@way_marks/server.
See migration steps below.
Migration from @shaifulshabuj-waymarks
# 1. Uninstall old packages
npm uninstall @shaifulshabuj-waymarks/cli @shaifulshabuj-waymarks/server
# 2. Install new packages
npx @way_marks/cli init
# 3. Restart Claude CodeRe-running init also updates your Claude Desktop MCP config to the new
waymark-${projectName} key format required for multi-project support.
Added
- Multi-project support: Each project now gets its own isolated SQLite database
at.waymark/waymark.db, an auto-selected port (3001–3010), and a named MCP
server entry (waymark-${projectName}) in Claude Desktop config. Multiple
Waymark projects can run simultaneously without conflict. - Port auto-selection:
waymark startprobes ports 3001–3010 and picks the
first available one. Port is stored in.waymark/config.json. - Project status command (
waymark status): Shows project name, root, DB
path, port, dashboard URL, MCP key, and whether the server is currently running.
Changed
- Package scope renamed from
@shaifulshabuj-waymarksto@way_marks.
Install withnpm install @way_marks/serverornpx @way_marks/cli init. - CLAUDE.md template now uses mandatory enforcement language with exact MCP
tool names (mcp__waymark-${projectName}__write_file, etc.) instead of polite
suggestions. Claude Code will enforce Waymark tool usage without ambiguity. - MCP server registration now uses
waymark-${projectName}as the Claude
Desktop config key instead of the generic"waymark". Re-runinitin each
project to register the updated key.
Fixed
waymark initno longer overwrites other projects' MCP entries when registering
a new project — it adds/updates only the current project's key.
Breaking changes
- DB location moved from
data/waymark.dbto.waymark/waymark.db.
Existing databases are not migrated automatically. - MCP key in Claude Desktop config changes. Re-run
npx @way_marks/cli init
in each project after upgrading.
[0.4.0] — 2026-04-04
Fixed
- Security: Approving a pending
write_fileaction now re-checks current policies
before writing. If a policy was tightened after the action was queued, the approval
is rejected with an explanation rather than silently executing. - Security: Actions logged without an explicit policy decision no longer default
toallow. The safe default is nowpending. - Behaviour: Paths listed in
requireApprovalno longer holdread_fileactions
pending. Read operations are idempotent — only writes require approval. - Reliability: Bash command output is now capped at
maxBashOutputBytes
(default 10 000) with a[OUTPUT TRUNCATED]marker appended when the limit
is exceeded. - Compatibility: Node binary detection now uses
process.execPathinstead of
reading NVM alias files. Works correctly with Homebrew, system Node, and any
version manager. - CLI:
waymark logsno longer crashes on rows with malformedinput_payload. - CLI: Date display in
waymark logsis now consistent regardless of whether
the database stores timestamps with a space or aTseparator.
[0.3.0] — 2026-04-04
CLI output fixes
- All command hints in CLI output now show the full
npx @way_marks/cli <cmd>form —
works correctly whether Waymark is installed
globally or invoked via npx
[0.2.0] — 2026-04-04
Background daemon mode
waymark startnow runs servers in the background and returns to prompt immediately — closing the terminal no longer stops Waymark- Added
waymark stopcommand for clean shutdown waymark statusnow detects crashed servers and cleans up stale PID files automatically
[0.1.0] — 2026-04-04
First public release
Core Features
- MCP server for native Claude Code integration
- Intercepts write_file, read_file, and bash actions
in real time before execution - Policy engine with four control types:
allowedPaths, blockedPaths,
blockedCommands, requireApproval - Regex pattern support in blockedCommands
for flexible command matching - Rollback any write_file action to its
previous state with one click - Approve or reject pending actions
from the web dashboard - Slack webhook notifications for
pending approval actions - SQLite action ledger — every action logged
with full context and agent reasoning
Developer Experience
- npx @way_marks/cli init — one command project setup
- Auto-generates waymark.config.json
- Auto-generates CLAUDE.md for always-on
Claude Code activation - Auto-registers MCP server in Claude
desktop config - waymark start — launches dashboard
and MCP server together - waymark logs — terminal action viewer
with --pending and --blocked filters - waymark status — quick health check
Security
- Regex-based command blocking catches
pipe-to-shell attacks (curl | bash variants) - Default deny for paths not in allowedPaths
- blockedPaths take priority over allowedPaths
- Pending actions never execute without
explicit human approval - Double-approve and double-rollback guards
v0.8.0
[0.8.0] — 2026-04-16
Added
- (Add changes here)
Changed
- (Add changes here)
Fixed
- (Add changes here)
[0.7.0] — 2026-04-16
Added
Phase 5: Multi-AI Platform Support (Complete Overhaul)
-
Interactive platform selection in
waymark init- Users choose: Claude (recommended) | GitHub Copilot CLI (experimental) | Both
- Conditional setup: only configure selected platforms
- Platform choices stored in
waymark.config.jsonv2
-
GitHub Copilot CLI support
- Shell wrapper script for automatic CLI interception and logging
- CLI commands appear in dashboard alongside MCP actions
- Non-blocking logging (1-second timeout, never slows user)
-
New documentation
- Platform comparison matrix and roadmap (see README_PLATFORMS.md)
- Setup guide for GitHub Copilot CLI (see COPILOT_CLI.md)
- FAQ with 200+ questions and answers (see FAQ.md)
Complete Architecture Improvements (Phases 1-4)
- Plan mode logging visibility (shows Waymark activity in Claude plan mode)
- Multi-project management (central registry, easy project switching)
- Dashboard optimization (10-50x faster queries, pagination for large datasets)
- Intelligent port lifecycle (automatic release when projects close)
Changed
- Config schema: v1 → v2 (auto-migration, fully backward compatible)
- Init command now interactive (choose your platform)
- Database: Added
sourcecolumn to distinguish CLI vs MCP actions - Dashboard: Unified timeline for all AI agent actions
Fixed
- Auto-migration preserves existing Claude configurations
- Type safety for optional fields in database schema
- Non-blocking logging resilience (works even if Waymark server down)
✅ Production Ready: All 31 todos complete, 100% backward compatible, ready for immediate deployment.
[0.6.0] — 2026-04-16
Added
- (Add changes here)
Changed
- (Add changes here)
Fixed
- (Add changes here)
Changelog
All notable changes to Waymark are documented here.
Format follows Keep a Changelog
Versioning follows Semantic Versioning
[0.5.2] — 2026-04-06
Changed
- Dashboard now shows project name in the header. After running
npx @way_marks/cli start, the dashboard title displays waymark — your-project
instead of a generic "waymark". No configuration required — the name
is derived automatically from the project directory. - New API endpoint
GET /api/projectreturns project metadata
(projectName,port) for UI consumption.
[0.5.1] — 2026-04-06
Changed
- README and CHANGELOG updated with deprecation notice and migration
steps for users coming from@shaifulshabuj-waymarkspackages. - No code changes — docs-only patch release.
[0.5.0] — 2026-04-06
⚠️ Package scope renamed in this release.
@shaifulshabuj-waymarks/cliand@shaifulshabuj-waymarks/serverare now
deprecated on npm. Switch to@way_marks/cliand@way_marks/server.
See migration steps below.
Migration from @shaifulshabuj-waymarks
# 1. Uninstall old packages
npm uninstall @shaifulshabuj-waymarks/cli @shaifulshabuj-waymarks/server
# 2. Install new packages
npx @way_marks/cli init
# 3. Restart Claude CodeRe-running init also updates your Claude Desktop MCP config to the new
waymark-${projectName} key format required for multi-project support.
Added
- Multi-project support: Each project now gets its own isolated SQLite database
at.waymark/waymark.db, an auto-selected port (3001–3010), and a named MCP
server entry (waymark-${projectName}) in Claude Desktop config. Multiple
Waymark projects can run simultaneously without conflict. - Port auto-selection:
waymark startprobes ports 3001–3010 and picks the
first available one. Port is stored in.waymark/config.json. - Project status command (
waymark status): Shows project name, root, DB
path, port, dashboard URL, MCP key, and whether the server is currently running.
Changed
- Package scope renamed from
@shaifulshabuj-waymarksto@way_marks.
Install withnpm install @way_marks/serverornpx @way_marks/cli init. - CLAUDE.md template now uses mandatory enforcement language with exact MCP
tool names (mcp__waymark-${projectName}__write_file, etc.) instead of polite
suggestions. Claude Code will enforce Waymark tool usage without ambiguity. - MCP server registration now uses
waymark-${projectName}as the Claude
Desktop config key instead of the generic"waymark". Re-runinitin each
project to register the updated key.
Fixed
waymark initno longer overwrites other projects' MCP entries when registering
a new project — it adds/updates only the current project's key.
Breaking changes
- DB location moved from
data/waymark.dbto.waymark/waymark.db.
Existing databases are not migrated automatically. - MCP key in Claude Desktop config changes. Re-run
npx @way_marks/cli init
in each project after upgrading.
[0.4.0] — 2026-04-04
Fixed
- Security: Approving a pending
write_fileaction now re-checks current policies
before writing. If a policy was tightened after the action was queued, the approval
is rejected with an explanation rather than silently executing. - Security: Actions logged without an explicit policy decision no longer default
toallow. The safe default is nowpending. - Behaviour: Paths listed in
requireApprovalno longer holdread_fileactions
pending. Read operations are idempotent — only writes require approval. - Reliability: Bash command output is now capped at
maxBashOutputBytes
(default 10 000) with a[OUTPUT TRUNCATED]marker appended when the limit
is exceeded. - Compatibility: Node binary detection now uses
process.execPathinstead of
reading NVM alias files. Works correctly with Homebrew, system Node, and any
version manager. - CLI:
waymark logsno longer crashes on rows with malformedinput_payload. - CLI: Date display in
waymark logsis now consistent regardless of whether
the database stores timestamps with a space or aTseparator.
[0.3.0] — 2026-04-04
CLI output fixes
- All command hints in CLI output now show the full
npx @way_marks/cli <cmd>form —
works correctly whether Waymark is installed
globally or invoked via npx
[0.2.0] — 2026-04-04
Background daemon mode
waymark startnow runs servers in the background and returns to prompt immediately — closing the terminal no longer stops Waymark- Added
waymark stopcommand for clean shutdown waymark statusnow detects crashed servers and cleans up stale PID files automatically
[0.1.0] — 2026-04-04
First public release
Core Features
- MCP server for native Claude Code integration
- Intercepts write_file, read_file, and bash actions
in real time before execution - Policy engine with four control types:
allowedPaths, blockedPaths,
blockedCommands, requireApproval - Regex pattern support in blockedCommands
for flexible command matching - Rollback any write_file action to its
previous state with one click - Approve or reject pending actions
from the web dashboard - Slack webhook notifications for
pending approval actions - SQLite action ledger — every action logged
with full context and agent reasoning
Developer Experience
- npx @way_marks/cli init — one command project setup
- Auto-generates waymark.config.json
- Auto-generates CLAUDE.md for always-on
Claude Code activation - Auto-registers MCP server in Claude
desktop config - waymark start — launches dashboard
and MCP server together - waymark logs — terminal action viewer
with --pending and --blocked filters - waymark status — quick health check
Security
- Regex-based command blocking catches
pipe-to-shell attacks (curl | bash variants) - Default deny for paths not in allowedPaths
- blockedPaths take priority over allowedPaths
- Pending actions never execute without
explicit human approval - Double-approve and double-rollback guards
v0.6.0
[0.6.0] — 2026-04-16
Added
- (Add changes here)
Changed
- (Add changes here)
Fixed
- (Add changes here)
Changelog
All notable changes to Waymark are documented here.
Format follows Keep a Changelog
Versioning follows Semantic Versioning
[0.5.2] — 2026-04-06
Changed
- Dashboard now shows project name in the header. After running
npx @way_marks/cli start, the dashboard title displays waymark — your-project
instead of a generic "waymark". No configuration required — the name
is derived automatically from the project directory. - New API endpoint
GET /api/projectreturns project metadata
(projectName,port) for UI consumption.
[0.5.1] — 2026-04-06
Changed
- README and CHANGELOG updated with deprecation notice and migration
steps for users coming from@shaifulshabuj-waymarkspackages. - No code changes — docs-only patch release.
[0.5.0] — 2026-04-06
⚠️ Package scope renamed in this release.
@shaifulshabuj-waymarks/cliand@shaifulshabuj-waymarks/serverare now
deprecated on npm. Switch to@way_marks/cliand@way_marks/server.
See migration steps below.
Migration from @shaifulshabuj-waymarks
# 1. Uninstall old packages
npm uninstall @shaifulshabuj-waymarks/cli @shaifulshabuj-waymarks/server
# 2. Install new packages
npx @way_marks/cli init
# 3. Restart Claude CodeRe-running init also updates your Claude Desktop MCP config to the new
waymark-${projectName} key format required for multi-project support.
Added
- Multi-project support: Each project now gets its own isolated SQLite database
at.waymark/waymark.db, an auto-selected port (3001–3010), and a named MCP
server entry (waymark-${projectName}) in Claude Desktop config. Multiple
Waymark projects can run simultaneously without conflict. - Port auto-selection:
waymark startprobes ports 3001–3010 and picks the
first available one. Port is stored in.waymark/config.json. - Project status command (
waymark status): Shows project name, root, DB
path, port, dashboard URL, MCP key, and whether the server is currently running.
Changed
- Package scope renamed from
@shaifulshabuj-waymarksto@way_marks.
Install withnpm install @way_marks/serverornpx @way_marks/cli init. - CLAUDE.md template now uses mandatory enforcement language with exact MCP
tool names (mcp__waymark-${projectName}__write_file, etc.) instead of polite
suggestions. Claude Code will enforce Waymark tool usage without ambiguity. - MCP server registration now uses
waymark-${projectName}as the Claude
Desktop config key instead of the generic"waymark". Re-runinitin each
project to register the updated key.
Fixed
waymark initno longer overwrites other projects' MCP entries when registering
a new project — it adds/updates only the current project's key.
Breaking changes
- DB location moved from
data/waymark.dbto.waymark/waymark.db.
Existing databases are not migrated automatically. - MCP key in Claude Desktop config changes. Re-run
npx @way_marks/cli init
in each project after upgrading.
[0.4.0] — 2026-04-04
Fixed
- Security: Approving a pending
write_fileaction now re-checks current policies
before writing. If a policy was tightened after the action was queued, the approval
is rejected with an explanation rather than silently executing. - Security: Actions logged without an explicit policy decision no longer default
toallow. The safe default is nowpending. - Behaviour: Paths listed in
requireApprovalno longer holdread_fileactions
pending. Read operations are idempotent — only writes require approval. - Reliability: Bash command output is now capped at
maxBashOutputBytes
(default 10 000) with a[OUTPUT TRUNCATED]marker appended when the limit
is exceeded. - Compatibility: Node binary detection now uses
process.execPathinstead of
reading NVM alias files. Works correctly with Homebrew, system Node, and any
version manager. - CLI:
waymark logsno longer crashes on rows with malformedinput_payload. - CLI: Date display in
waymark logsis now consistent regardless of whether
the database stores timestamps with a space or aTseparator.
[0.3.0] — 2026-04-04
CLI output fixes
- All command hints in CLI output now show the full
npx @way_marks/cli <cmd>form —
works correctly whether Waymark is installed
globally or invoked via npx
[0.2.0] — 2026-04-04
Background daemon mode
waymark startnow runs servers in the background and returns to prompt immediately — closing the terminal no longer stops Waymark- Added
waymark stopcommand for clean shutdown waymark statusnow detects crashed servers and cleans up stale PID files automatically
[0.1.0] — 2026-04-04
First public release
Core Features
- MCP server for native Claude Code integration
- Intercepts write_file, read_file, and bash actions
in real time before execution - Policy engine with four control types:
allowedPaths, blockedPaths,
blockedCommands, requireApproval - Regex pattern support in blockedCommands
for flexible command matching - Rollback any write_file action to its
previous state with one click - Approve or reject pending actions
from the web dashboard - Slack webhook notifications for
pending approval actions - SQLite action ledger — every action logged
with full context and agent reasoning
Developer Experience
- npx @way_marks/cli init — one command project setup
- Auto-generates waymark.config.json
- Auto-generates CLAUDE.md for always-on
Claude Code activation - Auto-registers MCP server in Claude
desktop config - waymark start — launches dashboard
and MCP server together - waymark logs — terminal action viewer
with --pending and --blocked filters - waymark status — quick health check
Security
- Regex-based command blocking catches
pipe-to-shell attacks (curl | bash variants) - Default deny for paths not in allowedPaths
- blockedPaths take priority over allowedPaths
- Pending actions never execute without
explicit human approval - Double-approve and double-rollback guards
v0.5.2
Changelog
All notable changes to Waymark are documented here.
Format follows Keep a Changelog
Versioning follows Semantic Versioning
[0.5.2] — 2026-04-06
Changed
- Dashboard now shows project name in the header. After running
npx @way_marks/cli start, the dashboard title displays waymark — your-project
instead of a generic "waymark". No configuration required — the name
is derived automatically from the project directory. - New API endpoint
GET /api/projectreturns project metadata
(projectName,port) for UI consumption.
[0.5.1] — 2026-04-06
Changed
- README and CHANGELOG updated with deprecation notice and migration
steps for users coming from@shaifulshabuj-waymarkspackages. - No code changes — docs-only patch release.
[0.5.0] — 2026-04-06
⚠️ Package scope renamed in this release.
@shaifulshabuj-waymarks/cliand@shaifulshabuj-waymarks/serverare now
deprecated on npm. Switch to@way_marks/cliand@way_marks/server.
See migration steps below.
Migration from @shaifulshabuj-waymarks
# 1. Uninstall old packages
npm uninstall @shaifulshabuj-waymarks/cli @shaifulshabuj-waymarks/server
# 2. Install new packages
npx @way_marks/cli init
# 3. Restart Claude CodeRe-running init also updates your Claude Desktop MCP config to the new
waymark-${projectName} key format required for multi-project support.
Added
- Multi-project support: Each project now gets its own isolated SQLite database
at.waymark/waymark.db, an auto-selected port (3001–3010), and a named MCP
server entry (waymark-${projectName}) in Claude Desktop config. Multiple
Waymark projects can run simultaneously without conflict. - Port auto-selection:
waymark startprobes ports 3001–3010 and picks the
first available one. Port is stored in.waymark/config.json. - Project status command (
waymark status): Shows project name, root, DB
path, port, dashboard URL, MCP key, and whether the server is currently running.
Changed
- Package scope renamed from
@shaifulshabuj-waymarksto@way_marks.
Install withnpm install @way_marks/serverornpx @way_marks/cli init. - CLAUDE.md template now uses mandatory enforcement language with exact MCP
tool names (mcp__waymark-${projectName}__write_file, etc.) instead of polite
suggestions. Claude Code will enforce Waymark tool usage without ambiguity. - MCP server registration now uses
waymark-${projectName}as the Claude
Desktop config key instead of the generic"waymark". Re-runinitin each
project to register the updated key.
Fixed
waymark initno longer overwrites other projects' MCP entries when registering
a new project — it adds/updates only the current project's key.
Breaking changes
- DB location moved from
data/waymark.dbto.waymark/waymark.db.
Existing databases are not migrated automatically. - MCP key in Claude Desktop config changes. Re-run
npx @way_marks/cli init
in each project after upgrading.
[0.4.0] — 2026-04-04
Fixed
- Security: Approving a pending
write_fileaction now re-checks current policies
before writing. If a policy was tightened after the action was queued, the approval
is rejected with an explanation rather than silently executing. - Security: Actions logged without an explicit policy decision no longer default
toallow. The safe default is nowpending. - Behaviour: Paths listed in
requireApprovalno longer holdread_fileactions
pending. Read operations are idempotent — only writes require approval. - Reliability: Bash command output is now capped at
maxBashOutputBytes
(default 10 000) with a[OUTPUT TRUNCATED]marker appended when the limit
is exceeded. - Compatibility: Node binary detection now uses
process.execPathinstead of
reading NVM alias files. Works correctly with Homebrew, system Node, and any
version manager. - CLI:
waymark logsno longer crashes on rows with malformedinput_payload. - CLI: Date display in
waymark logsis now consistent regardless of whether
the database stores timestamps with a space or aTseparator.
[0.3.0] — 2026-04-04
CLI output fixes
- All command hints in CLI output now show the full
npx @way_marks/cli <cmd>form —
works correctly whether Waymark is installed
globally or invoked via npx
[0.2.0] — 2026-04-04
Background daemon mode
waymark startnow runs servers in the background and returns to prompt immediately — closing the terminal no longer stops Waymark- Added
waymark stopcommand for clean shutdown waymark statusnow detects crashed servers and cleans up stale PID files automatically
[0.1.0] — 2026-04-04
First public release
Core Features
- MCP server for native Claude Code integration
- Intercepts write_file, read_file, and bash actions
in real time before execution - Policy engine with four control types:
allowedPaths, blockedPaths,
blockedCommands, requireApproval - Regex pattern support in blockedCommands
for flexible command matching - Rollback any write_file action to its
previous state with one click - Approve or reject pending actions
from the web dashboard - Slack webhook notifications for
pending approval actions - SQLite action ledger — every action logged
with full context and agent reasoning
Developer Experience
- npx @way_marks/cli init — one command project setup
- Auto-generates waymark.config.json
- Auto-generates CLAUDE.md for always-on
Claude Code activation - Auto-registers MCP server in Claude
desktop config - waymark start — launches dashboard
and MCP server together - waymark logs — terminal action viewer
with --pending and --blocked filters - waymark status — quick health check
Security
- Regex-based command blocking catches
pipe-to-shell attacks (curl | bash variants) - Default deny for paths not in allowedPaths
- blockedPaths take priority over allowedPaths
- Pending actions never execute without
explicit human approval - Double-approve and double-rollback guards
v0.5.1
Changelog
All notable changes to Waymark are documented here.
Format follows Keep a Changelog
Versioning follows Semantic Versioning
[0.5.1] — 2026-04-06
Changed
- README and CHANGELOG updated with deprecation notice and migration
steps for users coming from@shaifulshabuj-waymarkspackages. - No code changes — docs-only patch release.
[0.5.0] — 2026-04-06
⚠️ Package scope renamed in this release.
@shaifulshabuj-waymarks/cliand@shaifulshabuj-waymarks/serverare now
deprecated on npm. Switch to@way_marks/cliand@way_marks/server.
See migration steps below.
Migration from @shaifulshabuj-waymarks
# 1. Uninstall old packages
npm uninstall @shaifulshabuj-waymarks/cli @shaifulshabuj-waymarks/server
# 2. Install new packages
npx @way_marks/cli init
# 3. Restart Claude CodeRe-running init also updates your Claude Desktop MCP config to the new
waymark-${projectName} key format required for multi-project support.
Added
- Multi-project support: Each project now gets its own isolated SQLite database
at.waymark/waymark.db, an auto-selected port (3001–3010), and a named MCP
server entry (waymark-${projectName}) in Claude Desktop config. Multiple
Waymark projects can run simultaneously without conflict. - Port auto-selection:
waymark startprobes ports 3001–3010 and picks the
first available one. Port is stored in.waymark/config.json. - Project status command (
waymark status): Shows project name, root, DB
path, port, dashboard URL, MCP key, and whether the server is currently running.
Changed
- Package scope renamed from
@shaifulshabuj-waymarksto@way_marks.
Install withnpm install @way_marks/serverornpx @way_marks/cli init. - CLAUDE.md template now uses mandatory enforcement language with exact MCP
tool names (mcp__waymark-${projectName}__write_file, etc.) instead of polite
suggestions. Claude Code will enforce Waymark tool usage without ambiguity. - MCP server registration now uses
waymark-${projectName}as the Claude
Desktop config key instead of the generic"waymark". Re-runinitin each
project to register the updated key.
Fixed
waymark initno longer overwrites other projects' MCP entries when registering
a new project — it adds/updates only the current project's key.
Breaking changes
- DB location moved from
data/waymark.dbto.waymark/waymark.db.
Existing databases are not migrated automatically. - MCP key in Claude Desktop config changes. Re-run
npx @way_marks/cli init
in each project after upgrading.
[0.4.0] — 2026-04-04
Fixed
- Security: Approving a pending
write_fileaction now re-checks current policies
before writing. If a policy was tightened after the action was queued, the approval
is rejected with an explanation rather than silently executing. - Security: Actions logged without an explicit policy decision no longer default
toallow. The safe default is nowpending. - Behaviour: Paths listed in
requireApprovalno longer holdread_fileactions
pending. Read operations are idempotent — only writes require approval. - Reliability: Bash command output is now capped at
maxBashOutputBytes
(default 10 000) with a[OUTPUT TRUNCATED]marker appended when the limit
is exceeded. - Compatibility: Node binary detection now uses
process.execPathinstead of
reading NVM alias files. Works correctly with Homebrew, system Node, and any
version manager. - CLI:
waymark logsno longer crashes on rows with malformedinput_payload. - CLI: Date display in
waymark logsis now consistent regardless of whether
the database stores timestamps with a space or aTseparator.
[0.3.0] — 2026-04-04
CLI output fixes
- All command hints in CLI output now show the full
npx @way_marks/cli <cmd>form —
works correctly whether Waymark is installed
globally or invoked via npx
[0.2.0] — 2026-04-04
Background daemon mode
waymark startnow runs servers in the background and returns to prompt immediately — closing the terminal no longer stops Waymark- Added
waymark stopcommand for clean shutdown waymark statusnow detects crashed servers and cleans up stale PID files automatically
[0.1.0] — 2026-04-04
First public release
Core Features
- MCP server for native Claude Code integration
- Intercepts write_file, read_file, and bash actions
in real time before execution - Policy engine with four control types:
allowedPaths, blockedPaths,
blockedCommands, requireApproval - Regex pattern support in blockedCommands
for flexible command matching - Rollback any write_file action to its
previous state with one click - Approve or reject pending actions
from the web dashboard - Slack webhook notifications for
pending approval actions - SQLite action ledger — every action logged
with full context and agent reasoning
Developer Experience
- npx @way_marks/cli init — one command project setup
- Auto-generates waymark.config.json
- Auto-generates CLAUDE.md for always-on
Claude Code activation - Auto-registers MCP server in Claude
desktop config - waymark start — launches dashboard
and MCP server together - waymark logs — terminal action viewer
with --pending and --blocked filters - waymark status — quick health check
Security
- Regex-based command blocking catches
pipe-to-shell attacks (curl | bash variants) - Default deny for paths not in allowedPaths
- blockedPaths take priority over allowedPaths
- Pending actions never execute without
explicit human approval - Double-approve and double-rollback guards
v0.5.0
Changelog
All notable changes to Waymark are documented here.
Format follows Keep a Changelog
Versioning follows Semantic Versioning
[0.5.0] — 2026-04-06
Added
- Multi-project support: Each project now gets its own isolated SQLite database
at.waymark/waymark.db, an auto-selected port (3001–3010), and a named MCP
server entry (waymark-${projectName}) in Claude Desktop config. Multiple
Waymark projects can run simultaneously without conflict. - Port auto-selection:
waymark startprobes ports 3001–3010 and picks the
first available one. Port is stored in.waymark/config.json. - Project status command (
waymark status): Shows project name, root, DB
path, port, dashboard URL, MCP key, and whether the server is currently running.
Changed
- Package scope renamed from
@shaifulshabuj-waymarksto@way_marks.
Install withnpm install @way_marks/serverornpx @way_marks/cli init. - CLAUDE.md template now uses mandatory enforcement language with exact MCP
tool names (mcp__waymark-${projectName}__write_file, etc.) instead of polite
suggestions. Claude Code will enforce Waymark tool usage without ambiguity. - MCP server registration now uses
waymark-${projectName}as the Claude
Desktop config key instead of the generic"waymark". Re-runinitin each
project to register the updated key.
Fixed
waymark initno longer overwrites other projects' MCP entries when registering
a new project — it adds/updates only the current project's key.
Breaking changes
- DB location moved from
data/waymark.dbto.waymark/waymark.db.
Existing databases are not migrated automatically. - MCP key in Claude Desktop config changes. Re-run
npx @way_marks/cli init
in each project after upgrading.
[0.4.0] — 2026-04-04
Fixed
- Security: Approving a pending
write_fileaction now re-checks current policies
before writing. If a policy was tightened after the action was queued, the approval
is rejected with an explanation rather than silently executing. - Security: Actions logged without an explicit policy decision no longer default
toallow. The safe default is nowpending. - Behaviour: Paths listed in
requireApprovalno longer holdread_fileactions
pending. Read operations are idempotent — only writes require approval. - Reliability: Bash command output is now capped at
maxBashOutputBytes
(default 10 000) with a[OUTPUT TRUNCATED]marker appended when the limit
is exceeded. - Compatibility: Node binary detection now uses
process.execPathinstead of
reading NVM alias files. Works correctly with Homebrew, system Node, and any
version manager. - CLI:
waymark logsno longer crashes on rows with malformedinput_payload. - CLI: Date display in
waymark logsis now consistent regardless of whether
the database stores timestamps with a space or aTseparator.
[0.3.0] — 2026-04-04
CLI output fixes
- All command hints in CLI output now show the full
npx @way_marks/cli <cmd>form —
works correctly whether Waymark is installed
globally or invoked via npx
[0.2.0] — 2026-04-04
Background daemon mode
waymark startnow runs servers in the background and returns to prompt immediately — closing the terminal no longer stops Waymark- Added
waymark stopcommand for clean shutdown waymark statusnow detects crashed servers and cleans up stale PID files automatically
[0.1.0] — 2026-04-04
First public release
Core Features
- MCP server for native Claude Code integration
- Intercepts write_file, read_file, and bash actions
in real time before execution - Policy engine with four control types:
allowedPaths, blockedPaths,
blockedCommands, requireApproval - Regex pattern support in blockedCommands
for flexible command matching - Rollback any write_file action to its
previous state with one click - Approve or reject pending actions
from the web dashboard - Slack webhook notifications for
pending approval actions - SQLite action ledger — every action logged
with full context and agent reasoning
Developer Experience
- npx @way_marks/cli init — one command project setup
- Auto-generates waymark.config.json
- Auto-generates CLAUDE.md for always-on
Claude Code activation - Auto-registers MCP server in Claude
desktop config - waymark start — launches dashboard
and MCP server together - waymark logs — terminal action viewer
with --pending and --blocked filters - waymark status — quick health check
Security
- Regex-based command blocking catches
pipe-to-shell attacks (curl | bash variants) - Default deny for paths not in allowedPaths
- blockedPaths take priority over allowedPaths
- Pending actions never execute without
explicit human approval - Double-approve and double-rollback guards
v0.4.0
Changelog
All notable changes to Waymark are documented here.
Format follows Keep a Changelog
Versioning follows Semantic Versioning
[0.4.0] — 2026-04-04
Fixed
- Security: Approving a pending
write_fileaction now re-checks current policies
before writing. If a policy was tightened after the action was queued, the approval
is rejected with an explanation rather than silently executing. - Security: Actions logged without an explicit policy decision no longer default
toallow. The safe default is nowpending. - Behaviour: Paths listed in
requireApprovalno longer holdread_fileactions
pending. Read operations are idempotent — only writes require approval. - Reliability: Bash command output is now capped at
maxBashOutputBytes
(default 10 000) with a[OUTPUT TRUNCATED]marker appended when the limit
is exceeded. - Compatibility: Node binary detection now uses
process.execPathinstead of
reading NVM alias files. Works correctly with Homebrew, system Node, and any
version manager. - CLI:
waymark logsno longer crashes on rows with malformedinput_payload. - CLI: Date display in
waymark logsis now consistent regardless of whether
the database stores timestamps with a space or aTseparator.
[0.3.0] — 2026-04-04
CLI output fixes
- All command hints in CLI output now show the full
npx @shaifulshabuj-waymarks/cli <cmd>form —
works correctly whether Waymark is installed
globally or invoked via npx
[0.2.0] — 2026-04-04
Background daemon mode
waymark startnow runs servers in the background and returns to prompt immediately — closing the terminal no longer stops Waymark- Added
waymark stopcommand for clean shutdown waymark statusnow detects crashed servers and cleans up stale PID files automatically
[0.1.0] — 2026-04-04
First public release
Core Features
- MCP server for native Claude Code integration
- Intercepts write_file, read_file, and bash actions
in real time before execution - Policy engine with four control types:
allowedPaths, blockedPaths,
blockedCommands, requireApproval - Regex pattern support in blockedCommands
for flexible command matching - Rollback any write_file action to its
previous state with one click - Approve or reject pending actions
from the web dashboard - Slack webhook notifications for
pending approval actions - SQLite action ledger — every action logged
with full context and agent reasoning
Developer Experience
- npx @shaifulshabuj-waymarks/cli init — one command project setup
- Auto-generates waymark.config.json
- Auto-generates CLAUDE.md for always-on
Claude Code activation - Auto-registers MCP server in Claude
desktop config - waymark start — launches dashboard
and MCP server together - waymark logs — terminal action viewer
with --pending and --blocked filters - waymark status — quick health check
Security
- Regex-based command blocking catches
pipe-to-shell attacks (curl | bash variants) - Default deny for paths not in allowedPaths
- blockedPaths take priority over allowedPaths
- Pending actions never execute without
explicit human approval - Double-approve and double-rollback guards
v0.3.1
Waymark Changelog
This file documents every version of Waymark: what was built, what the original spec asked for, what broke during testing, and how it was fixed. Each entry is written so a human or AI agent can understand not just what changed but why.
v4.1 — Release Preparation & Package Naming (2026-04-04)
What was built
Prepared the monorepo for public release to waymarks/waymark (GitHub) and npm. No application code changed — only release infrastructure, package metadata, and naming fixes.
New files: LICENSE, .env.example, .github/workflows/release.yml, .github/workflows/ci.yml, scripts/pre-release-check.sh, release/README.md, release/CHANGELOG.md.
Modified files: packages/cli/package.json (name, author, license, homepage, repository, bugs, keywords, dependencies), packages/server/package.json (name, description, author, license, homepage, repository, bugs, keywords), packages/cli/src/commands/start.ts (package reference fix), packages/cli/src/commands/init.ts (package reference fixes, 6 occurrences), .gitignore (expanded), release.yml (copy from release/ not root).
Issue 1 — npx waymark package name conflict
Symptom: npm view waymark returned an existing deprecated React router package ([email protected]). Publishing under the name waymark would silently conflict or fail.
Root cause: The unscoped waymark name on npm was already registered. v4.0 had planned to publish as waymark for clean npx waymark init UX.
Fix: Renamed CLI package from "waymark" to "@shaifulshabuj-waymarks/cli". Updated all npx waymark references across release/README.md, release/CHANGELOG.md, README.md, packages/cli/src/commands/init.ts, and dev CHANGELOG.md to npx @shaifulshabuj-waymarks/cli.
The bin entry stays "waymark": "./dist/index.js" — so after install, the CLI command is still waymark start, waymark logs etc. Only the initial npx invocation uses the scoped name.
Issue 2 — Stale @shaifulshabuj-waymarks/server package reference in CLI
Symptom: start.ts and init.ts still referenced @shaifulshabuj-waymarks/server (old name) inside require.resolve() calls. During the rename phase from @waymarks/server back to @shaifulshabuj-waymarks/server, start.ts was fixed but init.ts had 5 additional occurrences that were missed.
Root cause: grep was not run across all CLI source files before closing out the rename. Only start.ts was checked.
Fix: Ran grep -r "@waymarks/" across the full workspace, found 11 occurrences in 4 files, updated all in one pass.
Files fixed:
packages/server/package.json—namefieldpackages/cli/package.json—dependenciesentrypackages/cli/src/commands/start.ts—require.resolvepathpackages/cli/src/commands/init.ts—require.resolve(2×),console.logmessages (3×),spawnSyncinstall arg (1×)
Issue 3 — @shaifulshabuj-waymarks/server missing from CLI dependencies
Symptom: packages/cli/package.json had zero dependencies. When a user runs npx @shaifulshabuj-waymarks/cli start, npm downloads and executes the CLI package in isolation — @shaifulshabuj-waymarks/server would not be present, causing require.resolve('@shaifulshabuj-waymarks/server/dist/...') to throw and fall back to a monorepo-relative path that doesn't exist outside dev.
Root cause: The CLI was designed with zero runtime deps, but @shaifulshabuj-waymarks/server is a required runtime peer — the CLI spawns its processes.
Fix: Added "dependencies": { "@shaifulshabuj-waymarks/server": "0.1.0" } to packages/cli/package.json. npm now installs both packages together when a user runs npx @shaifulshabuj-waymarks/cli.
Issue 4 — Public and dev docs mixed in repo root
Symptom: README.md and CHANGELOG.md at the repo root contained dev-focused documentation (architecture, database schema, for-AI-agents notes, full bug history). The release pipeline (release.yml) was copying these directly to waymarks/waymark (public repo), exposing internal dev notes publicly.
Root cause: Release pipeline used cp README.md /tmp/release/ and cp CHANGELOG.md /tmp/release/ without any distinction between dev and public content.
Fix:
- Created
release/directory with separate public-facing versions:release/README.md— user-facing README (install, config, CLI, Slack, roadmap)release/CHANGELOG.md— public v0.1.0 entry (Core Features, Developer Experience, Security)
- Restored root
README.mdandCHANGELOG.mdto dev versions viagit checkout HEAD - Updated
release.ymlcopy step:- cp README.md /tmp/release/ - cp CHANGELOG.md /tmp/release/ + cp release/README.md /tmp/release/README.md + cp release/CHANGELOG.md /tmp/release/CHANGELOG.md
release/ is committed to the private dev repo — GitHub Actions reads from it at release time. It never appears in the public repo output.
Issue 5 — Org scope vs app name naming inconsistency
Symptom: During initial release prep, server package was renamed @waymarks/server (plural, matching GitHub org waymarks). CLI was named @waymarks/cli. But application and npm package convention uses the app name waymark (singular) as scope.
Root cause: Confusion between GitHub org name (waymarks) and npm package scope convention (@waymark). The org is waymarks; the product is waymark.
Fix: Renamed all packages to use @shaifulshabuj-waymarks/ scope:
@waymarks/cli→@shaifulshabuj-waymarks/cli@waymarks/server→@shaifulshabuj-waymarks/server
The GitHub org waymarks remains for the public repo URL (github.com/waymarks/waymark). The npm scope @shaifulshabuj-waymarks is separate from the GitHub org name.
Release pipeline design
Two-repo strategy: Private dev repo (shaifulshabuj/waymark) triggers the release. Public repo (waymarks/waymark) receives the output. Users interact only with the public repo and npm packages.
Trigger: Push a git tag starting with v to the private repo:
git tag v0.1.0
git push origin v0.1.0Pipeline steps (.github/workflows/release.yml):
npm install + npm run build --workspaces— compiles TypeScript in both packages- Clone
waymarks/waymark→ rsync compiledpackages/+ copyrelease/README.md,release/CHANGELOG.md,LICENSE,package.json,.gitignore,.env.example - Commit + tag + push to public repo under the same tag name
npm publish @shaifulshabuj-waymarks/cli --access publicnpm publish @shaifulshabuj-waymarks/server --access public- Create GitHub Release on
waymarks/waymarkusingrelease/CHANGELOG.md
Both repos get the tag: Private repo gets it first (you push it to trigger CI). Public repo gets it from the pipeline. This is intentional — the public tag is what users see on github.com/waymarks/waymark/releases.
Required secrets (in shaifulshabuj/waymark → Settings → Secrets):
NPM_TOKEN— npm access token with publish rights for the@shaifulshabuj-waymarksscopeRELEASE_REPO_TOKEN— GitHub fine-grained PAT with Contents write onwaymarks/waymark
CI pipeline (.github/workflows/ci.yml): Runs on every push to main and every PR. Steps: install, build, secrets scan (grep for sk-ant, ANTHROPIC_API_KEY, hardcoded npm tokens in source files). Fails the PR if any are found.
Pre-release check script (scripts/pre-release-check.sh): Local sanity check before tagging. Verifies .env not git-tracked, no .db files committed, no obvious secrets in git history, build passes, all required release files exist. Run manually before git tag.
Acceptance tests (all pass)
| Test | Expected | Result |
|---|---|---|
npm view @shaifulshabuj-waymarks/cli |
404 (name available) | ✅ |
npm view @shaifulshabuj-waymarks/server |
404 (name available) | ✅ |
npm run build --workspaces |
Zero errors, @shaifulshabuj-waymarks/[email protected] + @shaifulshabuj-waymarks/[email protected] |
✅ |
node packages/cli/dist/index.js |
Prints usage | ✅ |
node packages/cli/dist/index.js status |
Waymark is not running |
✅ |
node packages/cli/dist/index.js start + curl localhost:3001/api/actions |
API responds with JSON | ✅ |
bash scripts/pre-release-check.sh |
RESULT: PASSED — safe to release |
✅ |
grep -r "@waymarks/" . |
No matches | ✅ |
grep -rn "npx waymark[^/]" in source/docs |
No matches (all updated to npx @shaifulshabuj-waymarks/cli) |
✅ |
What was built
Restructured the project as an npm workspaces monorepo with two packages: @waymark/server (the existing MCP + API server, moved from src/ to packages/server/src/) and @waymark/cli (new package providing waymark init, start, status, and logs commands via npx @waymark/cli).
This eliminates the two adoption blockers from v3.1:
- Claude didn't automatically use Waymark tools — fixed by
waymark initcreatingCLAUDE.mdwith instructions that Claude Code reads on project open - Setup required manual JSON editing of Claude config files — fixed by
waymark initwriting both Claude Desktop and.mcp.jsonconfigs automatically
New files: packages/cli/package.json, packages/cli/tsconfig.json, packages/cli/src/index.ts, packages/cli/src/commands/init.ts, packages/cli/src/commands/start.ts, packages/cli/src/commands/status.ts, packages/cli/src/commands/logs.ts, packages/server/package.json, packages/server/tsconfig.json.
Moved files: src/ → packages/server/src/, tsconfig.json → packages/server/tsconfig.json.
Modified files: package.json (workspace root), packages/server/src/db/database.ts (WAYMARK_PROJECT_ROOT), packages/server/src/policies/engine.ts (WAYMARK_PROJECT_ROOT), packages/server/src/mcp/server.ts (--project-root arg parse at top), .mcp.json (updated path), .claude/launch.json (updated path...
v0.3.0
Waymark Changelog
This file documents every version of Waymark: what was built, what the original spec asked for, what broke during testing, and how it was fixed. Each entry is written so a human or AI agent can understand not just what changed but why.
v4.1 — Release Preparation & Package Naming (2026-04-04)
What was built
Prepared the monorepo for public release to waymarks/waymark (GitHub) and npm. No application code changed — only release infrastructure, package metadata, and naming fixes.
New files: LICENSE, .env.example, .github/workflows/release.yml, .github/workflows/ci.yml, scripts/pre-release-check.sh, release/README.md, release/CHANGELOG.md.
Modified files: packages/cli/package.json (name, author, license, homepage, repository, bugs, keywords, dependencies), packages/server/package.json (name, description, author, license, homepage, repository, bugs, keywords), packages/cli/src/commands/start.ts (package reference fix), packages/cli/src/commands/init.ts (package reference fixes, 6 occurrences), .gitignore (expanded), release.yml (copy from release/ not root).
Issue 1 — npx waymark package name conflict
Symptom: npm view waymark returned an existing deprecated React router package ([email protected]). Publishing under the name waymark would silently conflict or fail.
Root cause: The unscoped waymark name on npm was already registered. v4.0 had planned to publish as waymark for clean npx waymark init UX.
Fix: Renamed CLI package from "waymark" to "@shaifulshabuj-waymarks/cli". Updated all npx waymark references across release/README.md, release/CHANGELOG.md, README.md, packages/cli/src/commands/init.ts, and dev CHANGELOG.md to npx @shaifulshabuj-waymarks/cli.
The bin entry stays "waymark": "./dist/index.js" — so after install, the CLI command is still waymark start, waymark logs etc. Only the initial npx invocation uses the scoped name.
Issue 2 — Stale @shaifulshabuj-waymarks/server package reference in CLI
Symptom: start.ts and init.ts still referenced @shaifulshabuj-waymarks/server (old name) inside require.resolve() calls. During the rename phase from @waymarks/server back to @shaifulshabuj-waymarks/server, start.ts was fixed but init.ts had 5 additional occurrences that were missed.
Root cause: grep was not run across all CLI source files before closing out the rename. Only start.ts was checked.
Fix: Ran grep -r "@waymarks/" across the full workspace, found 11 occurrences in 4 files, updated all in one pass.
Files fixed:
packages/server/package.json—namefieldpackages/cli/package.json—dependenciesentrypackages/cli/src/commands/start.ts—require.resolvepathpackages/cli/src/commands/init.ts—require.resolve(2×),console.logmessages (3×),spawnSyncinstall arg (1×)
Issue 3 — @shaifulshabuj-waymarks/server missing from CLI dependencies
Symptom: packages/cli/package.json had zero dependencies. When a user runs npx @shaifulshabuj-waymarks/cli start, npm downloads and executes the CLI package in isolation — @shaifulshabuj-waymarks/server would not be present, causing require.resolve('@shaifulshabuj-waymarks/server/dist/...') to throw and fall back to a monorepo-relative path that doesn't exist outside dev.
Root cause: The CLI was designed with zero runtime deps, but @shaifulshabuj-waymarks/server is a required runtime peer — the CLI spawns its processes.
Fix: Added "dependencies": { "@shaifulshabuj-waymarks/server": "0.1.0" } to packages/cli/package.json. npm now installs both packages together when a user runs npx @shaifulshabuj-waymarks/cli.
Issue 4 — Public and dev docs mixed in repo root
Symptom: README.md and CHANGELOG.md at the repo root contained dev-focused documentation (architecture, database schema, for-AI-agents notes, full bug history). The release pipeline (release.yml) was copying these directly to waymarks/waymark (public repo), exposing internal dev notes publicly.
Root cause: Release pipeline used cp README.md /tmp/release/ and cp CHANGELOG.md /tmp/release/ without any distinction between dev and public content.
Fix:
- Created
release/directory with separate public-facing versions:release/README.md— user-facing README (install, config, CLI, Slack, roadmap)release/CHANGELOG.md— public v0.1.0 entry (Core Features, Developer Experience, Security)
- Restored root
README.mdandCHANGELOG.mdto dev versions viagit checkout HEAD - Updated
release.ymlcopy step:- cp README.md /tmp/release/ - cp CHANGELOG.md /tmp/release/ + cp release/README.md /tmp/release/README.md + cp release/CHANGELOG.md /tmp/release/CHANGELOG.md
release/ is committed to the private dev repo — GitHub Actions reads from it at release time. It never appears in the public repo output.
Issue 5 — Org scope vs app name naming inconsistency
Symptom: During initial release prep, server package was renamed @waymarks/server (plural, matching GitHub org waymarks). CLI was named @waymarks/cli. But application and npm package convention uses the app name waymark (singular) as scope.
Root cause: Confusion between GitHub org name (waymarks) and npm package scope convention (@waymark). The org is waymarks; the product is waymark.
Fix: Renamed all packages to use @shaifulshabuj-waymarks/ scope:
@waymarks/cli→@shaifulshabuj-waymarks/cli@waymarks/server→@shaifulshabuj-waymarks/server
The GitHub org waymarks remains for the public repo URL (github.com/waymarks/waymark). The npm scope @shaifulshabuj-waymarks is separate from the GitHub org name.
Release pipeline design
Two-repo strategy: Private dev repo (shaifulshabuj/waymark) triggers the release. Public repo (waymarks/waymark) receives the output. Users interact only with the public repo and npm packages.
Trigger: Push a git tag starting with v to the private repo:
git tag v0.1.0
git push origin v0.1.0Pipeline steps (.github/workflows/release.yml):
npm install + npm run build --workspaces— compiles TypeScript in both packages- Clone
waymarks/waymark→ rsync compiledpackages/+ copyrelease/README.md,release/CHANGELOG.md,LICENSE,package.json,.gitignore,.env.example - Commit + tag + push to public repo under the same tag name
npm publish @shaifulshabuj-waymarks/cli --access publicnpm publish @shaifulshabuj-waymarks/server --access public- Create GitHub Release on
waymarks/waymarkusingrelease/CHANGELOG.md
Both repos get the tag: Private repo gets it first (you push it to trigger CI). Public repo gets it from the pipeline. This is intentional — the public tag is what users see on github.com/waymarks/waymark/releases.
Required secrets (in shaifulshabuj/waymark → Settings → Secrets):
NPM_TOKEN— npm access token with publish rights for the@shaifulshabuj-waymarksscopeRELEASE_REPO_TOKEN— GitHub fine-grained PAT with Contents write onwaymarks/waymark
CI pipeline (.github/workflows/ci.yml): Runs on every push to main and every PR. Steps: install, build, secrets scan (grep for sk-ant, ANTHROPIC_API_KEY, hardcoded npm tokens in source files). Fails the PR if any are found.
Pre-release check script (scripts/pre-release-check.sh): Local sanity check before tagging. Verifies .env not git-tracked, no .db files committed, no obvious secrets in git history, build passes, all required release files exist. Run manually before git tag.
Acceptance tests (all pass)
| Test | Expected | Result |
|---|---|---|
npm view @shaifulshabuj-waymarks/cli |
404 (name available) | ✅ |
npm view @shaifulshabuj-waymarks/server |
404 (name available) | ✅ |
npm run build --workspaces |
Zero errors, @shaifulshabuj-waymarks/[email protected] + @shaifulshabuj-waymarks/[email protected] |
✅ |
node packages/cli/dist/index.js |
Prints usage | ✅ |
node packages/cli/dist/index.js status |
Waymark is not running |
✅ |
node packages/cli/dist/index.js start + curl localhost:3001/api/actions |
API responds with JSON | ✅ |
bash scripts/pre-release-check.sh |
RESULT: PASSED — safe to release |
✅ |
grep -r "@waymarks/" . |
No matches | ✅ |
grep -rn "npx waymark[^/]" in source/docs |
No matches (all updated to npx @shaifulshabuj-waymarks/cli) |
✅ |
What was built
Restructured the project as an npm workspaces monorepo with two packages: @waymark/server (the existing MCP + API server, moved from src/ to packages/server/src/) and @waymark/cli (new package providing waymark init, start, status, and logs commands via npx @waymark/cli).
This eliminates the two adoption blockers from v3.1:
- Claude didn't automatically use Waymark tools — fixed by
waymark initcreatingCLAUDE.mdwith instructions that Claude Code reads on project open - Setup required manual JSON editing of Claude config files — fixed by
waymark initwriting both Claude Desktop and.mcp.jsonconfigs automatically
New files: packages/cli/package.json, packages/cli/tsconfig.json, packages/cli/src/index.ts, packages/cli/src/commands/init.ts, packages/cli/src/commands/start.ts, packages/cli/src/commands/status.ts, packages/cli/src/commands/logs.ts, packages/server/package.json, packages/server/tsconfig.json.
Moved files: src/ → packages/server/src/, tsconfig.json → packages/server/tsconfig.json.
Modified files: package.json (workspace root), packages/server/src/db/database.ts (WAYMARK_PROJECT_ROOT), packages/server/src/policies/engine.ts (WAYMARK_PROJECT_ROOT), packages/server/src/mcp/server.ts (--project-root arg parse at top), .mcp.json (updated path), .claude/launch.json (updated path...
v0.2.0
Waymark Changelog
This file documents every version of Waymark: what was built, what the original spec asked for, what broke during testing, and how it was fixed. Each entry is written so a human or AI agent can understand not just what changed but why.
v4.1 — Release Preparation & Package Naming (2026-04-04)
What was built
Prepared the monorepo for public release to waymarks/waymark (GitHub) and npm. No application code changed — only release infrastructure, package metadata, and naming fixes.
New files: LICENSE, .env.example, .github/workflows/release.yml, .github/workflows/ci.yml, scripts/pre-release-check.sh, release/README.md, release/CHANGELOG.md.
Modified files: packages/cli/package.json (name, author, license, homepage, repository, bugs, keywords, dependencies), packages/server/package.json (name, description, author, license, homepage, repository, bugs, keywords), packages/cli/src/commands/start.ts (package reference fix), packages/cli/src/commands/init.ts (package reference fixes, 6 occurrences), .gitignore (expanded), release.yml (copy from release/ not root).
Issue 1 — npx waymark package name conflict
Symptom: npm view waymark returned an existing deprecated React router package ([email protected]). Publishing under the name waymark would silently conflict or fail.
Root cause: The unscoped waymark name on npm was already registered. v4.0 had planned to publish as waymark for clean npx waymark init UX.
Fix: Renamed CLI package from "waymark" to "@waymark/cli". Updated all npx waymark references across release/README.md, release/CHANGELOG.md, README.md, packages/cli/src/commands/init.ts, and dev CHANGELOG.md to npx @waymark/cli.
The bin entry stays "waymark": "./dist/index.js" — so after install, the CLI command is still waymark start, waymark logs etc. Only the initial npx invocation uses the scoped name.
Issue 2 — Stale @waymark/server package reference in CLI
Symptom: start.ts and init.ts still referenced @waymark/server (old name) inside require.resolve() calls. During the rename phase from @waymarks/server back to @waymark/server, start.ts was fixed but init.ts had 5 additional occurrences that were missed.
Root cause: grep was not run across all CLI source files before closing out the rename. Only start.ts was checked.
Fix: Ran grep -r "@waymarks/" across the full workspace, found 11 occurrences in 4 files, updated all in one pass.
Files fixed:
packages/server/package.json—namefieldpackages/cli/package.json—dependenciesentrypackages/cli/src/commands/start.ts—require.resolvepathpackages/cli/src/commands/init.ts—require.resolve(2×),console.logmessages (3×),spawnSyncinstall arg (1×)
Issue 3 — @waymark/server missing from CLI dependencies
Symptom: packages/cli/package.json had zero dependencies. When a user runs npx @waymark/cli start, npm downloads and executes the CLI package in isolation — @waymark/server would not be present, causing require.resolve('@waymark/server/dist/...') to throw and fall back to a monorepo-relative path that doesn't exist outside dev.
Root cause: The CLI was designed with zero runtime deps, but @waymark/server is a required runtime peer — the CLI spawns its processes.
Fix: Added "dependencies": { "@waymark/server": "0.1.0" } to packages/cli/package.json. npm now installs both packages together when a user runs npx @waymark/cli.
Issue 4 — Public and dev docs mixed in repo root
Symptom: README.md and CHANGELOG.md at the repo root contained dev-focused documentation (architecture, database schema, for-AI-agents notes, full bug history). The release pipeline (release.yml) was copying these directly to waymarks/waymark (public repo), exposing internal dev notes publicly.
Root cause: Release pipeline used cp README.md /tmp/release/ and cp CHANGELOG.md /tmp/release/ without any distinction between dev and public content.
Fix:
- Created
release/directory with separate public-facing versions:release/README.md— user-facing README (install, config, CLI, Slack, roadmap)release/CHANGELOG.md— public v0.1.0 entry (Core Features, Developer Experience, Security)
- Restored root
README.mdandCHANGELOG.mdto dev versions viagit checkout HEAD - Updated
release.ymlcopy step:- cp README.md /tmp/release/ - cp CHANGELOG.md /tmp/release/ + cp release/README.md /tmp/release/README.md + cp release/CHANGELOG.md /tmp/release/CHANGELOG.md
release/ is committed to the private dev repo — GitHub Actions reads from it at release time. It never appears in the public repo output.
Issue 5 — Org scope vs app name naming inconsistency
Symptom: During initial release prep, server package was renamed @waymarks/server (plural, matching GitHub org waymarks). CLI was named @waymarks/cli. But application and npm package convention uses the app name waymark (singular) as scope.
Root cause: Confusion between GitHub org name (waymarks) and npm package scope convention (@waymark). The org is waymarks; the product is waymark.
Fix: Renamed all packages to use @waymark/ scope:
@waymarks/cli→@waymark/cli@waymarks/server→@waymark/server
The GitHub org waymarks remains for the public repo URL (github.com/waymarks/waymark). The npm scope @waymark is separate from the GitHub org name.
Release pipeline design
Two-repo strategy: Private dev repo (shaifulshabuj/waymark) triggers the release. Public repo (waymarks/waymark) receives the output. Users interact only with the public repo and npm packages.
Trigger: Push a git tag starting with v to the private repo:
git tag v0.1.0
git push origin v0.1.0Pipeline steps (.github/workflows/release.yml):
npm install + npm run build --workspaces— compiles TypeScript in both packages- Clone
waymarks/waymark→ rsync compiledpackages/+ copyrelease/README.md,release/CHANGELOG.md,LICENSE,package.json,.gitignore,.env.example - Commit + tag + push to public repo under the same tag name
npm publish @waymark/cli --access publicnpm publish @waymark/server --access public- Create GitHub Release on
waymarks/waymarkusingrelease/CHANGELOG.md
Both repos get the tag: Private repo gets it first (you push it to trigger CI). Public repo gets it from the pipeline. This is intentional — the public tag is what users see on github.com/waymarks/waymark/releases.
Required secrets (in shaifulshabuj/waymark → Settings → Secrets):
NPM_TOKEN— npm access token with publish rights for the@waymarkscopeRELEASE_REPO_TOKEN— GitHub fine-grained PAT with Contents write onwaymarks/waymark
CI pipeline (.github/workflows/ci.yml): Runs on every push to main and every PR. Steps: install, build, secrets scan (grep for sk-ant, ANTHROPIC_API_KEY, hardcoded npm tokens in source files). Fails the PR if any are found.
Pre-release check script (scripts/pre-release-check.sh): Local sanity check before tagging. Verifies .env not git-tracked, no .db files committed, no obvious secrets in git history, build passes, all required release files exist. Run manually before git tag.
Acceptance tests (all pass)
| Test | Expected | Result |
|---|---|---|
npm view @waymark/cli |
404 (name available) | ✅ |
npm view @waymark/server |
404 (name available) | ✅ |
npm run build --workspaces |
Zero errors, @waymark/[email protected] + @waymark/[email protected] |
✅ |
node packages/cli/dist/index.js |
Prints usage | ✅ |
node packages/cli/dist/index.js status |
Waymark is not running |
✅ |
node packages/cli/dist/index.js start + curl localhost:3001/api/actions |
API responds with JSON | ✅ |
bash scripts/pre-release-check.sh |
RESULT: PASSED — safe to release |
✅ |
grep -r "@waymarks/" . |
No matches | ✅ |
grep -rn "npx waymark[^/]" in source/docs |
No matches (all updated to npx @waymark/cli) |
✅ |
What was built
Restructured the project as an npm workspaces monorepo with two packages: @waymark/server (the existing MCP + API server, moved from src/ to packages/server/src/) and @waymark/cli (new package providing waymark init, start, status, and logs commands via npx @waymark/cli).
This eliminates the two adoption blockers from v3.1:
- Claude didn't automatically use Waymark tools — fixed by
waymark initcreatingCLAUDE.mdwith instructions that Claude Code reads on project open - Setup required manual JSON editing of Claude config files — fixed by
waymark initwriting both Claude Desktop and.mcp.jsonconfigs automatically
New files: packages/cli/package.json, packages/cli/tsconfig.json, packages/cli/src/index.ts, packages/cli/src/commands/init.ts, packages/cli/src/commands/start.ts, packages/cli/src/commands/status.ts, packages/cli/src/commands/logs.ts, packages/server/package.json, packages/server/tsconfig.json.
Moved files: src/ → packages/server/src/, tsconfig.json → packages/server/tsconfig.json.
Modified files: package.json (workspace root), packages/server/src/db/database.ts (WAYMARK_PROJECT_ROOT), packages/server/src/policies/engine.ts (WAYMARK_PROJECT_ROOT), packages/server/src/mcp/server.ts (--project-root arg parse at top), .mcp.json (updated path), .claude/launch.json (updated path), .claude/settings.json (updated hook paths).
Original spec prompt
Waymark v3.1 works correctly but has two adoption blockers.
Fix both. No new features.Blocker 1: Claude doesn't automatically use Waymark tools
Claude needs to be told "use Waymark tools instead of direct file tools" in every new session.
This breaks the core value...