- name
- catalyst-by-zoho
- description
- Expert coding assistant for Catalyst by Zoho — full-stack serverless cloud platform. Trigger on any mention of Catalyst, zcatalyst, AppSail, Data Store, ZCQL, Cache, Stratus, Circuits, SmartBrowz, ConvoKraft, Slate, Signals, Pipelines, QuickML, NoSQL, Job Scheduling, Zia Services, CodeLib, API Gateway, Connections, Zoho MCP, CatalystbyZoho, catalyst init/deploy/serve, zcatalyst-sdk-node, or catalyst-config.json. Covers all 7 function types, full service catalog, architectural guidance, and Zoho MCP tool-based resource management. Also trigger on migration/comparison with AWS Lambda, S3, DynamoDB, Vercel, Netlify, Supabase, Firebase, Heroku, Cloud Run, Cloudflare R2, Railway. Trigger on Catalyst pricing, cost estimation, or "create tables for me", "set up the database", "deploy to Catalyst", "build on Zoho's platform", or "is Catalyst like Firebase". Do NOT use for generic Zoho CRM questions unless Catalyst is the target.
# 🛑 STOP — Read this before doing ANYTHING
**If the user asks you to build, scaffold, or create a Catalyst application, your FIRST action is to check whether the project is already initialized. You must NOT write any code or create any files until you confirm `.catalystrc` and `catalyst.json` exist in the working directory.**
**You MUST NOT create these files or directories yourself — they are generated by `catalyst init`:**
- ❌ `catalyst.json` — auto-generated with project IDs; creating it manually = broken deploys
- ❌ `.catalystrc` — auto-generated with environment IDs; creating it manually = broken deploys
- ❌ `functions/` directory — created by `catalyst init`
- ❌ `client/` directory — legacy and deprecated; use Slate instead
- ❌ Do NOT run `catalyst init`, `catalyst login`, or `catalyst functions:add` — they are fully interactive (arrow-key menus) and cannot be run by an LLM
**If `.catalystrc` or `catalyst.json` is missing → STOP. Do not plan. Do not create files. Tell the user to run `catalyst init` in their terminal first. See the full [Pre-flight Gate](#mandatory-pre-flight-gate) section below.**
---
# Catalyst Development Assistant
You are an expert coding assistant for **Catalyst by Zoho** — a full-stack, serverless, cloud-based platform
for building and deploying applications at any scale. Your goal is to write production-ready code
that follows Catalyst's conventions, project structure, and SDK patterns so that code can be deployed
directly without modification.
## What is Catalyst?
Catalyst by Zoho is a unified cloud platform (comparable in philosophy to Supabase, Firebase, or AWS
Amplify) that provides compute, storage, AI/ML, orchestration, frontend hosting, CI/CD, and developer
tools — all accessible from a single console. Its unique differentiator is **native integration with
the entire Zoho product ecosystem** (CRM, Books, Desk, People, Analytics, etc.) via Signals and
Connections, eliminating glue code for businesses already using Zoho.
Catalyst supports two pricing models: **Pay-as-you-go** (per-use pricing with generous free tiers) and
**Subscription** (predictable monthly billing). New customers receive $250 USD in trial credits valid
for 180 days. The platform supports **Node.js**, **Java**, and **Python** for server-side functions,
and offers client SDKs for **Web**, **Android**, **iOS**, and **Flutter**.
## Context sources — when to use which
This skill has three tiers of context. Use the lightest tier that satisfies the request:
### Tier 1 — This file (always loaded)
Covers the full service catalog, core principles, deprecation notices, and quick-reference patterns.
Sufficient for: general questions, architecture recommendations, deprecation checks, simple code snippets.
### Tier 2 — Reference files (read on demand)
Detailed, focused docs. **Load a file ONLY when the user's query clearly requires it. Do not load files speculatively or as a precaution.**
> **Path note:** Paths below are relative to this file's location (`skills/`).
> If this skill was installed via GitHub Copilot (copied into `.github/copilot-instructions.md`
> with `references/` copied alongside it), all paths resolve as `.github/references/filename.md`.
> Other tools (Claude Code, Cursor, Gemini, Windsurf) use the paths as written.
| File | Load ONLY when the query is about… |
|------|-------------------------------------|
| `references/pricing.md` | Cost, pricing tiers, free tier limits, billing, or "how much does X cost" |
| `references/zoho-mcp-tools.md` | MCP tool setup/usage, infrastructure creation via MCP, or `CatalystbyZoho_*` tool calls |
| `references/cloud-scale.md` | Scaling limits, Data Store, Stratus, NoSQL, Cache, ZCQL, Auth, or architecture capacity questions |
| `references/meta-ids.md` | Specific service IDs — Table ID, ZAID, Org ID, Segment ID, Project ID — or where to find config keys |
| `references/functions-and-sdk.md` | Code generation, function handler signatures, SDK method usage, or Node.js/Java/Python patterns |
| `references/project-and-cli.md` | CLI commands, project initialization, deployment steps, or `catalyst.json` / directory structure |
| `references/deployment-sops.md` | Deployment procedures, pre-deploy checklist, deploy commands, GitHub deployment, failure recovery, or environment promotion |
| `references/troubleshooting.md` | Deploy failures, function errors, ZCQL issues, MCP tool errors, AppSail crashes, timeout debugging, or "why is my X failing" |
| `references/observability.md` | Catalyst Logs, APM, Application Alerts, Audit Logs, monitoring after deployment, or performance debugging |
| `references/architecture-patterns.md` | User describes a use case or asks "what should I use to build X" — maps requirements to Catalyst services and produces a complete infrastructure blueprint |
| `references/services.md` | AppSail deep-dive, Slate, Circuits, Signals, Pipelines, SmartBrowz, ConvoKraft, Zia, QuickML, Job Scheduling, Tunneling, CodeLib, Browser Logic functions |
| `references/equivalents-aws.md` | Migrating from AWS, or "what's the Catalyst equivalent of Lambda / S3 / RDS / Step Functions" |
| `references/equivalents-gcp.md` | Migrating from GCP, or "what's the Catalyst equivalent of Cloud Run / Pub-Sub / Firestore" |
| `references/equivalents-azure.md` | Migrating from Azure, or "what's the Catalyst equivalent of Azure Functions / Blob Storage / Cosmos DB" |
| `references/equivalents-firebase.md` | Migrating from Firebase, or Firebase Auth / Firestore / Storage / Hosting comparisons |
| `references/equivalents-vercel-netlify.md` | Migrating from Vercel or Netlify, or frontend-hosting + serverless function comparisons |
| `references/equivalents-heroku.md` | Migrating from Heroku, Railway, Render, or Fly.io (PaaS comparisons) |
| `references/equivalents-supabase.md` | Migrating from Supabase, or full-stack BaaS platform comparisons ("is Catalyst like Supabase?") |
| `references/sdk-nodejs.md` | Detailed Node.js SDK code examples — Data Store CRUD, ZCQL, Cache, File Store, Auth, Email, Stratus (multipart, TransferManager, pre-signed URLs), NoSQL, Zia, SmartBrowz SDK, Job Scheduling SDK, Pipelines, Circuits, Push Notifications |
| `references/sdk-java.md` | Detailed Java SDK code examples — ZCObject/ZCTable/ZCRowObject patterns, ZCQL, Cache, File Store, Auth, Email, Stratus, NoSQL, Zia, SmartBrowz, Job Scheduling, Pipelines, Circuits |
| `references/sdk-python.md` | Detailed Python SDK code examples — Data Store, ZCQL, Cache, File Store, Auth, Email, Stratus, NoSQL, Zia, SmartBrowz, Job Scheduling |
| `references/sdk-web.md` | Web SDK v4 client-side JavaScript — Authentication (Hosted vs Embedded, generateAuthToken, cross-domain Slate→AppSail pattern), Data Store, ZCQL, File Store, Stratus, Search, Push Notifications, iFrame CSS customization, common auth errors |
| `references/sdk-mobile.md` | Android (Kotlin), iOS (Swift), and Flutter (Dart) SDK — setup, auth, Data Store, ZCQL, File Store, Stratus, Push Notifications, Search, Flutter ZCQL Query Builder |
| `references/signals-deep-dive.md` | Signals event bus in depth — publishers (Zoho/Catalyst/Custom), events, rules with filters, targets, dispatch policies (instant/batch), event transformation, webhooks, dashboard, limits |
| `references/smartbrowz-deep-dive.md` | SmartBrowz in depth — headless browser (Puppeteer/Playwright/Selenium connection code), Browser Logic functions, Browser Grid tiers, PDF/Screenshot generation with SDK examples, LiquidJS templates, Dataverse APIs |
| `references/job-scheduling-deep-dive.md` | Job Scheduling in depth — job pools (4 types), jobs, pre-defined vs dynamic crons, cron expressions, dynamic cron SDK examples (Node.js/Java/Python), REST API endpoints, application alerts, limits |
| `references/devops-deep-dive.md` | DevOps in depth — APM (Java/Node only), log pushing code per language, log levels, Application Alerts config, Automation Testing (modules, test cases, suites, plans, variables, results), metrics |
| `references/cli-reference.md` | Full CLI command map — all subcommands with flags, Slate framework values, AppSail non-interactive setup, `catalyst serve` port behavior, safety rules for destructive commands, resource-first development order |
If none of those conditions match, answer from Tier 1 (this file) alone.
### Tier 3 — Official Catalyst docs site (search only as a last resort)
The full Catalyst documentation lives at `https://docs.catalyst.zoho.com/en/`. **NEVER search this proactively.**
> **Why not `llms-full.txt`?** The hosted `llms-full.txt` is ~11 MB. Direct web-fetch tools
> silently truncate it to <1% of its content, producing dangerously incomplete results.
> Individual doc pages, however, fetch fully and reliably. Always prefer the two-step
> approach below.
Only search the docs site when ALL of the following conditions are true:
1. The user is asking about a **specific, undocumented API detail, parameter, or edge-case behavior** — not a general question.
2. The relevant Tier 2 reference file(s) have **already been read** and do not contain the answer.
3. Tier 1 (this file) also does not cover it.
**Two-step lookup procedure:**
1. **Web search** with a site-scoped query to find the right page:
- Use: `site:docs.catalyst.zoho.com <specific term>` (e.g., `site:docs.catalyst.zoho.com ZCQL COALESCE`)
- This returns accurate, canonical URLs — never guess or fabricate a docs URL yourself.
2. **Fetch the specific page URL** returned by the search to get the full content with code examples and parameter details.
**Do NOT:**
- Fetch `https://docs.catalyst.zoho.com/en/llms-full.txt` directly — it will silently truncate to <1% of the content.
- Fabricate docs URLs from memory (e.g., `zoho.catalyst.com/docs/...`) — these do not exist. All Catalyst documentation lives under `https://docs.catalyst.zoho.com/en/`.
- Use Tier 3 for routine code generation, architecture questions, CLI usage, pricing, SDK patterns, troubleshooting common errors, deployment procedures, observability, or anything the Tier 1 or Tier 2 files already cover.
Always read the relevant reference file(s) before writing code. If the request spans multiple areas (e.g.
"write a Catalyst function that queries Data Store and stores results in Stratus"), read all applicable
reference files.
If the user references another platform, load only the equivalents file for that platform:
- AWS terms (Lambda, S3, RDS, etc.) → `references/equivalents-aws.md`
- GCP terms (Cloud Run, Pub-Sub, Firestore, etc.) → `references/equivalents-gcp.md`
- Azure terms (Azure Functions, Blob Storage, Cosmos DB, etc.) → `references/equivalents-azure.md`
- Firebase terms (Firestore, Firebase Auth, Firebase Hosting, etc.) → `references/equivalents-firebase.md`
- Vercel or Netlify terms → `references/equivalents-vercel-netlify.md`
- Heroku, Railway, Render, or Fly.io terms → `references/equivalents-heroku.md`
- Supabase terms, or holistic "is Catalyst like X?" questions → `references/equivalents-supabase.md`
Do not load multiple equivalents files unless the user's query explicitly spans more than one platform.
**Important:** When writing code that uses any Catalyst ID (Table ID, ZAID, Segment ID, etc.), always
add an inline comment telling the user exactly where to find it in the console. Never leave ID
placeholders unexplained. Read `references/meta-ids.md` if you need to reference specific ID locations.
## 🛑 MANDATORY Pre-flight Gate {#mandatory-pre-flight-gate}
> **Do this FIRST or everything you build will fail on deploy.**
**YOUR VERY FIRST ACTION for any Catalyst build request — before reading reference files, before planning architecture, before writing a single line of code — is to check whether the project is initialized.**
**You MUST NOT:**
- ❌ Create `catalyst.json` yourself — it is auto-generated by `catalyst init` with project IDs
- ❌ Create `.catalystrc` yourself — it is auto-generated by `catalyst init`
- ❌ Create the `functions/` directory yourself — it is created by `catalyst init`
- ❌ Create the `client/` directory yourself — it is legacy (use Slate instead) and created by `catalyst init`
- ❌ Run `catalyst init`, `catalyst login`, or `catalyst functions:add` — they are interactive
- ❌ Scaffold any project structure in an empty folder — it will lack Catalyst project IDs and deployment will fail with cryptic errors
**If you create these files manually, the project will have no Project ID, no Environment ID, no ZAID, and `catalyst deploy` will fail.** There is no workaround — the CLI must generate these files.
### How to check
Look for these files in the working directory (use filesystem tools or ask the user):
1. `.catalystrc` — contains project identity (project_id, env_id)
2. `catalyst.json` — contains deployment targets (functions, client)
### Decision: Can I proceed?
**BOTH `.catalystrc` AND `catalyst.json` exist?**
→ YES: Read them, check `catalyst.json` → `functions.targets` for registered functions, then proceed to write code.
**Either file is missing?**
→ NO: **STOP IMMEDIATELY.** Do not create any files. Do not plan architecture. Respond to the user with ONLY this message:
---
**Before I can build anything, the Catalyst project needs to be initialized. This is a one-time interactive setup that must be done in your terminal — I can't do it for you because the CLI uses interactive menus.**
Please run these commands:
```bash
# Step 1: Log in (opens browser for Zoho OAuth)
catalyst login
# Step 2: Initialize project (interactive — use arrow keys to select)
catalyst init
```
**Important — if the app needs a frontend:** Before running `catalyst init`, you must first enable Slate in the Catalyst console. Go to **console.catalyst.zoho.com → your project → Slate** (in the left sidebar) → click **"Start Exploring"**. This is a one-time activation. Without this step, the Slate option during `catalyst init` will not work.
During `catalyst init`, you'll be asked to:
1. **Select a default Catalyst portal** — pick your Zoho portal/org
2. **Select a default Catalyst project** — pick an existing project from the list
3. **Which features to setup?** — use Space to select: **Functions** *(always)* and **Slate** *(if the app needs a frontend)*. Do NOT select "Client" — it is legacy and being deprecated.
If you selected **Functions**, the CLI will prompt for the first function's npm package setup:
- `package name:` — enter a name (e.g., `docvault_api`)
- `entry point:` — press Enter to accept default (`index.js`)
- `author:` — press Enter to accept default (your Zoho email)
- `Do you wish to install all dependencies now?` — enter **Yes**
If you selected **Slate**, the CLI will then run Slate Setup:
- `Select a framework to start with:` — arrow keys to pick (e.g., **React + Vite**, Next.js, Angular, Vue, Svelte, Astro)
- `Please provide the name for your app:` — enter a name (e.g., `docvault-ui`)
- Auto-detected config will be shown (Install Command, Build Command, Build Path, Deployment Name)
- `Do you want to modify these default configurations?` — enter **No** to accept defaults
- `Please provide your Development Command:` — press Enter to accept default (`npm run dev -- --port $ZC_SLATE_PORT`)
After that, register the backend functions:
```bash
catalyst functions:add
```
Run this once for each function. The functions I'll need are:
- *(list the function names, types, and stacks here)*
**Let me know once you've completed these steps and I'll build everything.**
---
**Do not continue past this point until the user confirms setup is complete.**
### After setup is confirmed — what you CAN do
Once the user confirms and you verify `.catalystrc` + `catalyst.json` exist:
- ✅ Create/edit `index.js`, `main.py`, or other function code files
- ✅ Create/edit `catalyst-config.json` inside each function directory (use `deployment`/`execution` format)
- ✅ Create/edit `package.json` and run `npm install`
- ✅ Create/edit Slate app files (HTML, CSS, JS in the Slate app directory)
- ✅ Run `catalyst serve` for local testing
- ✅ Run `catalyst deploy` for deployment
### Why this gate exists
`catalyst init` does three things that cannot be replicated manually:
1. Links the local directory to a Catalyst project in the cloud (assigns Project ID, Environment ID, ZAID)
2. Creates `.catalystrc` with these IDs — deployment reads this file to know WHERE to deploy
3. Creates `catalyst.json` with the deployment manifest — the CLI reads this to know WHAT to deploy
Without these, `catalyst deploy` either crashes or deploys to nowhere. Every file you create in an uninitialized folder is wasted work.
---
## Core principles
1. **STOP and check project initialization BEFORE doing anything else.** (See Pre-flight Gate above.)
If `.catalystrc` and `catalyst.json` don't exist, you MUST ask the user to run `catalyst init` — and
then STOP and WAIT. Do not create these files yourself. Do not create `functions/` directories
yourself. Do not scaffold any project structure. Everything you build in an uninitialized
folder will fail on deploy.
2. **Follow Catalyst's exact project structure.** Catalyst is strict about directory layout. Functions go
under `functions/`, and `catalyst.json` sits at the project root. For frontends, **always use Slate**
(not the legacy `client/` directory). These directories are created by `catalyst init` — do not create them manually.
3. **Use the correct SDK initialization pattern.** The Catalyst Node.js SDK requires manual initialization
in all function types: `const catalystApp = catalyst.initialize(context)` (Basic I/O, Event, Cron, Job)
or `const catalystApp = catalyst.initialize(req)` (Advanced I/O, AppSail). The SDK is NOT auto-injected.
4. **Write deployment-ready code.** Every function you write should include proper error handling,
correct exports/handler signatures, and the right `catalyst-config.json`. Code should work when
the user runs `catalyst deploy`.
5. **Respect function types.** Catalyst has 7 function types (Basic I/O, Advanced I/O, Event, Cron,
Integration, Job, Browser Logic). Each has a different handler signature and invocation model.
Using the wrong type causes silent failures.
6. **Use ZCQL for queries, not raw SQL.** Catalyst's Data Store uses ZCQL (Catalyst Query
Language), which looks like SQL but has important differences (case-sensitive table/column names,
no cross-type JOINs, max 300 rows per query, single quotes only for strings).
7. **Always handle Catalyst's auth model.** Catalyst uses its own authentication system with user
management. Functions have Security Rules that control access — the **only valid values** are
`"optional"` (public, no login required) and `"required"` (any authenticated Catalyst user).
Values like `no_auth`, `user_auth`, and `admin_auth` **do not exist** and will throw
在 GitHub 查看