cc-praxis defines the workspace model. It ships the workspace-init skill, documents the proj/ and wksp/ symlinks, and explains how methodology artifacts should live separately from source code. What it didn’t have was a workspace of its own.

I fixed that today.

Before setting up the workspace, I addressed a small inconsistency in work-end. Step 8g — blog publishing — asked before invoking publish-blog. Every other artifact routing step in the same skill executes silently. One line changed to auto-invoke instead.

Then the workspace.

Claude and I worked through the setup: public, wsp-cc-praxis as the GitHub repo name, prefix style. The first push failed — Permission denied (publickey). SSH keys aren’t configured on this machine. Switching the remote from git@github.com to https://github.com fixed it immediately. Worth noting: the error points at the push, not at the underlying auth gap.

The more interesting decision was CLAUDE.md. The file is 39KB — full project conventions, skill architecture, pre-commit checklist, everything. I chose to migrate it to the workspace rather than keep it in the project repo. That appends the full content to a workspace hub file and symlinks the project’s CLAUDE.md back. Opening Claude in either location loads the same config.

One thing we didn’t migrate: docs/_posts/. Those 17 posts are Jekyll source — they publish at mdproctor.github.io/cc-praxis/blog/ and belong in the project. The workspace has a blog/ staging directory now, but the existing posts stay where they are.

That surfaced a question I haven’t answered. The blog-routing config routes entry_type: note entries to mdproctor.github.io/_notes/. Every casehub post goes there. No cc-praxis post ever has — they live only on the project site. Should that change? I left it open.

The workspace lives at ~/claude/public/cc-praxis/, pushed to mdproctor/wsp-cc-praxis. Navigation symlinks are in place on both sides.


<
Previous Post
What the SSE Stream Was Hiding
>
Next Post
Before the Next Layer, Sweep the Floor