Add Google Calendar
SkillCloud & infraAdd Google Calendar integration to Deus. Agents can list, create, update, and delete calendar events. Guides through GCP OAuth setup, token generation, keep-alive timer, and CLI command installation.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Add Google Calendar skill
What this skill tells your AI
The instructions your AI receives, as published by sliamh11/deus in .claude/skills/add-gcal/SKILL.md and read by ahel’s review.
This skill adds Google Calendar tools to Deus container agents via the built-in @deus-ai/gcal-mcp package. Once set up, agents can list events, create meetings, check availability, and manage calendars from any channel.
Phase 1: Pre-flight
Check if already configured
ls integrations/gcal/credentials.json 2>/dev/null && echo "CREDS_EXIST" || echo "NO_CREDS"
ls integrations/gcal/tokens.json 2>/dev/null && echo "TOKENS_EXIST" || echo "NO_TOKENS"
ls packages/mcp-gcal/dist/index.js 2>/dev/null && echo "PACKAGE_BUILT" || echo "NOT_BUILT"
- If all three exist, skip to Phase 4: Verify.
- If tokens exist but are stale (older than 7 days), skip to Phase 3: Authorize.
- If credentials exist but no tokens, skip to Phase 3: Authorize.
- Otherwise, continue to Phase 2.
Phase 2: GCP Project Setup
Tell the user:
I need you to create Google Cloud OAuth credentials. This is a one-time setup:
- Open https://console.cloud.google.com - create a new project or select an existing one
- Go to APIs & Services > Library, search "Google Calendar API", click Enable
- Go to APIs & Services > Credentials, click + CREATE CREDENTIALS > OAuth client ID
- If prompted for a consent screen: choose External, fill in app name ("Deus") and your email, save
- Application type: Desktop app, name: "Deus"
- Click DOWNLOAD JSON and tell me where you saved it (or paste the contents)
Once the user provides the file path or JSON content:
mkdir -p integrations/gcal
If user gave a path:
cp "<user-provided-path>" integrations/gcal/credentials.json
If user pasted JSON, write it to integrations/gcal/credentials.json.
Verify the file is gitignored:
git check-ignore integrations/gcal/credentials.json || echo "WARNING: credentials.json is NOT gitignored"
Phase 3: Authorize
Build the gcal package (if not already built)
cd packages/mcp-gcal && npm install && npm run build && cd ../..
Ensure googleapis is available for the auth script
npm list googleapis 2>/dev/null | grep -q googleapis || npm install --no-save googleapis
Run the OAuth flow
Tell the user:
I'll start the Google Calendar authorization. A URL will appear - open it in your browser, sign in with your Google account, and grant calendar access. Then paste the authorization code back here.
node scripts/setup-gcal-auth.mjs
This is interactive - the user must paste the code. The script saves tokens to integrations/gcal/tokens.json and verifies the connection.
If the script can't run interactively (e.g., in a container), tell the user:
Run this in a separate terminal:
node scripts/setup-gcal-auth.mjsLet me know when it's done.
Verify tokens were created
ls -la integrations/gcal/tokens.json
Phase 4: Verify
Test the connection
deus gcal ping
Expected output: gcal ping OK: <user-email>
If deus gcal command is not found, the CLI may not have the latest version. Run:
deus auth
Verify container detection
The container agent-runner auto-detects gcal when all three files exist:
packages/mcp-gcal/dist/index.jsintegrations/gcal/credentials.jsonintegrations/gcal/tokens.json
No manual container configuration is needed.
Phase 5: Keep-alive Timer
The Google OAuth refresh token expires after ~7 days of inactivity. Install a daily keep-alive to prevent this:
# macOS only — launchd/launchctl is macOS-specific. For Linux see the systemd section below.
DEUS_HOME="$(pwd)"
DEUS_BIN="$(command -v deus)"
sed -e "s|__DEUS_BIN__|$DEUS_BIN|g" \
-e "s|__DEUS_HOME__|$DEUS_HOME|g" \
-e "s|__USER_HOME__|$HOME|g" \
setup/com.deus.gcal-keepalive.plist.template \
> ~/Library/LaunchAgents/com.deus.gcal-keepalive.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.deus.gcal-keepalive.plist 2>/dev/null || launchctl kickstart gui/$(id -u)/com.deus.gcal-keepalive
Verify it's running:
launchctl list | grep gcal-keepalive
For Linux
Create a systemd timer instead:
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/deus-gcal-keepalive.service << 'EOF'
[Unit]
Description=Deus Google Calendar keep-alive
[Service]
Type=oneshot
ExecStart=/usr/local/bin/deus gcal ping
EOF
cat > ~/.config/systemd/user/deus-gcal-keepalive.timer << 'EOF'
[Unit]
Description=Daily Deus gcal keep-alive
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
EOF
systemctl --user enable --now deus-gcal-keepalive.timer
Phase 6: Restart Deus
deus auth
Tell the user:
Google Calendar is now connected. Your agents can list events, create meetings, and check availability from any channel.
CLI commands:
deus gcal- show token statusdeus gcal auth- re-authorize (if token expires)deus gcal ping- test connection / keep token aliveFrom chat: Just ask naturally - "What's on my calendar tomorrow?", "Schedule a meeting at 3pm", etc.
Removal
-
Remove the keep-alive timer:
launchctl bootout gui/$(id -u)/com.deus.gcal-keepalive 2>/dev/null rm ~/Library/LaunchAgents/com.deus.gcal-keepalive.plist -
Remove tokens (keeps credentials for easy re-setup):
rm integrations/gcal/tokens.json -
Remove everything:
rm -rf integrations/gcal/ -
Restart Deus:
deus auth
Signals
- GitHub stars
- 51
- Forks
- 4
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packages
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
add-gcal- Source
- github.com/sliamh11/deus