---
slug: "runline"
source_type: "readme"
source_url: "https://cdn.jsdelivr.net/gh/Michaelliv/runline@main/README.md"
repo: "https://github.com/Michaelliv/runline"
source_file: "README.md"
branch: "main"
---
# runline ⚡

Code mode for agents.

Turn any API or host capability into a callable action. Install a plugin, write JavaScript, call actions. Code runs in a QuickJS WASM runtime with plugin globals; enable the built-in `node` plugin when you want filesystem, path, OS, process, crypto, shell, and fetch actions.

```bash
npm install -g runline
```

## Quick Start

```bash
npm install -g runline
runline init
runline connection add bf --plugin brandfetch --set apiKey=xxx

runline exec 'return await brandfetch.brand.getColors({ domain: "nike.com" })'
# => [{ hex: "#E5E5E5", type: "accent" }, { hex: "#111111", type: "dark" }, ...]
```

All 203 built-in plugins ship bundled inside `runline` — no per-plugin install step. Just add a connection for the one you want to use. Agent code runs in a QuickJS runtime: each configured plugin is a top-level global, dot-chain into resource and action. Configure the built-in `node` plugin for host work like `node.fs.readFile`, `node.process.execFile`, `node.path.join`, `node.crypto.hash`, and `node.fetch`.

```js
// agent writes this
const company = await brandfetch.brand.getCompany({ domain: "stripe.com" });
const deals = await pipedrive.deal.list({ limit: 10 });
const issue = await github.issue.create({
  owner: "acme", repo: "api",
  title: `New lead: ${company.name}`,
  body: `${deals.length} open deals`
});
return { company: company.name, issue: issue.number };
```

## Plugins

203 built-in plugins covering popular SaaS, DevOps, productivity, image-generation APIs, and host Node capabilities. All ship with the package — no separate install needed.

Set the env var shown in the Auth column, add a connection, and go:

```bash
export GITHUB_TOKEN=ghp_xxx
runline connection add gh --plugin github --set token=$GITHUB_TOKEN
runline exec 'return await github.user.listRepos({ username: "torvalds" })'
```

