Conversation
* Add firebase-data-connect-basics skill (#7) * Add firebase-data-connect-basics skill * Add firebase dataconnect basic skills --------- Co-authored-by: Muhammad Talha <muhammadtalhar@google.com> * [Dataconnect] Restructure SKILL.md into a development workflow guide --------- Co-authored-by: Muhammad Talha <muhammadtalhar@google.com> Co-authored-by: Muhammad Talha <126821605+mtr002@users.noreply.github.com>
* Add Cursor plugin configuration * Add logo to cursor plugin config * Move logo to assets directory * Restructure Cursor plugin to multi-plugin format * Clean up language * Use a symlink instead
Change all `firebase` shell command mentioned in the skills to use `npx -y firebase-tools@latest` instead to ensure freshness and reduce frictions to the agents.
- Move all one-time-only local environment setup from `firebase-basic` to `firebase-local-env-setup` skill - Add description about how to install skills and MCP server.
Co-authored-by: ssbushi <66321939+ssbushi@users.noreply.github.com>
* Add agent skills for firestore enterprise with native mode * Amend SKILL.md * Format SKILL * Address comments and rename standard edition * Remove files & update frontmatter * Updated to use "npx firebase-tools@latest" --------- Co-authored-by: Sichen Liu <sichenliu@google.com> Co-authored-by: Joe Hanley <joehanley@google.com>
Updated the installation reference guides for all supported agents (Antigravity, Claude Code, Cursor, Gemini CLI, GitHub Copilot, and others) in the `firebase-local-env-setup` skill. - Added detailed steps to locate, verify, and safely merge MCP configurations (`mcp.json`, `claude_desktop_config.json`, etc.) without overwriting existing entries. - Added explicit instructions to check for existing skill installations using `npx skills list` before installing. - Enforced "stop and wait" instructions for user restarts to ensure the agent correctly verifies the MCP server connection securely.
* Update `firebase-basics` skills - Optimize description so that it is more likely to be loaded - Clearly state the prerequisites, how to validate them and how to meet them. - Add principles about how to optimize agent ability to help with Firebase related task - Indexing other knowledges for progressive disclosure. Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* docs: improve local installation instructions * docs: address reviewer feedback on local installation instructions
#52) * adjusting cursor plugin to reflect skills and mcp setup path correctly * Apply suggestion from @gemini-code-assist[bot] Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * update mcp path to ensure it can find it * correct the path --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Moving battlehardened AI studio prompt into skills * PR fixes * Address PR feedback: add isRecent, isAdmin, fix regex escaping and numbering * PR fixes * PR fixes
There was a problem hiding this comment.
Code Review
This pull request expands the repository with new agent skills for Genkit and Firebase Data Connect, automation scripts, and integration files for Cursor and Kiro. The review identified several issues, including incorrect yq flags in shell scripts, a command injection vulnerability in the token counter utility, and factual errors regarding Gemini model availability. Additionally, typos and broken links were found in the documentation.
| if [ -f "$skill_md" ]; then | ||
| # We use yq to check the metadata. | ||
| # The '|| echo false' handles cases where the field is missing or yq fails. | ||
| is_managed=$(yq -f extract '.metadata["genkit-managed"] == true' "$skill_md" 2>/dev/null || echo false) |
There was a problem hiding this comment.
The yq command uses the -f flag with extract, which instructs yq to read the filter expression from a file named extract. This file is not present in the repository. If you intended to pass the filter string directly, the -f extract part should be removed.
| is_managed=$(yq -f extract '.metadata["genkit-managed"] == true' "$skill_md" 2>/dev/null || echo false) | |
| is_managed=$(yq '.metadata["genkit-managed"] == true' "$skill_md" 2>/dev/null || echo false) |
|
|
||
| # Mark as managed by Genkit using yq | ||
| # The -i flag edits in place, -f process runs the filter | ||
| yq -i -f process '.metadata["genkit-managed"] = true' "$dest_dir/SKILL.md" |
There was a problem hiding this comment.
Similar to the prune script, the -f process flag instructs yq to look for a file named process containing the filter, which is missing. To apply the filter string directly, remove these flags.
| yq -i -f process '.metadata["genkit-managed"] = true' "$dest_dir/SKILL.md" | |
| yq -i '.metadata["genkit-managed"] = true' "$dest_dir/SKILL.md" |
| process.exit(1); | ||
| } | ||
|
|
||
| const modelName = "gemini-3.1-pro-preview"; |
There was a problem hiding this comment.
The model name gemini-3.1-pro-preview does not correspond to any currently available Google Generative AI model (current versions are 1.5 and 2.0). This will cause the script to fail when attempting to initialize the model.
| const modelName = "gemini-3.1-pro-preview"; | |
| const modelName = "gemini-1.5-flash"; |
|
|
||
| getFileContent(ref, relativePath) { | ||
| try { | ||
| return execSync(`git show ${ref}:"${relativePath}"`, { stdio: 'pipe', cwd: this.root }).toString('utf8'); |
There was a problem hiding this comment.
| ai.defineTool( | ||
| name: 'add', | ||
| description: 'Add two numbers together', | ||
| inputSchema: .map(.string(), .dynamicSChema()), |
|
|
||
| ## Model Selection (Google AI) | ||
| - **Gemini Models**: If using Google AI, ALWAYS use the latest generation (`gemini-3-*` or `gemini-2.5-*`). | ||
| - **NEVER** use `gemini-2.0-*` or `gemini-1.5-*` series, as they are decommissioned and won't work. |
There was a problem hiding this comment.
| - **Gemini CLI**: Follow [references/refresh-gemini-cli.md](references/refresh-gemini-cli.md) | ||
| - **Claude Code**: Follow [references/refresh-claude.md](references/refresh-claude.md) | ||
| - **Cursor**: Follow [references/refresh-cursor.md](references/refresh-cursor.md) | ||
| - **Others**: Follow [references/refresh-other.md](references/refresh-other-agents.md) |
There was a problem hiding this comment.
The link text references/refresh-other.md is inconsistent with the actual filename references/refresh-other-agents.md provided in the repository.
| - **Others**: Follow [references/refresh-other.md](references/refresh-other-agents.md) | |
| - **Others**: Follow [references/refresh-other-agents.md](references/refresh-other-agents.md) |
No description provided.