Skip to content
claudewheel.workspace
Edit
On this page

Workspace: the single root object owning all claudewheel filesystem paths.

#claudewheel.workspace

#claudewheel.workspace

Workspace: the single root object owning all claudewheel filesystem paths.

#Workspace

Immutable owner of every claudewheel filesystem path, rooted at root.

Path properties are derived purely from root; store accessors hand back path-injected facades. Construction performs zero filesystem or terminal I/O -- it is pure value assembly. The only env var read in the entire package (CLAUDEWHEEL_CONFIG_DIR) lives in :meth:default.

#open

python
def open(cls, root: Path, claude_dir: Path | None=None) -> Workspace

Build a Workspace at root. Pure value construction -- no I/O.

claude_dir defaults to Path.home()/".claude" evaluated at call time (never at import), so a poisoned/sandboxed home is honored.

#default

python
def default(cls) -> Workspace

Build the default Workspace, honoring CLAUDEWHEEL_CONFIG_DIR.

This is the ONLY place in the package that reads the CLAUDEWHEEL_CONFIG_DIR env var. When set, its expanduser'd value is the root; otherwise the root is Path.home()/".claudewheel".

#profiles_dir

python
def profiles_dir(self) -> Path

Path to the profiles directory.

#options_file

python
def options_file(self) -> Path

Path to the options.json file.

#state_file

python
def state_file(self) -> Path

Path to the state.json file.

#config_file

python
def config_file(self) -> Path

Path to the config.json file.

#segments_file

python
def segments_file(self) -> Path

Path to the segments.json file.

#themes_dir

python
def themes_dir(self) -> Path

Path to the themes directory.

#hooks_dir

python
def hooks_dir(self) -> Path

Path to the hooks directory.

#scripts_dir

python
def scripts_dir(self) -> Path

Path to the scripts directory.

#shared_dir

python
def shared_dir(self) -> Path

Path to the shared data directory.

#skills_dir

python
def skills_dir(self) -> Path

Path to the skills directory.

#shared_settings_file

python
def shared_settings_file(self) -> Path

Path to the shared-settings.json file.

#inodes_file

python
def inodes_file(self) -> Path

Path to the inodes.json file in the shared directory.

#shared

python
def shared(self) -> SharedStore

The path-injected SharedStore over this workspace's shared + skills dirs.

#profiles

python
def profiles(self) -> ProfileStore

The path-injected ProfileStore over this workspace's profiles.

Wires ALL write-path stores (shared/options/state) so the store's write operations (create/delete/rename/recover) are usable; the read APIs work with or without them. Token data is per profile, reached through ProfileStore.data_for.

#appconfig

python
def appconfig(self) -> 'AppConfigStore'

Construct the workspace-backed :class:AppConfigStore.

This is a METHOD, not a property, because construction has side effects (it ensures dirs, runs schema migrations, recovers interrupted profile renames, and materializes shared-settings.json). Making the cost explicit at the call site is deliberate. The import is local to avoid an import cycle -- config imports workspace types for hints, so workspace must not import config at module top.

More tools from this site

  • claudestream Drive Claude Code from Python: run it as a subprocess and read its output as typed events, with async and sync sessions, sandbox policies, and tools you define in Python
  • dirstat Fast, single-binary directory statistics CLI: every file under a tree grouped by format, with counts, sizes, and lines of code, as a colored terminal table or as JSON
  • fastware A batteries-included ASGI framework: msgspec JSON, a managed Granian server, dependency injection, SSE, WebSockets, auth, and a test client
  • go-toml-edit Zero-dep TOML editing library for Go with comment preservation
  • howmuchleft The fastest Claude Code statusline: context window, 5-hour, and weekly limit usage as three customizable gradient bars, rendering in about 6 ms
  • orxtra
  • pgdesign
  • predraw Declarative rendering pipeline: describe a scene in JSON and get SVG, PNG and WebP out, with light and dark style tokens, reusable components and text converted to path outlines
  • reposummary Turn a git repository's history into a Markdown journal: pick a time window or revision range and get a readable digest of what changed, optionally narrated by an LLM
  • rlsbl Release orchestration and project scaffolding CLI that bumps versions, validates a structured JSONL changelog, tags only the commit CI verified, and publishes to npm, PyPI, Go and more
  • safegit git wrapper CLI that gives each commit its own temporary index and retries ref updates on conflict, so concurrent agents share one repository
  • saferm Command-line replacement for rm that archives every deletion with a mandatory reason and the context it ran in, so deleted files can be listed, inspected and restored
  • selfdoc Static Site Generator that builds a project's documentation site directly from its source code, so the docs can never drift from the code they describe, with SEO/AEO, first-class blog, search, and cross-project linking built in
  • strictcli
  • stricttest An always-on test-isolation floor: a pytest plugin and a Go env-hygiene module that make a test suite structurally unable to reach real credentials, the real HOME, the network, or the development repository.
  • wesktop A Python framework that turns an ASGI web app into a desktop application, serving it from a local Granian server and displaying it in a native OS window via pywebview
Search