<!-- BEGIN PLUGIN TABLE -->
<!-- Generated by: node scripts/generate-plugin-table.js -->
| Plugin | Actions | Resources | Auth |
|--------|--------:|-----------|------|
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/actionNetwork.svg" width="16" height="16" style="vertical-align: middle"> **actionNetwork** | 23 | attendance, event, person, petition, signature, tag, personTag | `ACTION_NETWORK_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/activeCampaign.svg" width="16" height="16" style="vertical-align: middle"> **activeCampaign** | 48 | contact, account, accountContact, contactTag, contactList, list, tag, deal, connection, ecomCustomer, ecomOrder, ecomOrderProduct | `ACTIVE_CAMPAIGN_API_URL`, `ACTIVE_CAMPAIGN_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/adalo.svg" width="16" height="16" style="vertical-align: middle"> **adalo** | 5 | collection | `ADALO_APP_ID`, `ADALO_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/affinity.svg" width="16" height="16" style="vertical-align: middle"> **affinity** | 16 | list, listEntry, person, organization | `AFFINITY_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/agileCrm.png" width="16" height="16" style="vertical-align: middle"> **agileCrm** | 15 | contact, company, deal | `AGILE_CRM_SUBDOMAIN`, `AGILE_CRM_EMAIL`, `AGILE_CRM_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/airtable.svg" width="16" height="16" style="vertical-align: middle"> **airtable** | 10 | base, record | `AIRTABLE_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/airtop.svg" width="16" height="16" style="vertical-align: middle"> **airtop** | 24 | session, window, extraction, interaction, agent, file | `AIRTOP_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/apiTemplateIo.svg" width="16" height="16" style="vertical-align: middle"> **apiTemplateIo** | 4 | account, template, image, pdf | `API_TEMPLATE_IO_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/asana.svg" width="16" height="16" style="vertical-align: middle"> **asana** | 22 | task, subtask, taskComment, taskTag, taskProject, user, project | `ASANA_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/autopilot.svg" width="16" height="16" style="vertical-align: middle"> **autopilot** | 11 | contact, contactJourney, contactList, list | `AUTOPILOT_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/bambooHr.svg" width="16" height="16" style="vertical-align: middle"> **bambooHr** | 11 | employee, employeeDocument, file, companyReport | `BAMBOO_HR_SUBDOMAIN`, `BAMBOO_HR_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/bannerbear.png" width="16" height="16" style="vertical-align: middle"> **bannerbear** | 4 | image, template | `BANNERBEAR_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/baserow.svg" width="16" height="16" style="vertical-align: middle"> **baserow** | 8 | row | `BASEROW_HOST`, `BASEROW_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/beeminder.png" width="16" height="16" style="vertical-align: middle"> **beeminder** | 18 | datapoint, charge, goal, user | `BEEMINDER_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/bitly.svg" width="16" height="16" style="vertical-align: middle"> **bitly** | 3 | link | `BITLY_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/bitwarden.svg" width="16" height="16" style="vertical-align: middle"> **bitwarden** | 19 | collection, event, group, member | `BITWARDEN_CLIENT_ID`, `BITWARDEN_CLIENT_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/box.svg" width="16" height="16" style="vertical-align: middle"> **box** | 11 | file, folder | `BOX_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/brandfetch.svg" width="16" height="16" style="vertical-align: middle"> **brandfetch** | 5 | brand | `BRANDFETCH_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/brevo.svg" width="16" height="16" style="vertical-align: middle"> **brevo** | 15 | contact, attribute, email, sender | `BREVO_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/bubble.svg" width="16" height="16" style="vertical-align: middle"> **bubble** | 5 | object | `BUBBLE_API_TOKEN`, `BUBBLE_APP_NAME` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/chargebee.png" width="16" height="16" style="vertical-align: middle"> **chargebee** | 5 | customer, invoice, subscription | `CHARGEBEE_ACCOUNT_NAME`, `CHARGEBEE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/circleci.svg" width="16" height="16" style="vertical-align: middle"> **circleci** | 3 | pipeline | `CIRCLECI_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/ciscoWebex.svg" width="16" height="16" style="vertical-align: middle"> **ciscoWebex** | 10 | message, meeting | `WEBEX_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/clearbit.svg" width="16" height="16" style="vertical-align: middle"> **clearbit** | 3 | person, company | `CLEARBIT_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/clickup.svg" width="16" height="16" style="vertical-align: middle"> **clickup** | 61 | checklist, checklistItem, comment, folder, goal, goalKeyResult, guest, task, taskTag, taskList, taskDependency, spaceTag, list, timeEntry, timeEntryTag | `CLICKUP_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/clockify.svg" width="16" height="16" style="vertical-align: middle"> **clockify** | 25 | client, project, tag, task, timeEntry, user, workspace | `CLOCKIFY_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/cloudflare.svg" width="16" height="16" style="vertical-align: middle"> **cloudflare** | 4 | zoneCertificate | `CLOUDFLARE_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/cockpit.svg" width="16" height="16" style="vertical-align: middle"> **cockpit** | 5 | collection, form, singleton | `COCKPIT_URL`, `COCKPIT_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/coda.svg" width="16" height="16" style="vertical-align: middle"> **coda** | 18 | table, formula, control, view | `CODA_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/coingecko.svg" width="16" height="16" style="vertical-align: middle"> **coingecko** | 10 | coin, event |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/contentful.svg" width="16" height="16" style="vertical-align: middle"> **contentful** | 7 | space, contentType, entry, asset, locale | `CONTENTFUL_SPACE_ID`, `CONTENTFUL_DELIVERY_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/convertkit.svg" width="16" height="16" style="vertical-align: middle"> **convertkit** | 16 | customField, form, sequence, tag, tagSubscriber | `CONVERTKIT_API_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/copper.svg" width="16" height="16" style="vertical-align: middle"> **copper** | 32 | company, lead, opportunity, person, project, task, customerSource, user | `COPPER_API_KEY`, `COPPER_EMAIL` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/cortex.svg" width="16" height="16" style="vertical-align: middle"> **cortex** | 4 | analyzer, job, responder | `CORTEX_HOST`, `CORTEX_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/currents.svg" width="16" height="16" style="vertical-align: middle"> **currents** | 22 | action, instance, project, run, signature, specFile, test, testResult | `CURRENTS_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/customerIo.svg" width="16" height="16" style="vertical-align: middle"> **customerIo** | 9 | campaign, customer, event, segment | `CUSTOMERIO_SITE_ID`, `CUSTOMERIO_TRACKING_API_KEY`, `CUSTOMERIO_APP_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/databricks.svg" width="16" height="16" style="vertical-align: middle"> **databricks** | 34 | sql, files, genie, modelServing, catalog, table, volume, function, vectorSearch | `DATABRICKS_HOST`, `DATABRICKS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/deepl.svg" width="16" height="16" style="vertical-align: middle"> **deepl** | 2 | language | `DEEPL_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/demio.svg" width="16" height="16" style="vertical-align: middle"> **demio** | 4 | event, report | `DEMIO_API_KEY`, `DEMIO_API_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/dhl.svg" width="16" height="16" style="vertical-align: middle"> **dhl** | 1 | shipment | `DHL_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/dineplan.svg" width="16" height="16" style="vertical-align: middle"> **dineplan** | 18 | auth, restaurant, availability, user, search, reservation, listing |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/discord.svg" width="16" height="16" style="vertical-align: middle"> **discord** | 13 | channel, member, message | `DISCORD_BOT_TOKEN`, `DISCORD_GUILD_ID` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/discourse.svg" width="16" height="16" style="vertical-align: middle"> **discourse** | 16 | category, group, post, user, userGroup | `DISCOURSE_HOST`, `DISCOURSE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/disqus.svg" width="16" height="16" style="vertical-align: middle"> **disqus** | 4 | forum | `DISQUS_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/docker.svg" width="16" height="16" style="vertical-align: middle"> **docker** | 5 | containers, images | — |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/drift.svg" width="16" height="16" style="vertical-align: middle"> **drift** | 5 | contact | `DRIFT_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/dropbox.svg" width="16" height="16" style="vertical-align: middle"> **dropbox** | 9 | file, folder, search | `DROPBOX_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/dropcontact.svg" width="16" height="16" style="vertical-align: middle"> **dropcontact** | 2 | contact | `DROPCONTACT_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/egoi.svg" width="16" height="16" style="vertical-align: middle"> **egoi** | 4 | contact | `EGOI_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/elasticsearch.svg" width="16" height="16" style="vertical-align: middle"> **elasticsearch** | 9 | document, index | `ELASTICSEARCH_URL` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/emelia.svg" width="16" height="16" style="vertical-align: middle"> **emelia** | 9 | campaign, contactList | `EMELIA_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/erpnext.svg" width="16" height="16" style="vertical-align: middle"> **erpnext** | 5 | document | `ERPNEXT_HOST`, `ERPNEXT_API_KEY`, `ERPNEXT_API_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/facebookGraph.svg" width="16" height="16" style="vertical-align: middle"> **facebookGraph** | 1 | request | `FACEBOOK_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/freshdesk.svg" width="16" height="16" style="vertical-align: middle"> **freshdesk** | 10 | ticket, contact | `FRESHDESK_DOMAIN`, `FRESHDESK_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/freshservice.svg" width="16" height="16" style="vertical-align: middle"> **freshservice** | 77 | agent, agentGroup, announcement, asset, assetType, change, department, location, problem, product, release, requester, requesterGroup, software, ticket, agentRole | `FRESHSERVICE_DOMAIN`, `FRESHSERVICE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/freshworksCrm.svg" width="16" height="16" style="vertical-align: middle"> **freshworksCrm** | 35 | account, appointment, contact, deal, note, salesActivity, task, search | `FRESHWORKS_CRM_DOMAIN`, `FRESHWORKS_CRM_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/getresponse.png" width="16" height="16" style="vertical-align: middle"> **getresponse** | 5 | contact | `GETRESPONSE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/ghost.svg" width="16" height="16" style="vertical-align: middle"> **ghost** | 5 | post | `GHOST_URL`, `GHOST_ADMIN_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/github.svg" width="16" height="16" style="vertical-align: middle"> **github** | 37 | file, issue, release, commit, branch, repository, review, user, organization, workflow | `GITHUB_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/gitlab.svg" width="16" height="16" style="vertical-align: middle"> **gitlab** | 17 | issue, release, repository, user, file | `GITLAB_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/gmail.svg" width="16" height="16" style="vertical-align: middle"> **gmail** | 32 | message, thread, draft, label, profile, alias |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/gong.svg" width="16" height="16" style="vertical-align: middle"> **gong** | 4 | call, user | `GONG_ACCESS_KEY`, `GONG_ACCESS_KEY_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/googleAppsScript.svg" width="16" height="16" style="vertical-align: middle"> **googleAppsScript** | 10 | script, project, file, version, deployment, function, process |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/googleCalendar.svg" width="16" height="16" style="vertical-align: middle"> **googleCalendar** | 22 | calendar, event, freeBusy, calendarList, acl, settings |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/googleContacts.svg" width="16" height="16" style="vertical-align: middle"> **googleContacts** | 10 | contact, group |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/googleDocs.svg" width="16" height="16" style="vertical-align: middle"> **googleDocs** | 30 | document |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/googleDrive.svg" width="16" height="16" style="vertical-align: middle"> **googleDrive** | 47 | file, folder, fileFolder, drive, comment, reply, revision, changes, permission, accessProposal, about |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/googleImage.svg" width="16" height="16" style="vertical-align: middle"> **googleImage** | 1 | image | `GOOGLE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/googleSheets.svg" width="16" height="16" style="vertical-align: middle"> **googleSheets** | 13 | spreadsheet, sheet |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/googleSlides.svg" width="16" height="16" style="vertical-align: middle"> **googleSlides** | 7 | presentation, page |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/googleTasks.svg" width="16" height="16" style="vertical-align: middle"> **googleTasks** | 12 | taskList, task |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/gotify.png" width="16" height="16" style="vertical-align: middle"> **gotify** | 3 | message | `GOTIFY_URL`, `GOTIFY_APP_TOKEN`, `GOTIFY_CLIENT_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/gotowebinar.svg" width="16" height="16" style="vertical-align: middle"> **gotowebinar** | 20 | webinar, registrant, session, attendee, coorganizer, panelist | `GOTO_ACCESS_TOKEN`, `GOTO_ORGANIZER_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/grafana.svg" width="16" height="16" style="vertical-align: middle"> **grafana** | 17 | dashboard, team, teamMember, user | `GRAFANA_URL`, `GRAFANA_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/graphql.svg" width="16" height="16" style="vertical-align: middle"> **graphql** | 2 | query, introspect | `GRAPHQL_ENDPOINT` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/grist.svg" width="16" height="16" style="vertical-align: middle"> **grist** | 4 | record | `GRIST_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/hackernews.svg" width="16" height="16" style="vertical-align: middle"> **hackernews** | 6 | article, user, all | — |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/halopsa.svg" width="16" height="16" style="vertical-align: middle"> **halopsa** | 20 | client, site, ticket, user | `HALOPSA_API_URL`, `HALOPSA_CLIENT_ID`, `HALOPSA_CLIENT_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/harvest.png" width="16" height="16" style="vertical-align: middle"> **harvest** | 49 | client, project, task, contact, invoice, expense, estimate, user, timeEntry, company | `HARVEST_TOKEN`, `HARVEST_ACCOUNT_ID` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/helpscout.svg" width="16" height="16" style="vertical-align: middle"> **helpscout** | 13 | conversation, customer, mailbox, thread | `HELPSCOUT_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/highlevel.svg" width="16" height="16" style="vertical-align: middle"> **highlevel** | 17 | contact, opportunity, task, calendar | `HIGHLEVEL_ACCESS_TOKEN`, `HIGHLEVEL_LOCATION_ID` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/homeAssistant.svg" width="16" height="16" style="vertical-align: middle"> **homeAssistant** | 13 | config, service, state, event, log, template, history | `HASS_HOST`, `HASS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/hubspot.svg" width="16" height="16" style="vertical-align: middle"> **hubspot** | 32 | contact, company, deal, ticket, contactList, engagement, form | `HUBSPOT_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/humanticAi.svg" width="16" height="16" style="vertical-align: middle"> **humanticAi** | 3 | profile | `HUMANTIC_AI_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/hunter.png" width="16" height="16" style="vertical-align: middle"> **hunter** | 3 | domainSearch, emailFinder, emailVerifier | `HUNTER_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/intercom.svg" width="16" height="16" style="vertical-align: middle"> **intercom** | 10 | contact, company | `INTERCOM_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/iterable.png" width="16" height="16" style="vertical-align: middle"> **iterable** | 6 | event, user, userList | `ITERABLE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/jenkins.svg" width="16" height="16" style="vertical-align: middle"> **jenkins** | 11 | job, build, instance | `JENKINS_URL`, `JENKINS_USER`, `JENKINS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/jira.svg" width="16" height="16" style="vertical-align: middle"> **jira** | 16 | issue, issueComment, user | `JIRA_DOMAIN`, `JIRA_EMAIL`, `JIRA_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/keap.png" width="16" height="16" style="vertical-align: middle"> **keap** | 28 | company, contact, contactNote, contactTag, order, product, email, file | `KEAP_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/kobotoolbox.svg" width="16" height="16" style="vertical-align: middle"> **kobotoolbox** | 17 | form, submission, hook, file | `KOBOTOOLBOX_URL`, `KOBOTOOLBOX_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/lemlist.svg" width="16" height="16" style="vertical-align: middle"> **lemlist** | 15 | activity, campaign, lead, team, unsubscribe, enrich | `LEMLIST_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/linear.svg" width="16" height="16" style="vertical-align: middle"> **linear** | 88 | issue, comment, state, label, project, milestone, projectUpdate, view, cycle, initiative, team, user, attachment, org, webhook | `LINEAR_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/lingvanex.png" width="16" height="16" style="vertical-align: middle"> **lingvanex** | 1 | translate | `LINGVANEX_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/linkedin.svg" width="16" height="16" style="vertical-align: middle"> **linkedin** | 1 | post | `LINKEDIN_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/lonescale.svg" width="16" height="16" style="vertical-align: middle"> **lonescale** | 4 | list, item | `LONESCALE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/magento.svg" width="16" height="16" style="vertical-align: middle"> **magento** | 15 | customer, invoice, order, product | `MAGENTO_HOST`, `MAGENTO_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/mailcheck.svg" width="16" height="16" style="vertical-align: middle"> **mailcheck** | 1 | email | `MAILCHECK_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/mailchimp.svg" width="16" height="16" style="vertical-align: middle"> **mailchimp** | 14 | member, memberTag, listGroup, campaign | `MAILCHIMP_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/mailerlite.svg" width="16" height="16" style="vertical-align: middle"> **mailerlite** | 4 | subscriber | `MAILERLITE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/mailgun.svg" width="16" height="16" style="vertical-align: middle"> **mailgun** | 1 | email | `MAILGUN_API_KEY`, `MAILGUN_EMAIL_DOMAIN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/mailjet.svg" width="16" height="16" style="vertical-align: middle"> **mailjet** | 3 | email, sms | `MAILJET_API_KEY`, `MAILJET_SECRET_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/mandrill.svg" width="16" height="16" style="vertical-align: middle"> **mandrill** | 2 | message | `MANDRILL_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/marketstack.svg" width="16" height="16" style="vertical-align: middle"> **marketstack** | 3 | endOfDayData, exchange, ticker | `MARKETSTACK_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/matrix.svg" width="16" height="16" style="vertical-align: middle"> **matrix** | 10 | account, room, message, event, roomMember | `MATRIX_HOMESERVER_URL`, `MATRIX_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/mattermost.svg" width="16" height="16" style="vertical-align: middle"> **mattermost** | 19 | channel, message, reaction, user | `MATTERMOST_URL`, `MATTERMOST_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/mautic.svg" width="16" height="16" style="vertical-align: middle"> **mautic** | 20 | company, contact, contactSegment, campaignContact, companyContact, segmentEmail | `MAUTIC_URL`, `MAUTIC_USERNAME`, `MAUTIC_PASSWORD` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/medium.svg" width="16" height="16" style="vertical-align: middle"> **medium** | 3 | post, publication, me | `MEDIUM_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/messagebird.svg" width="16" height="16" style="vertical-align: middle"> **messagebird** | 2 | sms, balance | `MESSAGEBIRD_ACCESS_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/metabase.svg" width="16" height="16" style="vertical-align: middle"> **metabase** | 10 | question, alert, database, metric | `METABASE_URL`, `METABASE_SESSION_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/microsoftCalendar.svg" width="16" height="16" style="vertical-align: middle"> **microsoftCalendar** | 2 | calendar, event |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/microsoftFiles.svg" width="16" height="16" style="vertical-align: middle"> **microsoftFiles** | 5 | files, folder |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/microsoftMail.svg" width="16" height="16" style="vertical-align: middle"> **microsoftMail** | 4 | mail |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/misp.svg" width="16" height="16" style="vertical-align: middle"> **misp** | 44 | attribute, event, eventTag, feed, galaxy, noticelist, object, organisation, tag, user, warninglist | `MISP_URL`, `MISP_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/mocean.svg" width="16" height="16" style="vertical-align: middle"> **mocean** | 2 | sms, voice | `MOCEAN_API_KEY`, `MOCEAN_API_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/monday.svg" width="16" height="16" style="vertical-align: middle"> **monday** | 18 | board, boardColumn, boardGroup, boardItem | `MONDAY_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/monicaCrm.svg" width="16" height="16" style="vertical-align: middle"> **monicaCrm** | 45 | contact, activity, note, task, tag, journalEntry, reminder, call, conversation | `MONICA_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/msg91.svg" width="16" height="16" style="vertical-align: middle"> **msg91** | 1 | sms | `MSG91_AUTHKEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/nasa.svg" width="16" height="16" style="vertical-align: middle"> **nasa** | 14 | apod, asteroidNeoFeed, asteroidNeoLookup, asteroidNeoBrowse, donki, earthAssets | `NASA_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/netlify.svg" width="16" height="16" style="vertical-align: middle"> **netlify** | 7 | deploy, site | `NETLIFY_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/netscalerAdc.svg" width="16" height="16" style="vertical-align: middle"> **netscalerAdc** | 3 | certificate, file | `NETSCALER_URL`, `NETSCALER_USERNAME`, `NETSCALER_PASSWORD` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/nextcloud.svg" width="16" height="16" style="vertical-align: middle"> **nextcloud** | 13 | file, folder, user | `NEXTCLOUD_WEBDAV_URL`, `NEXTCLOUD_USERNAME`, `NEXTCLOUD_PASSWORD` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/nocodb.svg" width="16" height="16" style="vertical-align: middle"> **nocodb** | 5 | row | `NOCODB_HOST`, `NOCODB_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/node.svg" width="16" height="16" style="vertical-align: middle"> **node** | 38 | fs, path, os, process, crypto, fetch | — |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/notion.svg" width="16" height="16" style="vertical-align: middle"> **notion** | 14 | block, database, page, user | `NOTION_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/npm.svg" width="16" height="16" style="vertical-align: middle"> **npm** | 5 | package, distTag |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/odoo.svg" width="16" height="16" style="vertical-align: middle"> **odoo** | 6 | record, model | `ODOO_URL`, `ODOO_USERNAME`, `ODOO_PASSWORD` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/okta.svg" width="16" height="16" style="vertical-align: middle"> **okta** | 5 | user | `OKTA_URL`, `OKTA_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/oneSimpleApi.svg" width="16" height="16" style="vertical-align: middle"> **oneSimpleApi** | 10 | website, socialProfile, information, utility | `ONE_SIMPLE_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/onfleet.svg" width="16" height="16" style="vertical-align: middle"> **onfleet** | 34 | organization, task, worker, admin, hub, team, recipient, container, destination | `ONFLEET_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/openai.svg" width="16" height="16" style="vertical-align: middle"> **openai** | 1 | image | `OPENAI_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/openThesaurus.png" width="16" height="16" style="vertical-align: middle"> **openThesaurus** | 1 | synonyms | — |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/openweathermap.svg" width="16" height="16" style="vertical-align: middle"> **openweathermap** | 2 | weather | `OPENWEATHERMAP_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/oura.svg" width="16" height="16" style="vertical-align: middle"> **oura** | 4 | profile, summary | `OURA_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/paddle.svg" width="16" height="16" style="vertical-align: middle"> **paddle** | 9 | coupon, payment, plan, product, user | `PADDLE_VENDOR_ID`, `PADDLE_VENDOR_AUTH_CODE` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/pagerduty.svg" width="16" height="16" style="vertical-align: middle"> **pagerduty** | 9 | incident, incidentNote, logEntry, user | `PAGERDUTY_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/parallel.svg" width="16" height="16" style="vertical-align: middle"> **parallel** | 1 | search | `PARALLEL_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/paypal.svg" width="16" height="16" style="vertical-align: middle"> **paypal** | 4 | payout, payoutItem | `PAYPAL_CLIENT_ID`, `PAYPAL_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/peekalink.png" width="16" height="16" style="vertical-align: middle"> **peekalink** | 2 | link | `PEEKALINK_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/phantombuster.png" width="16" height="16" style="vertical-align: middle"> **phantombuster** | 5 | agent | `PHANTOMBUSTER_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/philipsHue.svg" width="16" height="16" style="vertical-align: middle"> **philipsHue** | 4 | light | `PHILIPS_HUE_ACCESS_TOKEN`, `PHILIPS_HUE_USERNAME` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/pipedrive.svg" width="16" height="16" style="vertical-align: middle"> **pipedrive** | 47 | activity, deal, dealProduct, file, lead, note, organization, person, product | `PIPEDRIVE_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/plivo.svg" width="16" height="16" style="vertical-align: middle"> **plivo** | 3 | sms, mms, call | `PLIVO_AUTH_ID`, `PLIVO_AUTH_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/postbin.svg" width="16" height="16" style="vertical-align: middle"> **postbin** | 6 | bin, request | — |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/posthog.svg" width="16" height="16" style="vertical-align: middle"> **posthog** | 5 | alias, event, identity, track | `POSTHOG_URL`, `POSTHOG_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/profitwell.svg" width="16" height="16" style="vertical-align: middle"> **profitwell** | 2 | company, metric | `PROFITWELL_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/pushbullet.svg" width="16" height="16" style="vertical-align: middle"> **pushbullet** | 4 | push | `PUSHBULLET_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/pushcut.png" width="16" height="16" style="vertical-align: middle"> **pushcut** | 1 | notification | `PUSHCUT_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/pushover.svg" width="16" height="16" style="vertical-align: middle"> **pushover** | 1 | message | `PUSHOVER_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/quickbase.png" width="16" height="16" style="vertical-align: middle"> **quickbase** | 8 | field, file, record, report | `QUICKBASE_HOSTNAME`, `QUICKBASE_USER_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/quickbooks.svg" width="16" height="16" style="vertical-align: middle"> **quickbooks** | 45 | bill, customer, employee, estimate, invoice, item, payment, purchase, vendor | `QUICKBOOKS_ACCESS_TOKEN`, `QUICKBOOKS_COMPANY_ID` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/quickchart.svg" width="16" height="16" style="vertical-align: middle"> **quickchart** | 1 | chart | — |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/raindrop.svg" width="16" height="16" style="vertical-align: middle"> **raindrop** | 13 | bookmark, collection, tag, user | `RAINDROP_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/recraft.svg" width="16" height="16" style="vertical-align: middle"> **recraft** | 1 | image | `RECRAFT_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/reddit.svg" width="16" height="16" style="vertical-align: middle"> **reddit** | 10 | post, comment, subreddit, user |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/replicate.svg" width="16" height="16" style="vertical-align: middle"> **replicate** | 1 | image | `REPLICATE_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/rocketchat.svg" width="16" height="16" style="vertical-align: middle"> **rocketchat** | 1 | chat | `ROCKETCHAT_DOMAIN`, `ROCKETCHAT_USER_ID`, `ROCKETCHAT_AUTH_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/rundeck.svg" width="16" height="16" style="vertical-align: middle"> **rundeck** | 2 | job | `RUNDECK_URL`, `RUNDECK_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/salesforce.svg" width="16" height="16" style="vertical-align: middle"> **salesforce** | 48 | account, contact, lead, opportunity, case, task, user, sobject, soql | `SALESFORCE_INSTANCE_URL`, `SALESFORCE_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/salesmate.png" width="16" height="16" style="vertical-align: middle"> **salesmate** | 15 | company, activity, deal | `SALESMATE_SESSION_TOKEN`, `SALESMATE_LINKNAME` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/securityScorecard.svg" width="16" height="16" style="vertical-align: middle"> **securityScorecard** | 14 | company, industry, portfolio, portfolioCompany, invite, report | `SECURITYSCORECARD_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/segment.svg" width="16" height="16" style="vertical-align: middle"> **segment** | 4 | identify, track, group | `SEGMENT_WRITE_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/sendgrid.svg" width="16" height="16" style="vertical-align: middle"> **sendgrid** | 10 | mail, contact, list | `SENDGRID_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/sendy.png" width="16" height="16" style="vertical-align: middle"> **sendy** | 6 | campaign, subscriber | `SENDY_URL`, `SENDY_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/sentry.svg" width="16" height="16" style="vertical-align: middle"> **sentry** | 21 | event, issue, organization, project, release, team | `SENTRY_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/servicenow.svg" width="16" height="16" style="vertical-align: middle"> **servicenow** | 40 | incident, user, userGroup, userRole, businessService, configurationItem, department, tableRecord | `SERVICENOW_SUBDOMAIN`, `SERVICENOW_USERNAME`, `SERVICENOW_PASSWORD` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/shiftCrm.svg" width="16" height="16" style="vertical-align: middle"> **shiftCrm** | 40 | access, account, person, pipeline, opportunity, activity, task, record, propertyDefinition, import | `SHIFT_CRM_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/shiftLabs.svg" width="16" height="16" style="vertical-align: middle"> **shiftLabs** | 39 | project, issue, issueView, page, transcription | `SHIFT_LABS_API_KEY`, `SHIFT_LABS_ORG_ID` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/shopify.svg" width="16" height="16" style="vertical-align: middle"> **shopify** | 10 | order, product | `SHOPIFY_SUBDOMAIN`, `SHOPIFY_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/signl4.png" width="16" height="16" style="vertical-align: middle"> **signl4** | 2 | alert | `SIGNL4_TEAM_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/slack.svg" width="16" height="16" style="vertical-align: middle"> **slack** | 38 | message, channel, reaction, user, userGroup, file, star | `SLACK_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/sms77.svg" width="16" height="16" style="vertical-align: middle"> **sms77** | 2 | sms, voice | `SMS77_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/splunk.svg" width="16" height="16" style="vertical-align: middle"> **splunk** | 16 | search, alert, report, user | `SPLUNK_BASE_URL`, `SPLUNK_AUTH_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/spotify.svg" width="16" height="16" style="vertical-align: middle"> **spotify** | 30 | player, album, artist, playlist, track, library, myData | `SPOTIFY_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/stackby.png" width="16" height="16" style="vertical-align: middle"> **stackby** | 4 | row | `STACKBY_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/steel.svg" width="16" height="16" style="vertical-align: middle"> **steel** | 44 | session, scrape, browser, screenshot, pdf, file, sessionFile, credential, profile, extension, captcha | `STEEL_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/storyblok.svg" width="16" height="16" style="vertical-align: middle"> **storyblok** | 7 | content, management |  |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/strapi.svg" width="16" height="16" style="vertical-align: middle"> **strapi** | 5 | entry | `STRAPI_URL` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/strava.svg" width="16" height="16" style="vertical-align: middle"> **strava** | 9 | activity | `STRAVA_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/stripe.svg" width="16" height="16" style="vertical-align: middle"> **stripe** | 20 | balance, customer, charge, coupon, customerCard, source, token, meterEvent | `STRIPE_SECRET_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/supabase.svg" width="16" height="16" style="vertical-align: middle"> **supabase** | 5 | row | `SUPABASE_URL`, `SUPABASE_SERVICE_ROLE_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/syncromsp.png" width="16" height="16" style="vertical-align: middle"> **syncromsp** | 20 | customer, contact, ticket, rmmAlert | `SYNCROMSP_SUBDOMAIN`, `SYNCROMSP_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/tapfiliate.svg" width="16" height="16" style="vertical-align: middle"> **tapfiliate** | 11 | affiliate, affiliateMetadata, programAffiliate | `TAPFILIATE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/telegram.svg" width="16" height="16" style="vertical-align: middle"> **telegram** | 21 | message, chat, callback, file | `TELEGRAM_BOT_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/thehive.svg" width="16" height="16" style="vertical-align: middle"> **thehive** | 23 | alert, case, observable, task, log | `THEHIVE_URL`, `THEHIVE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/thehiveProject.svg" width="16" height="16" style="vertical-align: middle"> **thehiveProject** | 37 | alert, case, task, observable, comment, log, page, query | `THEHIVE_URL`, `THEHIVE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/todoist.svg" width="16" height="16" style="vertical-align: middle"> **todoist** | 31 | task, project, section, comment, label | `TODOIST_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/together.svg" width="16" height="16" style="vertical-align: middle"> **together** | 1 | image | `TOGETHER_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/travisci.svg" width="16" height="16" style="vertical-align: middle"> **travisci** | 5 | build | `TRAVISCI_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/trello.svg" width="16" height="16" style="vertical-align: middle"> **trello** | 37 | board, boardMember, card, cardComment, list, attachment, checklist, label | `TRELLO_API_KEY`, `TRELLO_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/twake.png" width="16" height="16" style="vertical-align: middle"> **twake** | 1 | message | `TWAKE_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/twilio.svg" width="16" height="16" style="vertical-align: middle"> **twilio** | 2 | sms, call | `TWILIO_ACCOUNT_SID`, `TWILIO_AUTH_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/twist.png" width="16" height="16" style="vertical-align: middle"> **twist** | 22 | channel, thread, comment, messageConversation | `TWIST_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/twitter.svg" width="16" height="16" style="vertical-align: middle"> **twitter** | 8 | tweet, user, list, dm | `TWITTER_BEARER_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/unleashedSoftware.png" width="16" height="16" style="vertical-align: middle"> **unleashedSoftware** | 3 | salesOrder, stockOnHand | `UNLEASHED_API_ID`, `UNLEASHED_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/uplead.png" width="16" height="16" style="vertical-align: middle"> **uplead** | 2 | person, company | `UPLEAD_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/uproc.png" width="16" height="16" style="vertical-align: middle"> **uproc** | 1 | process | `UPROC_EMAIL`, `UPROC_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/uptimerobot.svg" width="16" height="16" style="vertical-align: middle"> **uptimerobot** | 22 | account, monitor, alertContact, maintenanceWindow, publicStatusPage | `UPTIMEROBOT_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/urlscanio.svg" width="16" height="16" style="vertical-align: middle"> **urlscanio** | 3 | scan | `URLSCANIO_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/vercel.svg" width="16" height="16" style="vertical-align: middle"> **vercel** | 14 | whoami, project, deployment, env | `VERCEL_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/vero.svg" width="16" height="16" style="vertical-align: middle"> **vero** | 8 | user, event | `VERO_AUTH_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/vonage.svg" width="16" height="16" style="vertical-align: middle"> **vonage** | 1 | sms | `VONAGE_API_KEY`, `VONAGE_API_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/wekan.svg" width="16" height="16" style="vertical-align: middle"> **wekan** | 24 | board, list, card, cardComment, checklist, checklistItem | `WEKAN_URL`, `WEKAN_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/woocommerce.svg" width="16" height="16" style="vertical-align: middle"> **woocommerce** | 15 | product, order, customer | `WOOCOMMERCE_URL`, `WOOCOMMERCE_CONSUMER_KEY`, `WOOCOMMERCE_CONSUMER_SECRET` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/wordpress.svg" width="16" height="16" style="vertical-align: middle"> **wordpress** | 15 | post, page, user | `WORDPRESS_URL`, `WORDPRESS_USERNAME`, `WORDPRESS_PASSWORD` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/xai.svg" width="16" height="16" style="vertical-align: middle"> **xai** | 1 | image | `XAI_API_KEY` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/xero.svg" width="16" height="16" style="vertical-align: middle"> **xero** | 8 | invoice, contact | `XERO_ACCESS_TOKEN`, `XERO_TENANT_ID` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/yourls.png" width="16" height="16" style="vertical-align: middle"> **yourls** | 3 | url | `YOURLS_URL`, `YOURLS_SIGNATURE` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/zammad.svg" width="16" height="16" style="vertical-align: middle"> **zammad** | 22 | user, organization, group, ticket | `ZAMMAD_URL`, `ZAMMAD_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/zendesk.svg" width="16" height="16" style="vertical-align: middle"> **zendesk** | 18 | ticket, user, organization, ticketField | `ZENDESK_SUBDOMAIN`, `ZENDESK_EMAIL`, `ZENDESK_API_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/zoho.svg" width="16" height="16" style="vertical-align: middle"> **zoho** | 60 | account, contact, deal, invoice, lead, product, purchaseOrder, salesOrder, vendor, quote | `ZOHO_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/zoom.svg" width="16" height="16" style="vertical-align: middle"> **zoom** | 5 | meeting | `ZOOM_ACCESS_TOKEN` |
| <img src="https://raw.githubusercontent.com/Michaelliv/runline/main/packages/runline-plugins/icons/zulip.svg" width="16" height="16" style="vertical-align: middle"> **zulip** | 15 | message, stream, user | `ZULIP_URL`, `ZULIP_EMAIL`, `ZULIP_API_KEY` |
<!-- END PLUGIN TABLE -->

