Skip to content

Add clawdbot extension#24840

Closed
asaphko wants to merge 2 commits intoraycast:mainfrom
asaphko:ext/clawdbot
Closed

Add clawdbot extension#24840
asaphko wants to merge 2 commits intoraycast:mainfrom
asaphko:ext/clawdbot

Conversation

@asaphko
Copy link

@asaphko asaphko commented Jan 25, 2026

Description

Screencast

Checklist

clawdbot-1 clawdbot-2 clawdbot-3

Introduction

This PR introduces the Clawdbot extension for Raycast, allowing users to interact with their Clawdbot AI directly from the Raycast interface.

Features

# Chat with Clawdbot: Engage in full conversations with history.
# Quick Message: Send quick messages and receive replies within Raycast.
# Gateway Status: Monitor the Clawdbot gateway, channels, and sessions.
# Open Webchat: Easily access the Clawdbot web-based chat interface.

Details

# Comprehensive README and initial CHANGELOG included.
# Icons optimized for both light and dark themes.
# Ensures adherence to Raycast's naming and UI guidelines.

We look forward to your review and feedback!

@raycastbot raycastbot added the new extension Label for PRs with new extensions label Jan 25, 2026
@raycastbot
Copy link
Collaborator

Congratulations on your new Raycast extension! 🚀

Due to our current reduced availability, the initial review may take up to 10-15 business days.

Once the PR is approved and merged, the extension will be available on our Store.

@asaphko asaphko marked this pull request as ready for review January 25, 2026 10:29
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 25, 2026

Greptile Overview

Greptile Summary

This PR adds a new Clawdbot extension for Raycast, enabling users to chat with their Clawdbot AI agent directly from Raycast.

Major Issues:

  • Hardcoded /opt/homebrew/bin/clawdbot binary path in all commands will break on Intel Macs, Linux, and Windows - use clawdbot and rely on PATH resolution instead
  • Manual Preferences and Arguments interface definitions conflict with auto-generated types in raycast-env.d.ts
  • CHANGELOG uses hardcoded date instead of {PR_MERGE_DATE} placeholder

What Works Well:

  • Comprehensive feature set with chat, quick message, status, and webchat commands
  • Good documentation in README with installation instructions
  • Proper error handling and loading states
  • Well-structured package.json with appropriate metadata

Confidence Score: 2/5

  • This PR has critical cross-platform compatibility issues that will prevent the extension from working on most systems
  • The hardcoded /opt/homebrew/bin/clawdbot path is a critical bug that breaks the extension on Intel Macs (which use /usr/local/bin), Linux, Windows, and any system with custom installation paths. Manual type definitions also violate Raycast conventions and can cause type conflicts.
  • Pay close attention to src/chat.tsx, src/quick-chat.tsx, and src/status.tsx - all contain hardcoded binary paths that must be fixed

Important Files Changed

Filename Overview
extensions/clawdbot/src/chat.tsx Chat interface with conversation history - hardcoded binary path breaks cross-platform support, manual type definitions conflict with auto-generated types
extensions/clawdbot/src/quick-chat.tsx Quick message command - hardcoded binary path breaks cross-platform support, manual type definitions conflict with auto-generated types
extensions/clawdbot/src/status.tsx Gateway status display with table parsing - hardcoded binary path breaks cross-platform support
extensions/clawdbot/CHANGELOG.md Changelog present with features listed - needs {PR_MERGE_DATE} placeholder instead of hardcoded date

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

8 files reviewed, 8 comments

Edit Code Review Agent Settings | Greptile

