Freshworks CRM integration via Apideck's CRM unified API — same methods work across every connector in CRM, switch by changing `serviceId`. Use when the user wants to read, write, or search contacts, companies, leads, opportunities, activities, and pipelines in Freshworks CRM. Routes through Apideck with serviceId "freshsales".
75
71%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./connectors/freshsales/SKILL.mdQuality
Discovery
100%Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.
This is a strong skill description that clearly identifies the specific CRM platform (Freshworks/Freshsales), the integration mechanism (Apideck unified API), the concrete actions supported (read, write, search), and the specific entities involved (contacts, companies, leads, etc.). It includes an explicit 'Use when' clause with natural trigger terms and is highly distinctive due to the product-specific naming.
| Dimension | Reasoning | Score |
|---|---|---|
Specificity | Lists multiple specific concrete actions: 'read, write, or search contacts, companies, leads, opportunities, activities, and pipelines'. Also specifies the integration mechanism (Apideck unified API, serviceId). | 3 / 3 |
Completeness | Clearly answers both 'what' (Freshworks CRM integration via Apideck unified API for reading, writing, searching CRM entities) and 'when' (explicit 'Use when the user wants to read, write, or search contacts, companies, leads, opportunities, activities, and pipelines in Freshworks CRM'). | 3 / 3 |
Trigger Term Quality | Includes strong natural keywords users would say: 'Freshworks CRM', 'contacts', 'companies', 'leads', 'opportunities', 'activities', 'pipelines', 'Freshsales', 'Apideck'. Good coverage of both product names and CRM entity types. | 3 / 3 |
Distinctiveness Conflict Risk | Highly distinctive — specifically targets Freshworks CRM / Freshsales via Apideck with a specific serviceId. The mention of 'serviceId freshsales' and the specific product name makes it very unlikely to conflict with other CRM skills unless there are other Freshworks-specific skills. | 3 / 3 |
Total | 12 / 12 Passed |
Implementation
42%Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.
This skill excels at progressive disclosure and navigation but suffers from excessive marketing/promotional content that inflates token usage without adding instructional value. The actionable content is limited to a single list-contacts example, with most real guidance delegated to other skills. The skill would benefit from trimming promotional language and adding more concrete examples of common Freshworks CRM operations.
Suggestions
Remove or drastically shorten the 'Portable across 21 CRM connectors' section — the portability point is already made in the intro and doesn't need a code example and paragraph of marketing copy.
Add 2-3 more concrete code examples for common operations (e.g., creating a contact, searching leads, listing opportunities) rather than delegating everything to SDK skills.
Trim the 'When to use this skill' section to 1-2 lines — Claude doesn't need detailed activation criteria explained.
Add a brief error handling example showing what happens when a method isn't supported and how to handle UnsupportedOperationError, rather than just linking to another skill.
| Dimension | Reasoning | Score |
|---|---|---|
Conciseness | Significant verbosity throughout. The 'Portable across 21 CRM connectors' section repeats the portability pitch already stated in the intro. Marketing language like 'compounding advantage' and explanations of what Apideck does (auth, pagination, rate limiting) are things Claude doesn't need explained. The 'When to use this skill' section over-explains activation criteria. Much of this content is promotional rather than instructional. | 1 / 3 |
Actionability | The minimal TypeScript example and curl commands are concrete and executable, which is good. However, the skill mostly delegates to other skills for actual method surfaces, parameters, and pagination. Key operations like creating/updating contacts, searching leads, or managing opportunities have no examples. The proxy API example is incomplete with a placeholder URL. | 2 / 3 |
Workflow Clarity | There's a reasonable implicit workflow: set up auth → verify coverage → make API calls → use proxy as fallback. However, there are no explicit validation checkpoints, no error handling examples, and no feedback loops for when coverage checks fail or API calls return errors. The coverage verification step is good but lacks guidance on interpreting results. | 2 / 3 |
Progressive Disclosure | Excellent progressive disclosure with clear one-level-deep references to SDK skills, best practices, connector coverage, OpenAPI specs, and external docs. The overview stays at the right level and signposts where to find detailed information. Navigation links are well-organized in the 'See also' section. | 3 / 3 |
Total | 8 / 12 Passed |
Validation
81%Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.
Validation — 9 / 11 Passed
Validation for skill structure
| Criteria | Description | Result |
|---|---|---|
metadata_field | 'metadata' should map string keys to string values | Warning |
frontmatter_unknown_keys | Unknown frontmatter key(s) found; consider removing or moving to metadata | Warning |
Total | 9 / 11 Passed | |
9e04d86
Table of Contents
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.