## Examples

```bash
# List all available actions
runline actions
# List actions only for connected services
runline actions --connected

# Get Nike's brand colors
runline exec 'return await brandfetch.brand.getColors({ domain: "nike.com" })'

# Create a GitHub issue
runline exec '
  return await github.issue.create({
    owner: "acme", repo: "api",
    title: "Bug: login broken",
    labels: ["bug", "urgent"]
  })
'

# Search Pipedrive deals
runline exec 'return await pipedrive.deal.search({ term: "Acme" })'

# Chain actions together
runline exec '
  const contact = await hubspot.contact.get({ id: "123" });
  const task = await todoist.task.create({
    content: `Follow up with ${contact.properties.firstname}`,
    priority: 4
  });
  return { contact: contact.properties.email, taskId: task.id };
'

# Discover actions from inside the runtime
runline exec 'return actions.list()'
runline exec 'return actions.list("brandfetch")'
runline exec 'return actions.find("create issue")'
runline exec 'return actions.describe("github.issue.create")'
runline exec 'return actions.check("github.issue.create", { owner: "a" })'

# Output as JSON (for agents)
runline exec 'return await github.repo.list({ owner: "torvalds" })' --json
```

## Writing a Plugin

Plugins export a function that receives a `RunlinePluginAPI` and registers actions. Use TypeBox schemas by default for both connection config and action input schemas; Runline uses them for action discovery, `actions.check(...)`, and runtime validation before `execute` runs.