Comment on lines +9 to +12
interface Preferences {
webchatUrl: string;
agentId?: string;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't manually define Preferences interface - auto-generated in raycast-env.d.ts

Suggested change
interface Preferences {
webchatUrl: string;
agentId?: string;
}
// Remove this interface - it's auto-generated

Context Used: Rule from dashboard - What: Don't manually define Preferences for getPreferenceValues() or commends Argument interfa... (source)

Comment on lines +13 to +19
interface Preferences {
agentId?: string;
}

interface Arguments {
message: string;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't manually define Preferences and Arguments interfaces - auto-generated in raycast-env.d.ts

Suggested change
interface Preferences {
agentId?: string;
}
interface Arguments {
message: string;
}
// Remove these interfaces - they're auto-generated

Context Used: Rule from dashboard - What: Don't manually define Preferences for getPreferenceValues() or commends Argument interfa... (source)

Comment on lines +3 to +5
interface Preferences {
webchatUrl: string;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't manually define Preferences interface - auto-generated in raycast-env.d.ts

Suggested change
interface Preferences {
webchatUrl: string;
}
// Remove this interface - it's auto-generated

Context Used: Rule from dashboard - What: Don't manually define Preferences for getPreferenceValues() or commends Argument interfa... (source)

Comment on lines +24 to +32
const { stdout } = await execAsync(
`/opt/homebrew/bin/clawdbot agent --local --session-id raycast -m '${escapedMessage}' ${agentFlag} --timeout 120`,
{
encoding: "utf-8",
timeout: 130000,
maxBuffer: 10 * 1024 * 1024,
env: { ...process.env, PATH: `/opt/homebrew/bin:${process.env.PATH}` },
},
);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hardcoded /opt/homebrew/bin/clawdbot path won't work on non-M1/M2 Macs (Intel uses /usr/local/bin), Linux, or Windows

Suggested change
const { stdout } = await execAsync(
`/opt/homebrew/bin/clawdbot agent --local --session-id raycast -m '${escapedMessage}' ${agentFlag} --timeout 120`,
{
encoding: "utf-8",
timeout: 130000,
maxBuffer: 10 * 1024 * 1024,
env: { ...process.env, PATH: `/opt/homebrew/bin:${process.env.PATH}` },
},
);
const { stdout } = await execAsync(
`clawdbot agent --local --session-id raycast -m '${escapedMessage}' ${agentFlag} --timeout 120`,
{
encoding: "utf-8",
timeout: 130000,
maxBuffer: 10 * 1024 * 1024,
},
);

Comment on lines +47 to +57
const result = execSync(
`/opt/homebrew/bin/clawdbot agent --local --session-id raycast -m '${escapedMessage}' ${agentFlag} --timeout 120`,
{
encoding: "utf-8",
timeout: 130000,
maxBuffer: 10 * 1024 * 1024,
env: {
...process.env,
PATH: `/opt/homebrew/bin:${process.env.PATH}`,
},
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hardcoded /opt/homebrew/bin/clawdbot path won't work on non-M1/M2 Macs (Intel uses /usr/local/bin), Linux, or Windows

Suggested change
const result = execSync(
`/opt/homebrew/bin/clawdbot agent --local --session-id raycast -m '${escapedMessage}' ${agentFlag} --timeout 120`,
{
encoding: "utf-8",
timeout: 130000,
maxBuffer: 10 * 1024 * 1024,
env: {
...process.env,
PATH: `/opt/homebrew/bin:${process.env.PATH}`,
},
},
const result = execSync(
`clawdbot agent --local --session-id raycast -m '${escapedMessage}' ${agentFlag} --timeout 120`,
{
encoding: "utf-8",
timeout: 130000,
maxBuffer: 10 * 1024 * 1024,
},
);

Comment on lines +134 to +141
const result = execSync("/opt/homebrew/bin/clawdbot status 2>&1", {
encoding: "utf-8",
timeout: 15000,
env: {
...process.env,
PATH: `/opt/homebrew/bin:${process.env.PATH}`,
},
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hardcoded /opt/homebrew/bin/clawdbot path won't work on non-M1/M2 Macs (Intel uses /usr/local/bin), Linux, or Windows

Suggested change
const result = execSync("/opt/homebrew/bin/clawdbot status 2>&1", {
encoding: "utf-8",
timeout: 15000,
env: {
...process.env,
PATH: `/opt/homebrew/bin:${process.env.PATH}`,
},
});
const result = execSync("clawdbot status 2>&1", {
encoding: "utf-8",
timeout: 15000,
});

Comment on lines +240 to +249
const result = execSync(
"/opt/homebrew/bin/clawdbot status 2>&1",
{
encoding: "utf-8",
timeout: 15000,
env: {
...process.env,
PATH: `/opt/homebrew/bin:${process.env.PATH}`,
},
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hardcoded /opt/homebrew/bin/clawdbot path won't work on non-M1/M2 Macs (Intel uses /usr/local/bin), Linux, or Windows

Suggested change
const result = execSync(
"/opt/homebrew/bin/clawdbot status 2>&1",
{
encoding: "utf-8",
timeout: 15000,
env: {
...process.env,
PATH: `/opt/homebrew/bin:${process.env.PATH}`,
},
},
const result = execSync(
"clawdbot status 2>&1",
{
encoding: "utf-8",
timeout: 15000,
},
);

@@ -0,0 +1,10 @@
# Changelog

## [1.0.0] - 2025-01-25
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use {PR_MERGE_DATE} placeholder instead of hardcoded date

Suggested change
## [1.0.0] - 2025-01-25
## [1.0.0] - {PR_MERGE_DATE}

Context Used: Rule from dashboard - What: Changelog entries must use {PR_MERGE_DATE} placeholder in titles, be placed at the top of th... (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@pernielsentikaer
Copy link
Collaborator

Hi 👋

Thank you for your contribution 🔥

#24848 was submitted a bit after yours. Maybe you can both join forces to create the best possible clawdbot extension for the users?

@pernielsentikaer pernielsentikaer self-assigned this Jan 26, 2026
@leveragedrobot
Copy link
Contributor

Hi @asaphko! Per suggested we collaborate, and I think that's a great idea.

I submitted a similar extension (#24848) that takes a different approach - using the HTTP API instead of CLI, which enables remote access via Tailscale and streaming responses.

That said, I really liked several things from your PR and incorporated them into mine:

  • Your icon (it's great!)
  • The Gateway Status command concept
  • The Open Webchat command

I'd like to credit you as a contributor for these. Would you be okay with me adding you to the README acknowledgments and/or as a contributor on the extension?

I think consolidating on one extension makes sense for users. Let me know your thoughts!

@pernielsentikaer
Copy link
Collaborator

pernielsentikaer commented Jan 26, 2026

Sounds like some good points, not that I know much about clawdbot at all, but sounds like the HTTP API has more advantages - what do you think @asaphko

@pernielsentikaer
Copy link
Collaborator

@asaphko are you around?

@asaphko
Copy link
Author

asaphko commented Jan 29, 2026

Hey @leveragedrobot ! sure, let's collaborate. If you can add me as a contributor, that would be great.

@leveragedrobot
Copy link
Contributor

Thanks @asaphko! I've added you as a contributor to my PR (#24848):

  • Added you to the contributors field in package.json
  • Added acknowledgment in README for the icon and inspiration for Gateway Status / Open Webchat commands

Looking forward to getting this merged! 🎉

@pernielsentikaer
Copy link
Collaborator

Closing as requested, will follow up in #24848

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new extension Label for PRs with new extensions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants