FrootAI Contributor Guide
Everything you need to contribute to FrootAI โ from dev setup to PR review.
1. Development Environment Setupโ
1.1 Prerequisitesโ
- Node.js 18+ โ nodejs.org
- Git โ git-scm.com
- VS Code โ code.visualstudio.com
- Python 3.10+ (for evaluation scripts) โ python.org
1.2 Clone & Installโ
# Clone the repository
git clone https://github.com/gitpavleenbali/frootai.git
cd frootai
# Website
cd website && npm install && cd ..
# MCP Server
cd mcp-server && npm install && cd ..
# VS Code Extension
cd vscode-extension && npm install && cd ..
1.3 Build Everythingโ
# Website (Docusaurus)
cd website && npx docusaurus build
# MCP Server (no build step โ plain Node.js)
# VS Code Extension
cd vscode-extension && npm run compile
2. Repository Structureโ
frootai/
โโโ docs/ # 18+ knowledge modules (Markdown)
โโโ website/ # Docusaurus site
โ โโโ src/pages/ # React pages (landing, setup, plays...)
โ โโโ docusaurus.config.ts # Site config (baseUrl: /frootai/)
โ โโโ sidebars.ts # Docs sidebar structure
โโโ mcp-server/ # MCP Server (Node.js, stdio)
โ โโโ src/
โ โ โโโ index.js # Entry point
โ โ โโโ tools/ # Tool implementations
โ โโโ package.json
โโโ vscode-extension/ # VS Code Extension
โ โโโ src/
โ โ โโโ extension.ts # Activation entry point
โ โ โโโ commands/ # Command implementations
โ โ โโโ panels/ # Sidebar webview panels
โ โโโ package.json # Extension manifest
โโโ solution-plays/ # 20 solution play directories
โ โโโ 01-it-ticket-resolution/
โ โโโ 02-customer-support-agent/
โ โโโ ...
โโโ config/ # Shared configuration
โ โโโ openai.json
โ โโโ guardrails.json
โ โโโ routing.json
โโโ CONTRIBUTING.md # Quick contribution guide
โโโ LICENSE # MIT
โโโ README.md # Project overview
Key Filesโ
| File | Role |
|---|---|
docs/*.md | Knowledge modules โ the core content |
website/docusaurus.config.ts | Site configuration, plugins, theme |
website/sidebars.ts | Sidebar navigation tree |
mcp-server/src/index.js | MCP Server entry โ tool registration |
vscode-extension/package.json | Extension manifest โ commands, views, activation |
config/guardrails.json | Safety and content filtering rules |
3. Adding a New Solution Playโ
3.1 Step-by-Stepโ
-
Choose a number and slug:
21-my-new-play -
Create the directory structure:
mkdir -p solution-plays/21-my-new-play/.github/prompts
mkdir -p solution-plays/21-my-new-play/config
mkdir -p solution-plays/21-my-new-play/evaluation -
Write the README.md โ Overview, architecture, value proposition, deployment steps.
-
Write the agent.md (1500โ5000 bytes):
# Agent Rules: My New Play
## Context
You are an AI agent specializing in [scenario].
## Rules
1. Use Managed Identity (no API keys)
2. Read config files from config/ for parameters
3. Follow these behavior rules: [specifics]
4. Include error handling + logging -
Write copilot-instructions.md โ Project context for GitHub Copilot.
-
Add config files:
config/agents.jsonโ Model and routing parameters- Add other config files as needed
-
Create evaluation set:
evaluation/golden-set.jsonlโ At least 5 input/output pairsevaluation/evaluate.pyโ Scoring script
-
Add prompts:
prompts/init.prompt.mdโ Bootstrap prompt- Additional prompts as needed
3.2 Validation Checklistโ
Before submitting a PR, verify:
-
README.mdexists and is >500 bytes -
agent.mdexists and is 1500โ5000 bytes -
copilot-instructions.mdexists - At least one config file in
config/ -
evaluation/golden-set.jsonlhas 5+ examples -
evaluation/evaluate.pyruns without errors - No API keys or secrets in any file
- All file names use kebab-case
3.3 CI Validationโ
The validate-plays.yml workflow automatically checks:
- Required file existence
agent.mdbyte-size range- JSON validity of config files
- JSONL validity of golden sets
4. Improving Existing Contentโ
4.1 Knowledge Modules (docs/)โ
- Each module is a standalone Markdown file
- Front matter must include
sidebar_positionandtitle - Use Mermaid diagrams for architecture visuals
- Include practical examples, not just theory
- Target 800โ3000 lines per module
4.2 Agent Rules (agent.md)โ
When improving a play's agent.md:
- Keep it within 1500โ5000 bytes
- Include: context, rules, tool references, error handling
- Be specific about what the agent should/shouldn't do
- Reference config files by path
4.3 Config Filesโ
- All JSON must be valid and formatted
- Include comments (via
_commentfields) for documentation - Default values should be production-safe
- Guardrails should be strict by default
5. MCP Server Developmentโ
5.1 Adding a New Toolโ
-
Create
mcp-server/src/tools/my-new-tool.js:module.exports = {
name: "my_new_tool",
description: "What this tool does",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "The search query" }
},
required: ["query"]
},
handler: async ({ query }) => {
// Implementation
return { content: [{ type: "text", text: "Result" }] };
}
}; -
Register in
mcp-server/src/index.js:const myNewTool = require("./tools/my-new-tool");
server.addTool(myNewTool); -
Test locally:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"my_new_tool","arguments":{"query":"test"}}}' | node src/index.js
5.2 Tool Categoriesโ
| Category | Convention | Network? |
|---|---|---|
| Static | Returns bundled data | No |
| Live | Fetches external data | Yes |
| Chain | Multi-step orchestration | Depends |
| AI Ecosystem | Model/pattern guidance | No |
5.3 Testingโ
cd mcp-server
npm test # Unit tests
npm run test:integration # Integration tests (requires network for live tools)
6. VS Code Extension Developmentโ
6.1 Running in Dev Modeโ
- Open
vscode-extension/in VS Code - Press
F5โ launches Extension Development Host - Changes hot-reload on recompile
6.2 Adding a Commandโ
-
Register in
package.jsonundercontributes.commands:{
"command": "frootai.myCommand",
"title": "FROOT: My Command",
"category": "FROOT"
} -
Implement in
src/commands/my-command.ts:import * as vscode from "vscode";
export function registerMyCommand(context: vscode.ExtensionContext) {
context.subscriptions.push(
vscode.commands.registerCommand("frootai.myCommand", async () => {
// Implementation
vscode.window.showInformationMessage("Done!");
})
);
} -
Wire up in
src/extension.ts:import { registerMyCommand } from "./commands/my-command";
registerMyCommand(context);
6.3 Sidebar Panelsโ
Panels are implemented as webview providers in src/panels/. Each panel:
- Returns HTML content for the webview
- Uses message passing for interaction
- Follows the existing dark theme / green accent pattern
7. Website Developmentโ
7.1 Adding a Pageโ
Create website/src/pages/my-page.tsx:
import React from "react";
import Layout from "@theme/Layout";
import Link from "@docusaurus/Link";
import styles from "./index.module.css";
export default function MyPage(): JSX.Element {
return (
<Layout title="My Page" description="Description for SEO">
<div style={{ maxWidth: "900px", margin: "0 auto", padding: "48px 24px 80px" }}>
<h1>My Page</h1>
{/* Content */}
</div>
</Layout>
);
}
The page will be available at /frootai/my-page.
7.2 Docusaurus Conventionsโ
- Pages โ
website/src/pages/*.tsx(React) or.md(Markdown) - Docs โ
docs/*.md(Markdown with front matter) - Styles โ Use existing
index.module.cssclasses (glowCard,glowPill,ctaPrimary) - Sidebar โ Edit
website/sidebars.tsto add docs to navigation - Config โ
website/docusaurus.config.tsfor site-wide settings
7.3 Local Developmentโ
cd website
npx docusaurus start # Dev server with hot reload
npx docusaurus build # Production build
npx docusaurus serve # Serve production build locally
8. Testing & CIโ
8.1 validate-plays.ymlโ
Runs on every push that touches solution-plays/:
- Checks required files exist
- Validates
agent.mdsize (1500โ5000 bytes) - Validates JSON/JSONL files
- Reports failures as PR checks
8.2 Manual Testingโ
Before submitting a PR:
# Website builds
cd website && npx docusaurus build
# MCP server starts
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node mcp-server/src/index.js
# Extension compiles
cd vscode-extension && npm run compile
# Play validation passes
python scripts/validate-plays.py
9. PR Review Processโ
9.1 What Reviewers Look Forโ
- Completeness โ All required files present
- Quality โ agent.md is specific, not generic
- Security โ No API keys, secrets, or PII
- Consistency โ Naming follows conventions
- Testing โ Evaluation set covers edge cases
- Documentation โ README explains what and why
9.2 PR Templateโ
Every PR fills out the template with:
- Summary of changes
- Type (feature / fix / docs / play)
- Checklist of validation steps completed
9.3 Review Timelineโ
- Small fixes: 1โ2 days
- New plays: 3โ5 days
- Architecture changes: require discussion first
10. Code Styleโ
10.1 Namingโ
| Item | Convention | Example |
|---|---|---|
| Directories | kebab-case | solution-plays/01-it-ticket-resolution |
| Markdown files | PascalCase or kebab-case | RAG-Architecture.md, admin-guide.md |
| JSON files | kebab-case | model-comparison.json |
| TypeScript | camelCase (vars/functions), PascalCase (types) | fetchModule(), ToolConfig |
| CSS classes | camelCase (CSS modules) | glowCard, heroTitle |
10.2 Commentsโ
- Use JSDoc for TypeScript functions
- Use
#comments in shell scripts - Use
//comments in JSON (via_commentfields) - Markdown files don't need code comments โ the content IS the documentation
10.3 Encodingโ
- All files: UTF-8
- Line endings: LF (not CRLF)
- Indentation: 2 spaces (TypeScript, JSON, YAML), 4 spaces (Python)
- Max line length: 120 characters (soft limit)
Next: Admin Guide ยท User Guide ยท API Reference