```typescript
import type { RunlinePluginAPI } from "runline";
import * as t from "typebox";

export default function orders(rl: RunlinePluginAPI) {
  rl.setName("orders");
  rl.setVersion("1.0.0");

  // Connection config — env vars override config.json values
  rl.setConnectionSchema(t.Object({
    apiKey: t.String({ env: "ORDERS_API_KEY" }),
    baseUrl: t.String({ env: "ORDERS_BASE_URL" }),
  }));

  rl.registerAction("list", {
    access: "read",
    description: "List orders for an organization",
    inputSchema: t.Object({
      orgId: t.String(),
      status: t.Optional(t.String({ description: "open, closed, or all" })),
      limit: t.Optional(t.Number()),
    }),
    async execute(input, ctx) {
      const { orgId, status, limit } = input as Record<string, unknown>;
      const url = new URL(`${ctx.connection.config.baseUrl}/orgs/${orgId}/orders`);
      if (status) url.searchParams.set("status", status as string);
      if (limit) url.searchParams.set("limit", String(limit));

      const res = await fetch(url.toString(), {
        headers: { Authorization: `Bearer ${ctx.connection.config.apiKey}` },
      });
      if (!res.ok) throw new Error(`Orders API ${res.status}: ${await res.text()}`);
      return res.json();
    },
  });

  rl.registerAction("create", {
    access: "write",
    description: "Create a new order",
    inputSchema: t.Object({
      orgId: t.String(),
      customer: t.String(),
      total: t.Number(),
    }),
    async execute(input, ctx) {
      const res = await fetch(`${ctx.connection.config.baseUrl}/orders`, {
        method: "POST",
        headers: {
          Authorization: `Bearer ${ctx.connection.config.apiKey}`,
          "Content-Type": "application/json",
        },
        body: JSON.stringify(input),
      });
      if (!res.ok) throw new Error(`Orders API ${res.status}: ${await res.text()}`);
      return res.json();
    },
  });
}
```

