Self-hosted Linear automation

Turn tagged issues into scheduled meetings.

Linear issue creation can schedule Google Calendar events automatically, and iMessages can be turned into Linear issues through a Shortcut.

Linear -> Google CalendariMessage -> Linear

Core capabilities

Automation for Linear issues, event parsing, and iMessage capture

The project is intentionally narrow: receive a tagged issue, extract schedule data, or capture a new issue from a message.

Linear -> Calendar automation

Tagged Linear issues trigger Google Calendar event creation with invite delivery and label-based filtering.

POST /webhook/linear · default label "calendar"

Description parsing

Parses Start, End, Location, and Attendees from issue text and keeps the remaining body as the meeting notes.

Fields: Start, End, Location, Attendees · missing end defaults to +1 hour

iMessage capture

An iOS Shortcut can POST `@linear` messages to the webhook and create a new Linear issue through the GraphQL API.

POST /webhook/imessage · bearer-token protected endpoint

Setup summary

Install, expose, and run the service in four steps

Summarized from README.md and grouped into the shortest useful onboarding path.

01

Install and authorize

Install the service, create your env file, and run the one-time Google authorization flow.

git clone <your-repo-url>
cd linear-calendar-webhook
npm install
cp .env.example .env
npm run auth
02

Configure environment

Set the core values the service needs for Linear filtering, Google Calendar, and runtime configuration.

LINEAR_WEBHOOK_SECRET=your_secret_here
LINEAR_LABEL_NAME=calendar
GOOGLE_CALENDAR_ID=primary
TIMEZONE=America/Chicago
PORT=3000
03

Expose and register webhook

Run Cloudflare Tunnel, publish a route to localhost:3000, and point Linear issue-create webhooks at the public URL.

docker run -d --restart unless-stopped --network host \
  --name cloudflared cloudflare/cloudflared:latest \
  tunnel --no-autoupdate run --token <your-tunnel-token>

Linear webhook:
https://linear-calendar.yourdomain.com/webhook/linear
04

Optional iMessage flow and Docker run

Add the Shortcut and Messages automation if you want incoming texts containing `@linear` to create issues automatically, then run the service with Docker Compose.

LINEAR_API_KEY=lin_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LINEAR_TEAM_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
IMESSAGE_WEBHOOK_SECRET=some-long-random-string

Messages automation trigger:
incoming message contains "@linear"

Shortcut action:
POST https://linear-calendar-webhook.mihirsahu.sh/webhook/imessage
Header: Authorization: Bearer <your-IMESSAGE_WEBHOOK_SECRET>
Body: { "text": "Shortcut Input" }

docker compose up -d
docker compose logs -f
docker compose down