fw-review
fw-review
This is an automated pipeline. After the app directory is determined (Q1 pre-flight below), do not ask further questions or interact with the user for disambiguation — execute the remaining phases silently and produce only the formatted App Review Result block in rules/report.md. Do not prefix or suffix that block with commentary (no Pass/N/A rationales, script notes, or pipeline status).
Exception: If fdk is missing, follow FDK CLI availability below (STOP → offer /fw-setup-install → optional y/n) — that interaction overrides “silent only” until the CLI exists or the user declines install.
Pre-flight: determine app directory (Q1)
Before the workflow, follow the same steps as fw-app-dev /fdk-fix Step 1: Determine app directory:
- Search the workspace for
manifest.jsonfiles. - If multiple folders contain manifest.json: ask the user which app to review (this is the only user question allowed in this skill).
- If one folder: Use that directory.
- If none: Inform the user and stop.
All app files in the workflow below are relative to that directory (the folder containing manifest.json). Run deterministic check scripts from this skill’s scripts/ against <app-directory> (see README.md).
Workflow
Run these phases in order. Detailed inspection criteria: [rules/**.md]. Emit failures only via the Issue / Location / Fix format in rules/report.md—no separate prose summary of passes, N/A, or omitted checks.
Pre-requisite
FDK CLI availability (Docker / CI / local)
The Freshworks FDK CLI (fdk) is not bundled with this repository and is not assumed to exist in generic CI images. Jenkins or Kubernetes node images typically include Node only, not fdk. Verify FDK is installed (for example /fw-setup-status from the fw-setup skill, or fdk --version when the CLI is on PATH).
If fdk is missing (fdk --version fails / command not found):
- STOP — do not silently install the CLI or continue as if
fdk validatewere available. - Tell the user the
fdkCLI is required for a complete review where validation applies, and that fw-review does not install it. - Offer
fw-setup:/fw-setup-install(FDK 10.x + Node 24.11 defaults) or/fw-setup-status. Do not auto-install without consent. - Optional one-shot: ask “Run
/fw-setup-installnow? (y/n)” — only on yes, route toskills/fw-setup/; on no, instruct the user to install and re-runfw-review. - Output exception: For this toolchain-only stop, the reply may be the short message above instead of the
## App Review Resultblock — do not emit a full App Review Result pretending all phases ran untilfdkis available and the pipeline can execute.
- Structure — Read
manifest.jsonin the app directory first for platform version, modules, requests, events, and install flow. - Installation parameters — In the app directory, review
config/iparams.jsonor customconfig/iparams.html/config/assets/iparams.jsusing rules/iparam-rules.md. Follow the discovery order in that file. - Deterministic script checks — For each script-backed rule ID in rules/script-check-rules.md, run the mapped JS file from this skill’s
scripts/against<app-directory>. Treat any returned internal metadata such asinternal.rule_idas internal only. - Frontend logical checks — Review rules/frontend-files-rules.md for FF-* rules that do not have a one-to-one script.
Rules
- Do not invent rule IDs or Pass/Fail criteria beyond the Rule ID summary in this file and the criteria defined in the linked
rules/*.mdfiles for those IDs. - Every rule ID in the Rule ID summary below must be evaluated to Pass, Fail, or Not Applicable.
- Emit the App Review Result block exactly as specified in rules/report.md:
- Exclusive deliverable: The user-facing reply for the review must contain only that block—begin with
## App Review Result; do not add lines above it or below it (aside from whatreport.mddefines inside the block: heading, thensuccessfulor the numbered list). No rule IDs (GN-*,IP-*,FF-*,FFS-*,CR-*), no internal filenames (script-check-rules.md, otherrules/*.md,scripts/*.js), and no citations to skill paths. - The output is rendered Markdown. Do not wrap the final report in a code fence (no
\``text` around the whole block); emit the Markdown directly so headings, lists, and links render in the chat client. - Heading is always the level-2 Markdown heading
## App Review Resultwith no suffix. Below it: the wordsuccessfulalone on its own line when there are zero failures; when there are failures, omitsuccessfuland emit the numbered list per rules/report.md. - Each failure is one numbered list entry with two paragraphs:
- The issue sentence ending with the bracketed clickable location:
<issue>. [ [<filename>(<qualifier>)](<filename>#L<start>-L<end>) ]. - A 3-space-indented
**Fix:** <imperative remediation>paragraph attached to the same list item, separated from the issue paragraph by one blank line.
- The issue sentence ending with the bracketed clickable location:
- The
<qualifier>is(N)for a single line,(A-B)for a range,(<scope label>)for a named scope without a precise line, or omitted entirely for a whole-file reference. Link target is<filename>#L<N>/<filename>#L<A>-L<B>/<filename>accordingly. Multiple co-located occurrences are placed inside a single pair of outer brackets, comma-separated. - The outer
[and]around the location link are literal characters with one space inside each bracket. - Do not show area names, severity labels, or rule IDs in the output. Sort failures internally by area in the order Iparams (
IP-*), Structure (FFS-*), Frontend (FF-*), Readability (CR-*), Miscellaneous (GN-*). - Apply the Grouping rules in rules/report.md before emitting the numbered list.
- Follow the Writing style rules: Issue ≤ 120 chars (excluding the bracketed location), one sentence, present tense; Fix ≤ 2 imperative sentences. Do not use the words "approximately", "around line", or "roughly" in the location qualifier.
- Exclusive deliverable: The user-facing reply for the review must contain only that block—begin with
- Use rule IDs internally for evaluation only. Omit rule IDs, including any script JSON metadata such as
internal.rule_id, from the final user-visible report. - If a script execution itself fails, do not stop the overall review. Ignore that rule inspection for the current run, continue evaluating the remaining rules, and report only the actual rule failures you were able to determine.
- For each Fail, cite file and line (or identifiable block) where possible.
Supporting files
- rules/report.md — Output format for the final App Review Result block only.
- rules/iparam-rules.md — IP-04A, IP-05A, IP-06A.
- rules/frontend-files-rules.md — All FF-* rules.
- rules/script-check-rules.md — Script-backed rule IDs mapped to
scripts/*.js.
Rule ID summary (authoritative list of evaluated rule IDs)
| Area | IDs |
|---|---|
| iparams | IP-04A, IP-05A, IP-06A |
| File and folder structure | FFS-02L, FFS-04L, FFS-05L |
| Frontend | FF-01L, FF-07L, FF-02M, FF-03A, FF-04A, FF-05A, FF-06A, FF-08A |
| Code readability | CR-05L |
| Miscellaneous | GN-02L, GN-08L, GN-12L |
More from freshworks-developers/fw-dev-tools
fw-setup
Installs and manages Freshworks Development Kit (FDK) with Node.js via nvm for Platform 3.0 development. Supports FDK 10.x (Node 24, recommended) and FDK 9.x (Node 18, deprecated May 31, 2026). Slash commands: /fw-setup-install (--version), /fw-setup-upgrade (--to), /fw-setup-downgrade, /fw-setup-uninstall, /fw-setup-status (--verbose), /fw-setup-troubleshoot (--fix), /fw-setup-use (workspace nvm + .nvmrc). Legacy `/fdk-install` → use `/fw-setup-install`, etc. Publishing requires FDK 10.x + Node 24.
20fw-publish
Publish any Freshworks Platform 3.0 custom app via MCP tools: fdk validate/pack, app-upload, and submit/update through openai-server. Pre-publish: confirm Developer JWT matches manifest product modules (Freshdesk support_* vs Freshservice service_*; multiproduct sequential). At publish time, ask new vs existing listing; for new listings, prompt for supportEmail before create_app_upload_url (required for submit_custom_app). list_custom_apps for updates so the developer selects appId, then MCP handover (submit_custom_app or add_app_version with uploadId). Use when the user wants to push an app to the Marketplace for QA (test) or review, check publish status, or list existing apps. Pair with fw-app-dev for manifest or module fixes. Works with Cursor, Claude Code, and any MCP-compliant client.
20fw-app-dev
Expert-level development skill for building, debugging, reviewing, and migrating Freshworks Platform 3.0 marketplace applications. REQUIRES Node.js 24.x + FDK 10.x installed BEFORE use—checks prerequisites and refuses to proceed without them. Does NOT install or manage FDK/Node—use fw-setup skill. Before fdk validate, follow this SKILL.md Manifest + toolchain gate (fw-setup if CLI wrong, /fdk-migrate on 2.x or legacy engines, then validate—never downgrade to FDK 9/Node 18 as a shortcut except LAST RESORT after six validate iterations). New apps default to FDK 10.0.1 and Node.js 24.x; FDK 9.x/Node 18.x allowed when explicitly requested with deprecation notice. Use for: (1) Creating Platform 3.0 apps (frontend, serverless, hybrid, OAuth), (2) Debugging validation errors, (3) Migrating Platform 2.x apps to 3.0, (4) Reviewing manifest.json, requests.json, oauth_config.json, (5) Implementing Crayons UI, (6) Integrating external APIs or OAuth providers, (7) Any Freshworks Platform 3.0 app development, FDK CLI, or marketplace submission task.
18fw-ai-actions-app
Expert-level skill for AI Actions and integrations on Freshworks Platform 3.0. Use when (1) Creating actions.json and SMI functions (flat request, nested response), (2) Request templates and third-party API integration, (3) Pre-build validation (pricing, paywalls, account prerequisites), (4) Failure-case validation and test data guardrails, (5) Debugging broken endpoints, (6) Integration implementation checklist (auth, base URL, request body, trigger-friendly schema), (7) Scoping and planning new integrations (and comparing only when user asks).
17fw-ai-app-dev
Expert-level skill for AI Actions and integrations on Freshworks Platform 3.0. Use when (1) Creating actions.json and SMI functions (flat request, nested response), (2) Request templates and third-party API integration, (3) Pre-build validation (pricing, paywalls, account prerequisites), (4) Failure-case validation and test data guardrails, (5) Debugging broken endpoints, (6) Integration implementation checklist (auth, base URL, request body, trigger-friendly schema), (7) Scoping and planning new integrations (and comparing only when user asks).
2