Custom plugins are discovered from the nearest project `.runline/` directory first, then `.runline/plugins.json`, then `~/.runline/plugins`, then the bundled built-ins named by configured connections. Project-local plugins win over same-named global or built-in plugins; duplicates discovered later are skipped and reported on stderr.

Supported local layouts:

```text
.runline/plugins/orders.ts
.runline/plugins/orders.js
.runline/plugins/orders/index.ts
.runline/plugins/orders/index.js
.runline/plugins/orders/src/index.ts
.runline/plugins/orders/src/index.js
.runline/plugins/orders/package.json   # { "main": "dist/index.js" }
```

A package directory can also expose multiple plugins:

```json
{
  "runline": { "plugins": ["./orders.js", "./billing.js"] }
}
```

`plugins.json` can also point at explicit plugin paths:

```json
{
  "plugins": [{ "path": "./tools/orders.ts" }]
}
```

A plugin may export the default registration function shown above, or a plain plugin definition object with `{ name, version, actions }`. ESM, TypeScript, and CommonJS object exports are supported. The function form is preferred because it validates plugin names, keeps action registration consistent, and gives authors the public `RunlinePluginAPI` surface.

Actions can include optional `access: "read" | "write"` metadata. Use `read` for actions that only retrieve data, and `write` for anything that creates, updates, deletes, sends, uploads, executes, triggers, deploys, imports, changes config, writes local files, or may otherwise affect an external system. Omit it only for legacy compatibility; built-in plugins include it.

