Add Claude plugin (Claude Code, Claude.ai, Desktop, Cowork) - #23
Conversation
Moves the TinyFish plugin previously hosted in tinyfish-cookbook to this repo, matching the per-platform integration layout already used here (dify/, langchain/, n8n/, google-adk/). MCP-based, no CLI dependency: bundles the hosted MCP server via .mcp.json and ships three focused skills (search, fetch, agent) instead of one combined skill. search and fetch are free; agent draws on plan automation credits (600 free for new users). tinyfish-cookbook's copy is left in place for now since Anthropic's Partners-tab listing still points there — this just stages the new location so we can hand Anthropic the new repo/path once ready, without breaking the live plugin in the meantime. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
🚧 Files skipped from review as they are similar to previous changes (4)
📝 WalkthroughWalkthroughThe pull request adds a TinyFish Claude plugin with marketplace and plugin manifests, remote MCP server configuration, and repository integration documentation. It introduces search, fetch, and browser automation skill specifications with parameters, examples, response details, and escalation guidance. Plugin documentation covers setup and privacy behavior, while the changelog records releases 1.0.0 and 1.1.0. Suggested reviewers: 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@claude/README.md`:
- Around line 7-11: Remove the unauthenticated and “no auth” wording and update
the TinyFish usage descriptions to state that first use requires OAuth, a
TinyFish account, and available credits. Apply this consistently in
claude/README.md lines 7-11, claude/skills/search/SKILL.md line 3,
claude/skills/fetch/SKILL.md line 3, and claude/skills/agent/SKILL.md line 3.
In `@claude/skills/agent/SKILL.md`:
- Line 19: Update the agent_config documentation in SKILL.md to mark max_steps
as beta-gated, explicitly stating that Claude must only include it for accounts
with beta access and that non-beta requests containing it return 403 FORBIDDEN.
In `@claude/skills/fetch/SKILL.md`:
- Around line 24-26: Update the if_none_match / if_modified_since documentation
in SKILL.md to note that validators apply only on the Fetch fast path and
browser-rendered URLs may return conditional_unsupported. Instruct Claude to
retry the request without validators when that response occurs.
In `@claude/skills/search/SKILL.md`:
- Around line 21-24: Align the documentation with the live MCP contract:
claude/skills/fetch/SKILL.md lines 24-26 must state that if_none_match and
if_modified_since apply only to the fast-path Fetch API and cannot be used for
browser-rendered URLs; claude/skills/agent/SKILL.md lines 14 and 19 must
identify agent_config.max_steps as beta-gated, and update its related guidance
at lines 50-53 consistently. The search documentation at
claude/skills/search/SKILL.md lines 21-24 requires no direct change.
- Around line 21-24: Update the search parameter documentation in the skill
instructions to remove include_thumbnail and state that recency_minutes,
after_date, and before_date must not be used with domain_type="research_paper".
Keep the remaining Search API parameter descriptions unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 5d3fb4da-0228-4d28-9561-74a21f407bd1
📒 Files selected for processing (9)
.claude-plugin/marketplace.jsonREADME.mdclaude/.claude-plugin/plugin.jsonclaude/.mcp.jsonclaude/CHANGELOG.mdclaude/README.mdclaude/skills/agent/SKILL.mdclaude/skills/fetch/SKILL.mdclaude/skills/search/SKILL.md
| - `use_vault` / `credential_item_ids` — inject vault credentials for login flows | ||
| - `output_schema` — structured-output schema for the result | ||
| - `browser_profile` — `"lite"` (default) or `"stealth"` for anti-detection on bot-protected sites | ||
| - `agent_config` — `max_steps`, `max_duration_seconds`, `mode: "strict"` for fail-fast test automation |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspect the target file around the referenced line
sed -n '1,80p' claude/skills/agent/SKILL.md
printf '\n--- SEARCH ---\n'
# Find mentions of max_steps and beta gating across the repo
rg -n --hidden --no-messages 'max_steps|beta-gated|beta gate|beta-gated' claude/skills -SRepository: tinyfish-io/tinyfish-web-agent-integrations
Length of output: 4376
🌐 Web query:
docs.tinyfish.ai agent API reference max_steps 403 FORBIDDEN beta-gated
💡 Result:
The max_steps field in the TinyFish Agent API is a beta-gated feature [1][2][3]. It allows users to set a custom limit (from 1 to 500) on the number of tool-call steps an agent takes before stopping [2][4][3]. If a non-beta-enabled account includes the max_steps field in an API request, the API will return a 403 FORBIDDEN error [1][3]. Requests that do not include this field will proceed normally, using the default step limit of 150 [1][3]. To gain access to this feature, you must contact TinyFish support to enable it for your account [1][2][3].
Citations:
- 1: https://docs.tinyfish.ai/agent-api/reference
- 2: https://docs.tinyfish.ai/key-concepts/runs
- 3: https://tinyfish.mintlify.app/agent-api/reference
- 4: https://docs.tinyfish.ai/key-concepts/endpoints
Mark max_steps as beta-gated. Non-beta requests that include max_steps return 403 FORBIDDEN, so Claude should only send it when the account has beta access.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@claude/skills/agent/SKILL.md` at line 19, Update the agent_config
documentation in SKILL.md to mark max_steps as beta-gated, explicitly stating
that Claude must only include it for accounts with beta access and that non-beta
requests containing it return 403 FORBIDDEN.
| - `domain_type` — `"web"` (default), `"news"`, or `"research_paper"` | ||
| - `recency_minutes` — results from the past N minutes (1 to 5,256,000). Do not combine with `after_date`/`before_date`. | ||
| - `after_date` / `before_date` — `YYYY-MM-DD` window | ||
| - `include_thumbnail` — `"true"`/`"false"`, include a thumbnail URL when available |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== SKILL files ==\n'
for f in claude/skills/search/SKILL.md claude/skills/fetch/SKILL.md claude/skills/agent/SKILL.md; do
echo "--- $f"
wc -l "$f"
sed -n '1,120p' "$f" | nl -ba | sed -n '1,120p'
done
printf '\n== Search for the cited parameters and related schema/docs ==\n'
rg -n --hidden --glob '!**/.git/**' \
-e 'include_thumbnail|domain_type|recency_minutes|after_date|before_date|include_etag_and_last_modified|if_none_match|if_modified_since|per_url_timeout_ms|session_id|max_steps|max_duration_seconds|get_steps|list_runs|get_run|cancel_run|mode: "strict"' \
claudeRepository: tinyfish-io/tinyfish-web-agent-integrations
Length of output: 307
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== External docs query ==\n'
python3 - <<'PY'
import urllib.request, json, ssl, re
urls = [
"https://docs.tinyfish.ai/mcp-integration",
]
ctx = ssl.create_default_context()
for url in urls:
print(f"--- {url}")
try:
with urllib.request.urlopen(url, context=ctx, timeout=15) as r:
text = r.read(400000).decode('utf-8', 'replace')
# Print a few keyword hits if present
keywords = [
"include_thumbnail", "domain_type", "recency_minutes", "after_date", "before_date",
"if_none_match", "if_modified_since", "include_etag_and_last_modified", "per_url_timeout_ms",
"session_id", "max_steps", "max_duration_seconds", "get_steps", "list_runs", "cancel_run"
]
for kw in keywords:
if kw in text:
idx = text.index(kw)
snippet = re.sub(r'\s+', ' ', text[max(0, idx-120):idx+220])
print(f"hit {kw}: {snippet}")
except Exception as e:
print(f"ERR: {e}")
PYRepository: tinyfish-io/tinyfish-web-agent-integrations
Length of output: 393
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== git diff/stat for these files (if any) ==\n'
git diff --stat -- claude/skills/search/SKILL.md claude/skills/fetch/SKILL.md claude/skills/agent/SKILL.md || trueRepository: tinyfish-io/tinyfish-web-agent-integrations
Length of output: 227
🌐 Web query:
TinyFish MCP integration include_thumbnail session_id max_steps get_steps docs.tinyfish.ai
💡 Result:
The TinyFish MCP integration provides tools for web automation and research, allowing AI assistants to interact with websites and retrieve data [1][2]. Key parameters and tools relevant to your query are detailed below based on official TinyFish documentation [1][3][4]. Key Parameters and Functions: 1. session_id: This parameter is required for web automation and research calls (e.g., in run_web_automation or run_big_search) [1][5][4]. It must be a unique, randomly generated UUID v4 for every single request [5]. Reusing a session_id can break concurrent sessions [5]. 2. max_steps: This is a configuration parameter under agent_config that limits the number of tool-call steps an agent can execute before stopping [3][4]. It accepts an integer from 1 to 500 (the default is 150) [3]. Note that custom max_steps may be a beta feature requiring account-level enablement [3]. 3. get_steps: This tool (often referred to as get_steps or tinyfishmcp_get_steps) is used to retrieve the execution trace of an automation run, including screenshots [5][4]. It typically requires a runId (or session_id in some contexts) to fetch the steps taken during the process [5][4]. 4. include_thumbnail: This parameter is available in the TinyFish search tool (e.g., tinyfishmcp_search) to include thumbnails in the search results [4]. Documentation and Usage: You can access the official TinyFish documentation at docs.tinyfish.ai [1][2]. For MCP-compatible hosts (such as Claude Code, Claude Desktop, Cursor, and Windsurf), you can connect the TinyFish MCP server using the instructions found at https://docs.tinyfish.ai/mcp-integration [1][2][6]. For developers, TinyFish provides structured API surfaces for Agent, Search, Fetch, and Browser tasks [7]. Detailed references for these parameters, including screenshot management and HTML snapshots, are available in the TinyFish developer guides [3][7].
Citations:
- 1: https://docs.tinyfish.ai/mcp-integration
- 2: https://docs.tinyfish.ai/using-with-ai
- 3: https://tinyfish.mintlify.app/key-concepts/runs
- 4: https://www.scalekit.com/connectors/tinyfishmcp
- 5: https://docs.composio.dev/toolkits/tinyfish_mcp
- 6: https://docs.tinyfish.ai/for-coding-agents
- 7: https://docs.tinyfish.ai/
🏁 Script executed:
#!/bin/bash
set -euo pipefail
for f in claude/skills/search/SKILL.md claude/skills/fetch/SKILL.md claude/skills/agent/SKILL.md; do
echo "=== $f ==="
cat -n "$f"
echo
doneRepository: tinyfish-io/tinyfish-web-agent-integrations
Length of output: 11015
🏁 Script executed:
#!/bin/bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
files = [
Path("claude/skills/search/SKILL.md"),
Path("claude/skills/fetch/SKILL.md"),
Path("claude/skills/agent/SKILL.md"),
]
for p in files:
print(f"=== {p} ===")
txt = p.read_text()
for i, line in enumerate(txt.splitlines(), 1):
print(f"{i:>4}: {line}")
print()
PYRepository: tinyfish-io/tinyfish-web-agent-integrations
Length of output: 10856
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n "include_thumbnail|domain_type|recency_minutes|after_date|before_date|if_none_match|if_modified_since|include_etag_and_last_modified|per_url_timeout_ms|session_id|max_steps|max_duration_seconds|get_steps|list_runs|get_run|cancel_run|mode: \"strict\"" claude/skillsRepository: tinyfish-io/tinyfish-web-agent-integrations
Length of output: 2954
🌐 Web query:
site:docs.tinyfish.ai TinyFish conditional validators browser-rendered URLs if_none_match if_modified_since
💡 Result:
In the TinyFish Web Agent platform, conditional validators—specifically if_none_match (using ETag) and if_modified_since (using Last-Modified)—are supported exclusively on the fast path of the Fetch API [1][2]. These conditional requests cannot be used for browser-rendered URLs [1][3]. If you attempt to use these headers for a URL that requires browser rendering, the API will return a conditional_unsupported error [3]. Key considerations for using conditional validators in TinyFish: 1. Stateless Pass-Through: The Fetch API does not store validators for you [4][3]. To use them, you must first perform an initial fetch with include_etag_and_last_modified: true enabled [4][2]. 2. Storage: You are responsible for durably storing the returned etag and last_modified values, keyed by their respective URLs [4][3]. 3. Replay: On subsequent requests, you pass the saved values back to the API using the if_none_match and if_modified_since parameters [2][3]. 4. Optimization: If the origin server confirms the content has not changed, the API returns a result with not_modified: true, allowing you to skip re-processing the content [2][3]. 5. Limitations: These parameters are designed for single-URL requests; attempting to use them in a batch request will result in a 400 error [2].
Citations:
- 1: https://docs.tinyfish.ai/api-reference/fetch-and-extract-content-from-urls
- 2: https://docs.tinyfish.ai/fetch-api
- 3: https://docs.tinyfish.ai/fetch-api/reference
- 4: https://docs.tinyfish.ai/fetch-api/examples
🌐 Web query:
site:docs.tinyfish.ai TinyFish max_steps beta agent_config max_steps
💡 Result:
The agent_config.max_steps field in the TinyFish API is a beta feature that allows you to specify a custom limit on the number of tool-call steps an agent takes during a run [1][2][3]. Key details include: - Functionality: It controls the maximum number of steps allowed before the agent stops [3]. This is useful for bounding costs on simple tasks or providing a larger budget for complex, multi-page workflows [3]. - Constraints: The field accepts an integer between 1 and 500 [1][3]. If omitted, the system defaults to 150 steps [1][3]. - Beta Status: This is a beta-gated feature [1][3]. You must contact TinyFish support to enable it for your account [1][3]. - API Behavior: If you include max_steps in an API request without having beta access enabled, the request will return a 403 FORBIDDEN error [1]. - Error Handling: If a run reaches the configured limit, it will terminate with a MAX_STEPS_EXCEEDED error (categorized as AGENT_FAILURE) [4]. To configure it, include the field within the agent_config object in your request body: { "url": "https://example.com", "goal": "Your goal here", "agent_config": { "max_steps": 50 } }
Citations:
- 1: https://docs.tinyfish.ai/agent-api/reference
- 2: https://docs.tinyfish.ai/key-concepts/endpoints
- 3: https://docs.tinyfish.ai/key-concepts/runs
- 4: https://docs.tinyfish.ai/error-codes
Align these docs with the live MCP contract.
claude/skills/fetch/SKILL.md#L24-L26: note thatif_none_match/if_modified_sinceonly work on the fast-path Fetch API and can’t be used for browser-rendered URLs.claude/skills/agent/SKILL.md#L19-L19: markagent_config.max_stepsas beta-gated.
📍 Affects 3 files
claude/skills/search/SKILL.md#L21-L24(this comment)claude/skills/fetch/SKILL.md#L24-L26claude/skills/agent/SKILL.md#L14-L14claude/skills/agent/SKILL.md#L19-L19claude/skills/agent/SKILL.md#L50-L53
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@claude/skills/search/SKILL.md` around lines 21 - 24, Align the documentation
with the live MCP contract: claude/skills/fetch/SKILL.md lines 24-26 must state
that if_none_match and if_modified_since apply only to the fast-path Fetch API
and cannot be used for browser-rendered URLs; claude/skills/agent/SKILL.md lines
14 and 19 must identify agent_config.max_steps as beta-gated, and update its
related guidance at lines 50-53 consistently. The search documentation at
claude/skills/search/SKILL.md lines 21-24 requires no direct change.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== file list ==\n'
git ls-files 'claude/skills/search/*' 'claude/skills/*search*' | sed -n '1,120p'
printf '\n== SKILL.md around target lines ==\n'
nl -ba claude/skills/search/SKILL.md | sed -n '1,120p'
printf '\n== search for parameter names in repo ==\n'
rg -n --hidden --glob '!**/.git/**' -e 'include_thumbnail|recency_minutes|after_date|before_date|domain_type' claude | sed -n '1,200p'Repository: tinyfish-io/tinyfish-web-agent-integrations
Length of output: 304
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== Search API references in repo ==\n'
rg -n --hidden --glob '!**/.git/**' -e 'Search API|search-api|tinyfish|include_thumbnail|research_paper|recency_minutes' . | sed -n '1,240p'Repository: tinyfish-io/tinyfish-web-agent-integrations
Length of output: 24361
🌐 Web query:
tinyfish.ai search-api reference include_thumbnail recency_minutes research_paper domain_type
💡 Result:
The TinyFish Search API provides several parameters to refine search requests, including the following: - recency_minutes: A freshness window parameter used to filter results relative to the current time [1][2][3]. It must be an integer ranging from 1 to 5,256,000 (representing up to 10 years) [1][2]. - domain_type: A parameter used to define the type of search performed [1][2]. It accepts one of three values: "web" (default), "news" (to retrieve recent news articles with publisher and date), or "research_paper" (to search academic papers, providing metadata such as authors, venue, and citation count) [1][2][4]. - include_thumbnail: While standard API documentation for the Search API endpoint primarily highlights parameters like query, purpose, location, language, domain_type, and recency_minutes, explicit confirmation of an include_thumbnail parameter is not detailed in the core API reference parameters [1][5][2]. Users interact with these parameters via the GET endpoint at https://api.search.tinyfish.ai, requiring an X-API-Key header for authentication [1][5].
Citations:
- 1: https://docs.tinyfish.ai/search-api/reference
- 2: https://tinyfish.mintlify.app/search-api/reference
- 3: https://docs.tinyfish.ai/search-api/examples
- 4: https://tinyfish.mintlify.app/search-api/examples
- 5: https://docs.tinyfish.ai/search-api
🌐 Web query:
site:docs.tinyfish.ai OR site:tinyfish.mintlify.app "research_paper" recency_minutes after_date before_date TinyFish Search API
💡 Result:
In the TinyFish Search API, the recency_minutes, after_date, and before_date parameters are used to filter results by freshness or time range [1][2]. However, these parameters are explicitly not supported when performing a search with domain_type="research_paper" [3]. Here are the details for these parameters: - recency_minutes: An integer from 1 to 5,256,000 (10 years) that defines a freshness window relative to the current time [4][5]. - after_date: A lower date bound in YYYY-MM-DD format [3][5]. - before_date: An upper date bound in YYYY-MM-DD format [3][5]. When using these parameters, you should not combine recency_minutes with after_date or before_date [3]. If both after_date and before_date are provided, they must satisfy the condition after_date <= before_date [3]. When performing a research_paper search, these temporal filters are ignored or unsupported [3].
Citations:
- 1: https://docs.tinyfish.ai/search-api
- 2: https://docs.tinyfish.ai/search-api/examples
- 3: https://docs.tinyfish.ai/for-coding-agents
- 4: https://docs.tinyfish.ai/search-api/reference
- 5: https://tinyfish.mintlify.app/search-api/reference
🌐 Web query:
site:docs.tinyfish.ai OR site:tinyfish.mintlify.app "include_thumbnail" "search-api" TinyFish
💡 Result:
The TinyFish Search API is a service that allows users to perform web searches and retrieve structured results—such as titles, URLs, and snippets—programmatically [1][2]. It is part of the TinyFish Web Agent platform, which provides a suite of APIs for web interaction, including Agent, Search, Fetch, and Browser APIs [3]. Key technical details of the TinyFish Search API include: Endpoint: The canonical endpoint for search requests is GET https://api.search.tinyfish.ai [1][3]. Authentication: All requests must include an X-API-Key header [1][4]. API keys can be generated at agent.tinyfish.ai/api-keys [1][5]. Key Features: - Query Flexibility: Supports standard search operators, including site: to limit domains and -site: to exclude them [4][6]. - Search Types: Allows specifying the type of search via the type parameter, supporting "web" (default), "news", and "research_paper" [4][7]. - Localization: Supports parameters for location and language, with automatic resolution between the two if only one is provided [4][7]. - Intent Signal: An optional purpose parameter can be passed to provide context about the search task, helping to improve result quality [1][6]. Usage: The API is designed for programmatic consumption, with official SDKs available for Python and TypeScript [1][8]. A typical request involves passing a query string, and the API returns ranked results ready for further processing by an LLM or an application [1][2]. Unlike other TinyFish services, the Search API is free to use and does not consume credits [1][3]. When to use it: The Search API is recommended when you need ranked search engine results. For other web tasks, the platform offers alternative APIs: Fetch for extracting content from known URLs, Agent for autonomous goal-based browser automation, and Browser for direct browser control [1][3][9].
Citations:
- 1: https://docs.tinyfish.ai/search-api
- 2: https://docs.tinyfish.ai/api-reference/search-the-web
- 3: https://docs.tinyfish.ai/
- 4: https://docs.tinyfish.ai/search-api/reference
- 5: https://docs.tinyfish.ai/authentication
- 6: https://docs.tinyfish.ai/search-api/examples
- 7: https://tinyfish.mintlify.app/search-api/reference
- 8: https://docs.tinyfish.ai/quick-start
- 9: https://docs.tinyfish.ai/agent-api
🏁 Script executed:
#!/bin/bash
set -euo pipefail
sed -n '1,45p' claude/skills/search/SKILL.mdRepository: tinyfish-io/tinyfish-web-agent-integrations
Length of output: 2850
Align search parameters with the Search API contract. include_thumbnail isn’t in the current Search API reference, and recency_minutes/after_date/before_date don’t apply when domain_type="research_paper", so this can generate invalid requests.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@claude/skills/search/SKILL.md` around lines 21 - 24, Update the search
parameter documentation in the skill instructions to remove include_thumbnail
and state that recency_minutes, after_date, and before_date must not be used
with domain_type="research_paper". Keep the remaining Search API parameter
descriptions unchanged.
- Correct "no auth" wording: first use still triggers OAuth sign-in and requires a TinyFish account with credits — .mcp.json only removes CLI/install, not authentication (README + all 3 skills) - Mark agent_config.max_steps as beta-gated: non-beta accounts get 403 FORBIDDEN if it's included - Document that if_none_match/if_modified_since conditional requests only work on the fetch fast path; browser-rendered URLs may return conditional_unsupported - Note that search's temporal filters (recency_minutes/after_date/ before_date) aren't supported with domain_type="research_paper" Left include_thumbnail in place — it's a live parameter on the actual mcp__tinyfish__search tool schema; CodeRabbit's suggestion to remove it was based on public REST docs that don't cover the MCP tool's parameter set. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Summary
claude/integration directory, matching the existing per-platform layout (dify/,langchain/,n8n/,google-adk/)tinyfish-io/tinyfish-cookbook(plugins/tinyfish/) — content is identical to that repo'smainat commit00bf5cb7a3945110da2a8cc0323b29fccb988104https://agent.tinyfish.ai/mcp) via.mcp.json/tinyfish:search,/tinyfish:fetch,/tinyfish:agent— search and fetch are free, agent draws on plan automation credits (600 free for new users).claude-plugin/marketplace.jsonsoclaude plugin marketplace add tinyfish-io/tinyfish-web-agent-integrations/ Desktop's "Add marketplace" flow work the same way they do againsttinyfish-cookbooktodayplugin.json'srepositoryfield to point hereWhy this repo
Per internal discussion (tinyfish Slack,
#claude-pluginthread):tinyfish-cookbookis an examples/open-contributors repo, while this repo is meant to be the first-party home for TinyFish integrations — a better fit for something Anthropic's Partners-tab catalog points to long-term.Not included in this PR
tinyfish-cookbook's copy of the plugin is left untouched. Anthropic'sknowledge-work-plugins(Partners tab) catalog still points there today, so removing it now would break the live plugin. Once Anthropic repoints their pin at this repo, we'll remove the old copy in a follow-up PR.Test plan
claude plugin validate ./claudepasses.claude-plugin/marketplace.jsonis valid JSONknowledge-work-pluginscatalog can fetch from this repo once we send them the new source (repo is public, matching the git-subdir source schema used by all 93 other plugins in that catalog — no auth field exists in that schema, so public is required and this repo already satisfies it)🤖 Generated with Claude Code