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
def open(cls, root: Path, claude_dir: Path | None=None) -> WorkspaceBuild 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
def default(cls) -> WorkspaceBuild 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
def profiles_dir(self) -> PathPath to the profiles directory.
#tokens_file
def tokens_file(self) -> PathPath to the tokens.json file.
#options_file
def options_file(self) -> PathPath to the options.json file.
#state_file
def state_file(self) -> PathPath to the state.json file.
#config_file
def config_file(self) -> PathPath to the config.json file.
#segments_file
def segments_file(self) -> PathPath to the segments.json file.
#themes_dir
def themes_dir(self) -> PathPath to the themes directory.
#hooks_dir
def hooks_dir(self) -> PathPath to the hooks directory.
#scripts_dir
def scripts_dir(self) -> PathPath to the scripts directory.
#shared_dir
def shared_dir(self) -> PathPath to the shared data directory.
#skills_dir
def skills_dir(self) -> PathPath to the skills directory.
#shared_settings_file
def shared_settings_file(self) -> PathPath to the shared-settings.json file.
#inodes_file
def inodes_file(self) -> PathPath to the inodes.json file in the shared directory.
#tokens
def tokens(self) -> TokenStoreThe path-injected TokenStore over this workspace's tokens.json.
#shared
def shared(self) -> SharedStoreThe path-injected SharedStore over this workspace's shared + skills dirs.
#profiles
def profiles(self) -> ProfileStoreThe path-injected ProfileStore over this workspace's profiles + tokens.
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.
#appconfig
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.