Plugin `execute` handlers run **outside** the QuickJS runtime with full Node.js access (`fetch`, `fs`, npm dependencies available to the host process, etc). Agent code calls them through configured plugin globals. `ctx.connection.config` contains the resolved connection config with env var overrides applied, and `ctx.updateConnection(patch)` can persist refreshed credentials. Add a `node` connection only when you explicitly want to expose host APIs through the built-in `node` plugin.

Agents can inspect custom plugins from inside `runline exec` before calling them:

```bash
runline exec 'return actions.list("orders")'
runline exec 'return actions.find("list orders")'
runline exec 'return actions.describe("orders.list")'
runline exec 'return actions.check("orders.list", { orgId: "acme" })'
runline exec 'return await orders.list({ orgId: "acme", status: "open" })'
```

For debugging, run `runline actions --json` to see loaded actions, access metadata, and schemas. Loader failures include the plugin path and reason on stderr. A broken plugin does not stop discovery of healthy plugins in the same directory; common failures include invalid exports, invalid plugin names, malformed `package.json`/`plugins.json`, missing entrypoints, and duplicate plugin names.

See [`packages/runline-plugins/`](https://github.com/Michaelliv/runline/tree/HEAD/packages/runline-plugins) for 211 real-world examples.

## Sandbox

Agent code runs in a [QuickJS](https://bellard.org/quickjs/) WASM runtime:

- **Timeout** — configurable, kills infinite loops
- **Memory limit** — configurable, prevents OOM
- **`console.log`** — captured and returned in `result.logs`
- **Plugin globals** — each installed plugin is a top-level proxy (e.g. `github`, `slack`, `brandfetch`). Dot-chain into resource and action: `github.issue.create(input)`
- **Configured Node globals** — when configured, the built-in `node` plugin exposes host-backed actions such as `node.fs.readFile`, `node.fs.writeFile`, `node.path.join`, `node.os.info`, `node.process.execFile`, `node.crypto.hash`, and `node.fetch`

## For Agents

Every command supports `--json`. Use `runline actions --json` for full schemas with input types.

```bash
runline actions --json          # all actions with schemas
runline actions --connected --json  # only connected services
runline exec '<code>' --json    # structured { result, logs } output
```

## SDK

```typescript
import { Runline } from "runline";
import brandfetch from "runline-plugin-brandfetch";

const rl = Runline.create({
  plugins: [brandfetch],
  connections: [{ name: "bf", plugin: "brandfetch", config: { apiKey: "xxx" } }],
});

const result = await rl.execute(`
  const colors = await brandfetch.brand.getColors({ domain: "stripe.com" });
  return colors.filter(c => c.type === "accent");
`);

console.log(result.result);  // [{ hex: "#635BFF", type: "accent", brightness: 116 }]
```

## CLI Reference

```bash
runline exec "<code>"                  # execute JS in the QuickJS runtime
runline exec -f ./script.js            # execute a file
runline actions                        # list all actions
runline actions --connected            # only actions for configured connections
runline plugin install <source>        # install from git/npm/local
runline plugin list                    # list installed plugins
runline plugin remove <name>           # remove a plugin
runline connection add <n> -p <plugin> -s key=val  # add connection
runline connection list                # list connections
runline connection remove <name>       # remove a connection
runline init                           # create .runline/ directory
```

## Configuration

`.runline/config.json`:

```json
{
  "connections": [
    { "name": "gh", "plugin": "github", "config": { "token": "ghp_xxx" } },
    { "name": "bf", "plugin": "brandfetch", "config": { "apiKey": "xxx" } }
  ],
  "timeoutMs": 30000,
  "memoryLimitBytes": 67108864
}
```

Env vars override config values. Plugins declare env var names in their connection schema (e.g. `GITHUB_TOKEN`).

## Development

Runline is a bun workspace monorepo: `packages/runline` (library + CLI), `packages/runline-plugins` (203 built-in plugins, bundled into runline's dist at build time), and `packages/pi-runline` (pi extension that exposes runline to agents).

```bash
bun install
bun --filter runline dev -- exec 'return 1 + 2'
bun --filter runline test
bun run check
```

## Pi integration

The [`pi-runline`](https://github.com/Michaelliv/runline/tree/HEAD/packages/pi-runline) package is a [pi](https://github.com/mariozechner/pi) extension that plugs runline into coding agents as a single native tool:

- **`execute_runline`** — run JavaScript in the runline runtime. Discovery happens inside the runtime via `actions.list / find / describe / check`, so the agent never needs a separate listing tool.

It ships with `/runline-plugins`, a fuzzy multi-select picker for choosing which of the 202 plugins the agent should see, plus a guided credential prompt for the ones you enable.

```bash
pi install npm:pi-runline
# then in any pi session inside a project with .runline/
/runline-plugins
```

See [`packages/pi-runline/README.md`](https://github.com/Michaelliv/runline/blob/HEAD/packages/pi-runline/README.md) for details.

## How It Relates to dripline

[dripline](https://github.com/Michaelliv/dripline) is **query mode** — SQL tables over live APIs. runline is **code mode** — JavaScript actions over the same APIs. Same plugin architecture, same connection config, different interface. Use dripline when you want to `SELECT` rows; use runline when you want to `create`, `update`, `delete`, or chain multiple API calls together.

## License

MIT
