AI apps, software development & inspections · Perth since 2002
Let us help you deploy your own OpenClaw agent for remote or local consulting:
Install on a compact machine (Mac mini, Intel NUC, or similar) running Linux or macOS. This gives you a dedicated AI assistant on your local network with direct access to your files, git repos and devices.
Run OpenClaw on a lightweight VM or container in AWS, Azure or DigitalOcean. Secure it behind a firewall/VPN and configure webhooks and cron jobs to manage emails, code, and deployments from anywhere.
Connect your agent to Telegram for interactive DM commands, push notifications and inline menus. The connection can prepare summaries, run scoped tasks and surface progress through messaging. For development work, review and approval boundaries should be agreed before enabling changes to repositories or deployments.
A useful first workflow might prepare a scheduled digest or a development summary. Start with a defined task and check the output before expanding access.
Create a tiny helper that reads your bot token from the OpenClaw config and posts any text to your Telegram DM. Then chain it to the end of a cron script so every digest goes out automatically.
#!/usr/bin/env python3
"""
send_telegram.py - send a Telegram message using the bot token from ~/.openclaw/openclaw.json
Usage:
send_telegram.py ["message text"]
Reads TELEGRAM_CHAT_ID from environment or stdin if no argv provided.
"""
import os, sys, json, urllib.request, urllib.parse
def main():
config_path = os.path.expanduser('~/.openclaw/openclaw.json')
try:
with open(config_path) as f:
cfg = json.load(f)
token = cfg['channels']['telegram']['botToken']
except Exception as e:
print(f"Error reading bot token from {config_path}: {e}", file=sys.stderr)
sys.exit(1)
chat_id = os.getenv('TELEGRAM_CHAT_ID')
if not chat_id:
print("Error: TELEGRAM_CHAT_ID environment variable not set", file=sys.stderr)
sys.exit(1)
if len(sys.argv) > 1:
text = ' '.join(sys.argv[1:])
else:
text = sys.stdin.read().strip()
if not text:
print("Error: no message text provided", file=sys.stderr)
sys.exit(1)
url = f"https://api.telegram.org/bot{token}/sendMessage"
data = {'chat_id': chat_id, 'text': text}
req = urllib.request.Request(
url,
data=urllib.parse.urlencode(data).encode(),
headers={'Content-Type': 'application/x-www-form-urlencoded'}
)
try:
with urllib.request.urlopen(req) as resp:
print(resp.read().decode())
except Exception as e:
print(f"Failed to send message: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == '__main__':
main()
chmod +x send_telegram.py.export TELEGRAM_CHAT_ID=6864308151 (or whatever ID your bot DMs).~/.openclaw/workspace/send_telegram.py "News summary: ..." (or pipe text to it) at the end of a cron job. Every run then pings your Telegram straight away, bypassing flaky internal delivery.When OpenAI retires or renames a model, older OpenClaw installs can suddenly fail with "The model does not exist" or "You don’t have access". The clean fix is to refresh OpenClaw so the setup wizard offers the latest models:
openclaw update (or pull the repo + npm install -g openclaw if you manage it manually) so you’re on the newest release.openclaw setup lets you pick the new OpenAI model, confirm API keys, and write the updated config. During the prompt stage, scroll through the fresh model list (e.g. gpt-5.3-codex, gpt-4o-mini) and select one you actually have access to.openclaw gateway restart (or systemctl restart openclaw, depending on your install) so the agent loads the new model choice.openclaw chat; the error disappears once the config references a valid model.If you rotate between OpenAI, Anthropic, or local models, just re-run openclaw setup whenever an error crops up—the wizard auto-discovers whatever the CLI supports today.
We can help configure an agent around your existing systems and development workflow. We agree the access, review and approval boundaries alongside the integration.
For custom applications, see AI app development. To connect an assistant to an internal system, see custom MCP servers.
Consult the OpenClaw website and its documentation for current setup details.