diff --git a/workspace.go b/workspace.go
index a8ad102..6d79998 100644
--- a/workspace.go
+++ b/workspace.go
@@ -2,6 +2,7 @@ package gptscript
 
 import (
 	"context"
+	"os"
 	"strings"
 )
 
@@ -19,9 +20,24 @@ func (g *GPTScript) CreateWorkspace(ctx context.Context, providerType string, fr
 	return strings.TrimSpace(out), nil
 }
 
-func (g *GPTScript) DeleteWorkspace(ctx context.Context, workspaceID string) error {
+type DeleteWorkspaceOptions struct {
+	WorkspaceID string
+}
+
+func (g *GPTScript) DeleteWorkspace(ctx context.Context, opts ...DeleteWorkspaceOptions) error {
+	var opt DeleteWorkspaceOptions
+	for _, o := range opts {
+		if o.WorkspaceID != "" {
+			opt.WorkspaceID = o.WorkspaceID
+		}
+	}
+
+	if opt.WorkspaceID == "" {
+		opt.WorkspaceID = os.Getenv("GPTSCRIPT_WORKSPACE_ID")
+	}
+
 	_, err := g.runBasicCommand(ctx, "workspaces/delete", map[string]any{
-		"id":            workspaceID,
+		"id":            opt.WorkspaceID,
 		"workspaceTool": g.globalOpts.WorkspaceTool,
 		"env":           g.globalOpts.Env,
 	})
@@ -30,19 +46,27 @@ func (g *GPTScript) DeleteWorkspace(ctx context.Context, workspaceID string) err
 }
 
 type ListFilesInWorkspaceOptions struct {
-	Prefix string
+	WorkspaceID string
+	Prefix      string
 }
 
-func (g *GPTScript) ListFilesInWorkspace(ctx context.Context, workspaceID string, opts ...ListFilesInWorkspaceOptions) ([]string, error) {
+func (g *GPTScript) ListFilesInWorkspace(ctx context.Context, opts ...ListFilesInWorkspaceOptions) ([]string, error) {
 	var opt ListFilesInWorkspaceOptions
 	for _, o := range opts {
 		if o.Prefix != "" {
 			opt.Prefix = o.Prefix
 		}
+		if o.WorkspaceID != "" {
+			opt.WorkspaceID = o.WorkspaceID
+		}
+	}
+
+	if opt.WorkspaceID == "" {
+		opt.WorkspaceID = os.Getenv("GPTSCRIPT_WORKSPACE_ID")
 	}
 
 	out, err := g.runBasicCommand(ctx, "workspaces/list", map[string]any{
-		"id":            workspaceID,
+		"id":            opt.WorkspaceID,
 		"prefix":        opt.Prefix,
 		"workspaceTool": g.globalOpts.WorkspaceTool,
 		"env":           g.globalOpts.Env,
@@ -54,10 +78,29 @@ func (g *GPTScript) ListFilesInWorkspace(ctx context.Context, workspaceID string
 	return strings.Split(strings.TrimSpace(out), "\n"), nil
 }
 
-func (g *GPTScript) RemoveAllWithPrefix(ctx context.Context, workspaceID, prefix string) error {
+type RemoveAllOptions struct {
+	WorkspaceID string
+	WithPrefix  string
+}
+
+func (g *GPTScript) RemoveAll(ctx context.Context, opts ...RemoveAllOptions) error {
+	var opt RemoveAllOptions
+	for _, o := range opts {
+		if o.WithPrefix != "" {
+			opt.WithPrefix = o.WithPrefix
+		}
+		if o.WorkspaceID != "" {
+			opt.WorkspaceID = o.WorkspaceID
+		}
+	}
+
+	if opt.WorkspaceID == "" {
+		opt.WorkspaceID = os.Getenv("GPTSCRIPT_WORKSPACE_ID")
+	}
+
 	_, err := g.runBasicCommand(ctx, "workspaces/remove-all-with-prefix", map[string]any{
-		"id":            workspaceID,
-		"prefix":        prefix,
+		"id":            opt.WorkspaceID,
+		"prefix":        opt.WithPrefix,
 		"workspaceTool": g.globalOpts.WorkspaceTool,
 		"env":           g.globalOpts.Env,
 	})
@@ -65,9 +108,24 @@ func (g *GPTScript) RemoveAllWithPrefix(ctx context.Context, workspaceID, prefix
 	return err
 }
 
-func (g *GPTScript) WriteFileInWorkspace(ctx context.Context, workspaceID, filePath string, contents []byte) error {
+type WriteFileInWorkspaceOptions struct {
+	WorkspaceID string
+}
+
+func (g *GPTScript) WriteFileInWorkspace(ctx context.Context, filePath string, contents []byte, opts ...WriteFileInWorkspaceOptions) error {
+	var opt WriteFileInWorkspaceOptions
+	for _, o := range opts {
+		if o.WorkspaceID != "" {
+			opt.WorkspaceID = o.WorkspaceID
+		}
+	}
+
+	if opt.WorkspaceID == "" {
+		opt.WorkspaceID = os.Getenv("GPTSCRIPT_WORKSPACE_ID")
+	}
+
 	_, err := g.runBasicCommand(ctx, "workspaces/write-file", map[string]any{
-		"id":            workspaceID,
+		"id":            opt.WorkspaceID,
 		"contents":      contents,
 		"filePath":      filePath,
 		"workspaceTool": g.globalOpts.WorkspaceTool,
@@ -77,9 +135,24 @@ func (g *GPTScript) WriteFileInWorkspace(ctx context.Context, workspaceID, fileP
 	return err
 }
 
-func (g *GPTScript) DeleteFileInWorkspace(ctx context.Context, workspaceID, filePath string) error {
+type DeleteFileInWorkspaceOptions struct {
+	WorkspaceID string
+}
+
+func (g *GPTScript) DeleteFileInWorkspace(ctx context.Context, filePath string, opts ...DeleteFileInWorkspaceOptions) error {
+	var opt DeleteFileInWorkspaceOptions
+	for _, o := range opts {
+		if o.WorkspaceID != "" {
+			opt.WorkspaceID = o.WorkspaceID
+		}
+	}
+
+	if opt.WorkspaceID == "" {
+		opt.WorkspaceID = os.Getenv("GPTSCRIPT_WORKSPACE_ID")
+	}
+
 	_, err := g.runBasicCommand(ctx, "workspaces/delete-file", map[string]any{
-		"id":            workspaceID,
+		"id":            opt.WorkspaceID,
 		"filePath":      filePath,
 		"workspaceTool": g.globalOpts.WorkspaceTool,
 		"env":           g.globalOpts.Env,
@@ -88,9 +161,24 @@ func (g *GPTScript) DeleteFileInWorkspace(ctx context.Context, workspaceID, file
 	return err
 }
 
-func (g *GPTScript) ReadFileInWorkspace(ctx context.Context, workspaceID, filePath string) ([]byte, error) {
+type ReadFileInWorkspaceOptions struct {
+	WorkspaceID string
+}
+
+func (g *GPTScript) ReadFileInWorkspace(ctx context.Context, filePath string, opts ...ReadFileInWorkspaceOptions) ([]byte, error) {
+	var opt ReadFileInWorkspaceOptions
+	for _, o := range opts {
+		if o.WorkspaceID != "" {
+			opt.WorkspaceID = o.WorkspaceID
+		}
+	}
+
+	if opt.WorkspaceID == "" {
+		opt.WorkspaceID = os.Getenv("GPTSCRIPT_WORKSPACE_ID")
+	}
+
 	out, err := g.runBasicCommand(ctx, "workspaces/read-file", map[string]any{
-		"id":            workspaceID,
+		"id":            opt.WorkspaceID,
 		"filePath":      filePath,
 		"workspaceTool": g.globalOpts.WorkspaceTool,
 		"env":           g.globalOpts.Env,
diff --git a/workspace_test.go b/workspace_test.go
index 6df5c3e..a7ff08c 100644
--- a/workspace_test.go
+++ b/workspace_test.go
@@ -13,7 +13,7 @@ func TestCreateAndDeleteWorkspace(t *testing.T) {
 		t.Fatalf("Error creating workspace: %v", err)
 	}
 
-	err = g.DeleteWorkspace(context.Background(), id)
+	err = g.DeleteWorkspace(context.Background(), DeleteWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Errorf("Error deleting workspace: %v", err)
 	}
@@ -26,18 +26,18 @@ func TestWriteReadAndDeleteFileFromWorkspace(t *testing.T) {
 	}
 
 	t.Cleanup(func() {
-		err := g.DeleteWorkspace(context.Background(), id)
+		err := g.DeleteWorkspace(context.Background(), DeleteWorkspaceOptions{WorkspaceID: id})
 		if err != nil {
 			t.Errorf("Error deleting workspace: %v", err)
 		}
 	})
 
-	err = g.WriteFileInWorkspace(context.Background(), id, "test.txt", []byte("test"))
+	err = g.WriteFileInWorkspace(context.Background(), "test.txt", []byte("test"), WriteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error creating file: %v", err)
 	}
 
-	content, err := g.ReadFileInWorkspace(context.Background(), id, "test.txt")
+	content, err := g.ReadFileInWorkspace(context.Background(), "test.txt", ReadFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Errorf("Error reading file: %v", err)
 	}
@@ -46,7 +46,7 @@ func TestWriteReadAndDeleteFileFromWorkspace(t *testing.T) {
 		t.Errorf("Unexpected content: %s", content)
 	}
 
-	err = g.DeleteFileInWorkspace(context.Background(), id, "test.txt")
+	err = g.DeleteFileInWorkspace(context.Background(), "test.txt", DeleteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Errorf("Error deleting file: %v", err)
 	}
@@ -59,34 +59,34 @@ func TestLsComplexWorkspace(t *testing.T) {
 	}
 
 	t.Cleanup(func() {
-		err := g.DeleteWorkspace(context.Background(), id)
+		err := g.DeleteWorkspace(context.Background(), DeleteWorkspaceOptions{WorkspaceID: id})
 		if err != nil {
 			t.Errorf("Error deleting workspace: %v", err)
 		}
 	})
 
-	err = g.WriteFileInWorkspace(context.Background(), id, "test/test1.txt", []byte("hello1"))
+	err = g.WriteFileInWorkspace(context.Background(), "test/test1.txt", []byte("hello1"), WriteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error creating file: %v", err)
 	}
 
-	err = g.WriteFileInWorkspace(context.Background(), id, "test1/test2.txt", []byte("hello2"))
+	err = g.WriteFileInWorkspace(context.Background(), "test1/test2.txt", []byte("hello2"), WriteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error creating file: %v", err)
 	}
 
-	err = g.WriteFileInWorkspace(context.Background(), id, "test1/test3.txt", []byte("hello3"))
+	err = g.WriteFileInWorkspace(context.Background(), "test1/test3.txt", []byte("hello3"), WriteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error creating file: %v", err)
 	}
 
-	err = g.WriteFileInWorkspace(context.Background(), id, ".hidden.txt", []byte("hidden"))
+	err = g.WriteFileInWorkspace(context.Background(), ".hidden.txt", []byte("hidden"), WriteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error creating hidden file: %v", err)
 	}
 
 	// List all files
-	content, err := g.ListFilesInWorkspace(context.Background(), id)
+	content, err := g.ListFilesInWorkspace(context.Background(), ListFilesInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error listing files: %v", err)
 	}
@@ -96,7 +96,7 @@ func TestLsComplexWorkspace(t *testing.T) {
 	}
 
 	// List files in subdirectory
-	content, err = g.ListFilesInWorkspace(context.Background(), id, ListFilesInWorkspaceOptions{Prefix: "test1"})
+	content, err = g.ListFilesInWorkspace(context.Background(), ListFilesInWorkspaceOptions{WorkspaceID: id, Prefix: "test1"})
 	if err != nil {
 		t.Fatalf("Error listing files: %v", err)
 	}
@@ -106,13 +106,13 @@ func TestLsComplexWorkspace(t *testing.T) {
 	}
 
 	// Remove all files with test1 prefix
-	err = g.RemoveAllWithPrefix(context.Background(), id, "test1")
+	err = g.RemoveAll(context.Background(), RemoveAllOptions{WorkspaceID: id, WithPrefix: "test1"})
 	if err != nil {
 		t.Fatalf("Error removing files: %v", err)
 	}
 
 	// List files in subdirectory
-	content, err = g.ListFilesInWorkspace(context.Background(), id)
+	content, err = g.ListFilesInWorkspace(context.Background(), ListFilesInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error listing files: %v", err)
 	}
@@ -132,7 +132,7 @@ func TestCreateAndDeleteWorkspaceS3(t *testing.T) {
 		t.Fatalf("Error creating workspace: %v", err)
 	}
 
-	err = g.DeleteWorkspace(context.Background(), id)
+	err = g.DeleteWorkspace(context.Background(), DeleteWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Errorf("Error deleting workspace: %v", err)
 	}
@@ -149,18 +149,18 @@ func TestWriteReadAndDeleteFileFromWorkspaceS3(t *testing.T) {
 	}
 
 	t.Cleanup(func() {
-		err := g.DeleteWorkspace(context.Background(), id)
+		err := g.DeleteWorkspace(context.Background(), DeleteWorkspaceOptions{WorkspaceID: id})
 		if err != nil {
 			t.Errorf("Error deleting workspace: %v", err)
 		}
 	})
 
-	err = g.WriteFileInWorkspace(context.Background(), id, "test.txt", []byte("test"))
+	err = g.WriteFileInWorkspace(context.Background(), "test.txt", []byte("test"), WriteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error creating file: %v", err)
 	}
 
-	content, err := g.ReadFileInWorkspace(context.Background(), id, "test.txt")
+	content, err := g.ReadFileInWorkspace(context.Background(), "test.txt", ReadFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Errorf("Error reading file: %v", err)
 	}
@@ -169,7 +169,7 @@ func TestWriteReadAndDeleteFileFromWorkspaceS3(t *testing.T) {
 		t.Errorf("Unexpected content: %s", content)
 	}
 
-	err = g.DeleteFileInWorkspace(context.Background(), id, "test.txt")
+	err = g.DeleteFileInWorkspace(context.Background(), "test.txt", DeleteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Errorf("Error deleting file: %v", err)
 	}
@@ -186,34 +186,34 @@ func TestLsComplexWorkspaceS3(t *testing.T) {
 	}
 
 	t.Cleanup(func() {
-		err := g.DeleteWorkspace(context.Background(), id)
+		err := g.DeleteWorkspace(context.Background(), DeleteWorkspaceOptions{WorkspaceID: id})
 		if err != nil {
 			t.Errorf("Error deleting workspace: %v", err)
 		}
 	})
 
-	err = g.WriteFileInWorkspace(context.Background(), id, "test/test1.txt", []byte("hello1"))
+	err = g.WriteFileInWorkspace(context.Background(), "test/test1.txt", []byte("hello1"), WriteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error creating file: %v", err)
 	}
 
-	err = g.WriteFileInWorkspace(context.Background(), id, "test1/test2.txt", []byte("hello2"))
+	err = g.WriteFileInWorkspace(context.Background(), "test1/test2.txt", []byte("hello2"), WriteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error creating file: %v", err)
 	}
 
-	err = g.WriteFileInWorkspace(context.Background(), id, "test1/test3.txt", []byte("hello3"))
+	err = g.WriteFileInWorkspace(context.Background(), "test1/test3.txt", []byte("hello3"), WriteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error creating file: %v", err)
 	}
 
-	err = g.WriteFileInWorkspace(context.Background(), id, ".hidden.txt", []byte("hidden"))
+	err = g.WriteFileInWorkspace(context.Background(), ".hidden.txt", []byte("hidden"), WriteFileInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error creating hidden file: %v", err)
 	}
 
 	// List all files
-	content, err := g.ListFilesInWorkspace(context.Background(), id)
+	content, err := g.ListFilesInWorkspace(context.Background(), ListFilesInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error listing files: %v", err)
 	}
@@ -223,7 +223,7 @@ func TestLsComplexWorkspaceS3(t *testing.T) {
 	}
 
 	// List files in subdirectory
-	content, err = g.ListFilesInWorkspace(context.Background(), id, ListFilesInWorkspaceOptions{Prefix: "test1"})
+	content, err = g.ListFilesInWorkspace(context.Background(), ListFilesInWorkspaceOptions{WorkspaceID: id, Prefix: "test1"})
 	if err != nil {
 		t.Fatalf("Error listing files: %v", err)
 	}
@@ -233,13 +233,13 @@ func TestLsComplexWorkspaceS3(t *testing.T) {
 	}
 
 	// Remove all files with test1 prefix
-	err = g.RemoveAllWithPrefix(context.Background(), id, "test1")
+	err = g.RemoveAll(context.Background(), RemoveAllOptions{WorkspaceID: id, WithPrefix: "test1"})
 	if err != nil {
 		t.Fatalf("Error removing files: %v", err)
 	}
 
 	// List files in subdirectory
-	content, err = g.ListFilesInWorkspace(context.Background(), id)
+	content, err = g.ListFilesInWorkspace(context.Background(), ListFilesInWorkspaceOptions{WorkspaceID: id})
 	if err != nil {
 		t.Fatalf("Error listing files: %v", err)
 	}