To create a custom builder, the simplest approach is to subclass ClassicWorkspaceBuilder and override the build method.
If writing a builder from scratch, it must implement the tmuxp.workspace.builder.protocol.WorkspaceBuilderProtocol contract, which includes:
- A constructor accepting
session_config, server, and optional plugins and callbacks (on_progress, on_before_script, on_script_output, on_build_event). - The
build(session=None, append=False) method to create or populate the session. - The
session attribute (a libtmux.Session instance). session_exists() and find_current_attached_session() methods for CLI attach/append logic.- Support for the
plugins list and their lifecycle hooks. - Invocation of
on_* callbacks to ensure CLI progress displays remain accurate.
from tmuxp.workspace.builder.classic import ClassicWorkspaceBuilder
class CustomBuilder(ClassicWorkspaceBuilder):
"""A builder that renames the session after building."""
def build(self, session=None, append=False):
super().build(session=session, append=append)
self.session.rename_session(f"{self.session.name}-custom")