

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
123456789# Cline Extension Architecture & Development Guide1011## Project Overview1213Cline is a VSCode extension that provides AI assistance through a combination of a core extension backend and a React-based webview frontend. The extension is built with TypeScript and follows a modular architecture pattern.1415## Architecture Overview1617```mermaid18graph TB19 subgraph VSCodeExtensionHost[VSCode Extension Host]20 subgraph CoreExtension[Core Extension]21 ExtensionEntry[Extension Entry<br/>src/extension.ts]22 WebviewProvider[WebviewProvider<br/>src/core/webview/index.ts]23 Controller[Controller<br/>src/core/controller/index.ts]24 Task[Task<br/>src/core/task/index.ts]25 GlobalState[VSCode Global State]26 SecretsStorage[VSCode Secrets Storage]27 McpHub[McpHub<br/>src/services/mcp/McpHub.ts]28 end2930 subgraph WebviewUI[Webview UI]31 WebviewApp[React App<br/>webview-ui/src/App.tsx]32 ExtStateContext[ExtensionStateContext<br/>webview-ui/src/context/ExtensionStateContext.tsx]33 ReactComponents[React Components]34 end3536 subgraph Storage37 TaskStorage[Task Storage<br/>Per-Task Files & History]38 CheckpointSystem[Git-based Checkpoints]39 end4041 subgraph apiProviders[API Providers]42 AnthropicAPI[Anthropic]43 OpenRouterAPI[OpenRouter]44 BedrockAPI[AWS Bedrock]45 OtherAPIs[Other Providers]46 end4748 subgraph MCPServers[MCP Servers]49 ExternalMcpServers[External MCP Servers]50 end51 end5253 %% Core Extension Data Flow54 ExtensionEntry --> WebviewProvider55 WebviewProvider --> Controller56 Controller --> Task57 Controller --> McpHub58 Task --> GlobalState59 Task --> SecretsStorage60 Task --> TaskStorage61 Task --> CheckpointSystem62 Task --> |API Requests| apiProviders63 McpHub --> |Connects to| ExternalMcpServers64 Task --> |Uses| McpHub6566 %% Webview Data Flow67 WebviewApp --> ExtStateContext68 ExtStateContext --> ReactComponents6970 %% Bidirectional Communication71 WebviewProvider <-->|postMessage| ExtStateContext7273 style GlobalState fill:#f9f,stroke:#333,stroke-width:2px74 style SecretsStorage fill:#f9f,stroke:#333,stroke-width:2px75 style ExtStateContext fill:#bbf,stroke:#333,stroke-width:2px76 style WebviewProvider fill:#bfb,stroke:#333,stroke-width:2px77 style McpHub fill:#bfb,stroke:#333,stroke-width:2px78 style apiProviders fill:#fdb,stroke:#333,stroke-width:2px79```8081## Definitions8283- **Core Extension**: Anything inside the src folder, organized into modular components84- **Core Extension State**: Managed by the Controller class in src/core/controller/index.ts, which serves as the single source of truth for the extension's state. It manages multiple types of persistent storage (global state, workspace state, and secrets), handles state distribution to both the core extension and webview components, and coordinates state across multiple extension instances. This includes managing API configurations, task history, settings, and MCP configurations.85- **Webview**: Anything inside the webview-ui. All the react or view's seen by the user and user interaction components86- **Webview State**: Managed by ExtensionStateContext in webview-ui/src/context/ExtensionStateContext.tsx, which provides React components with access to the extension's state through a context provider pattern. It maintains local state for UI components, handles real-time updates through message events, manages partial message updates, and provides methods for state modifications. The context includes extension version, messages, task history, theme, API configurations, MCP servers, marketplace catalog, and workspace file paths. It synchronizes with the core extension through VSCode's message passing system and provides type-safe access to state through a custom hook (useExtensionState).8788### Core Extension Architecture8990The core extension follows a clear hierarchical structure:91921. **WebviewProvider** (src/core/webview/index.ts): Manages the webview lifecycle and communication932. **Controller** (src/core/controller/index.ts): Handles webview messages and task management943. **Task** (src/core/task/index.ts): Executes API requests and tool operations9596This architecture provides clear separation of concerns:97- WebviewProvider focuses on VSCode webview integration98- Controller manages state and coordinates tasks99- Task handles the execution of AI requests and tool operations100101### WebviewProvider Implementation102103The WebviewProvider class in `src/core/webview/index.ts` is responsible for:104105- Managing multiple active instances through a static set (`activeInstances`)106- Handling webview lifecycle events (creation, visibility changes, disposal)107- Implementing HTML content generation with proper CSP headers108- Supporting Hot Module Replacement (HMR) for development109- Setting up message listeners between the webview and extension110111The WebviewProvider maintains a reference to the Controller and delegates message handling to it. It also handles the creation of both sidebar and tab panel webviews, allowing Cline to be used in different contexts within VSCode.112113### Core Extension State114115The `Controller` class manages multiple types of persistent storage:116117- **Global State:** Stored across all VSCode instances. Used for settings and data that should persist globally.118- **Workspace State:** Specific to the current workspace. Used for task-specific data and settings.119- **Secrets:** Secure storage for sensitive information like API keys.120121The `Controller` handles the distribution of state to both the core extension and webview components. It also coordinates state across multiple extension instances, ensuring consistency.122123State synchronization between instances is handled through:124- File-based storage for task history and conversation data125- VSCode's global state API for settings and configuration126- Secrets storage for sensitive information127- Event listeners for file changes and configuration updates128129The Controller implements methods for:130- Saving and loading task state131- Managing API configurations132- Handling user authentication133- Coordinating MCP server connections134- Managing task history and checkpoints135136### Webview State137138The `ExtensionStateContext` in `webview-ui/src/context/ExtensionStateContext.tsx` provides React components with access to the extension's state. It uses a context provider pattern and maintains local state for UI components. The context includes:139140- Extension version141- Messages142- Task history143- Theme144- API configurations145- MCP servers146- Marketplace catalog147- Workspace file paths148149It synchronizes with the core extension through VSCode's message passing system and provides type-safe access to the state via a custom hook (`useExtensionState`).150151The ExtensionStateContext handles:152- Real-time updates through message events153- Partial message updates for streaming content154- State modifications through setter methods155- Type-safe access to state through a custom hook156157## API Provider System158159Cline supports multiple AI providers through a modular API provider system. Each provider is implemented as a separate module in the `src/api/providers/` directory and follows a common interface.160161### API Provider Architecture162163The API system consists of:1641651. **API Handlers**: Provider-specific implementations in `src/api/providers/`1662. **API Transformers**: Stream transformation utilities in `src/api/transform/`1673. **API Configuration**: User settings for API keys and endpoints1684. **API Factory**: Builder function to create the appropriate handler169170Key providers include:171- **Anthropic**: Direct integration with Claude models172- **OpenRouter**: Meta-provider supporting multiple model providers173- **AWS Bedrock**: Integration with Amazon's AI services174- **Gemini**: Google's AI models175- **Ollama**: Local model hosting176- **LM Studio**: Local model hosting177- **VSCode LM**: VSCode's built-in language models178179### API Configuration Management180181API configurations are stored securely:182- API keys are stored in VSCode's secrets storage183- Model selections and non-sensitive settings are stored in global state184- The Controller manages switching between providers and updating configurations185186The system supports:187- Secure storage of API keys188- Model selection and configuration189- Automatic retry and error handling190- Token usage tracking and cost calculation191- Context window management192193### Plan/Act Mode API Configuration194195Cline supports separate model configurations for Plan and Act modes:196- Different models can be used for planning vs. execution197- The system preserves model selections when switching modes198- The Controller handles the transition between modes and updates the API configuration accordingly199200## Task Execution System201202The Task class is responsible for executing AI requests and tool operations. Each task runs in its own instance of the Task class, ensuring isolation and proper state management.203204### Task Execution Loop205206The core task execution loop follows this pattern:207208```typescript209class Task {210 async initiateTaskLoop(userContent: UserContent, isNewTask: boolean) {211 while (!this.abort) {212 // 1. Make API request and stream response213 const stream = this.attemptApiRequest()214215 // 2. Parse and present content blocks216 for await (const chunk of stream) {217 switch (chunk.type) {218 case "text":219 // Parse into content blocks220 this.assistantMessageContent = parseAssistantMessage(chunk.text)221 // Present blocks to user222 await this.presentAssistantMessage()223 break224 }225 }226227 // 3. Wait for tool execution to complete228 await pWaitFor(() => this.userMessageContentReady)229230 // 4. Continue loop with tool result231 const recDidEndLoop = await this.recursivelyMakeClineRequests(232 this.userMessageContent233 )234 }235 }236}237```238239### Message Streaming System240241The streaming system handles real-time updates and partial content:242243```typescript244class Task {245 async presentAssistantMessage() {246 // Handle streaming locks to prevent race conditions247 if (this.presentAssistantMessageLocked) {248 this.presentAssistantMessageHasPendingUpdates = true249 return250 }251 this.presentAssistantMessageLocked = true252253 // Present current content block254 const block = this.assistantMessageContent[this.currentStreamingContentIndex]255256 // Handle different types of content257 switch (block.type) {258 case "text":259 await this.say("text", content, undefined, block.partial)260 break261 case "tool_use":262 // Handle tool execution263 break264 }265266 // Move to next block if complete267 if (!block.partial) {268 this.currentStreamingContentIndex++269 }270 }271}272```273274### Tool Execution Flow275276Tools follow a strict execution pattern:277278```typescript279class Task {280 async executeToolWithApproval(block: ToolBlock) {281 // 1. Check auto-approval settings282 if (this.shouldAutoApproveTool(block.name)) {283 await this.say("tool", message)284 this.consecutiveAutoApprovedRequestsCount++285 } else {286 // 2. Request user approval287 const didApprove = await askApproval("tool", message)288 if (!didApprove) {289 this.didRejectTool = true290 return291 }292 }293294 // 3. Execute tool295 const result = await this.executeTool(block)296297 // 4. Save checkpoint298 await this.saveCheckpoint()299300 // 5. Return result to API301 return result302 }303}304```305306### Error Handling & Recovery307308The system includes robust error handling:309310```typescript311class Task {312 async handleError(action: string, error: Error) {313 // 1. Check if task was abandoned314 if (this.abandoned) return315316 // 2. Format error message317 const errorString = `Error ${action}: ${error.message}`318319 // 3. Present error to user320 await this.say("error", errorString)321322 // 4. Add error to tool results323 pushToolResult(formatResponse.toolError(errorString))324325 // 5. Cleanup resources326 await this.diffViewProvider.revertChanges()327 await this.browserSession.closeBrowser()328 }329}330```331332### API Request & Token Management333334The Task class handles API requests with built-in retry, streaming, and token management:335336```typescript337class Task {338 async *attemptApiRequest(previousApiReqIndex: number): ApiStream {339 // 1. Wait for MCP servers to connect340 await pWaitFor(() => this.controllerRef.deref()?.mcpHub?.isConnecting !== true)341342 // 2. Manage context window343 const previousRequest = this.clineMessages[previousApiReqIndex]344 if (previousRequest?.text) {345 const { tokensIn, tokensOut } = JSON.parse(previousRequest.text || "{}")346 const totalTokens = (tokensIn || 0) + (tokensOut || 0)347348 // Truncate conversation if approaching context limit349 if (totalTokens >= maxAllowedSize) {350 this.conversationHistoryDeletedRange = this.contextManager.getNextTruncationRange(351 this.apiConversationHistory,352 this.conversationHistoryDeletedRange,353 totalTokens / 2 > maxAllowedSize ? "quarter" : "half"354 )355 }356 }357358 // 3. Handle streaming with automatic retry359 try {360 this.isWaitingForFirstChunk = true361 const firstChunk = await iterator.next()362 yield firstChunk.value363 this.isWaitingForFirstChunk = false364365 // Stream remaining chunks366 yield* iterator367 } catch (error) {368 // 4. Error handling with retry369 if (isOpenRouter && !this.didAutomaticallyRetryFailedApiRequest) {370 await setTimeoutPromise(1000)371 this.didAutomaticallyRetryFailedApiRequest = true372 yield* this.attemptApiRequest(previousApiReqIndex)373 return374 }375376 // 5. Ask user to retry if automatic retry failed377 const { response } = await this.ask(378 "api_req_failed",379 this.formatErrorWithStatusCode(error)380 )381 if (response === "yesButtonClicked") {382 await this.say("api_req_retried")383 yield* this.attemptApiRequest(previousApiReqIndex)384 return385 }386 }387 }388}389```390391Key features:3923931. **Context Window Management**394 - Tracks token usage across requests395 - Automatically truncates conversation when needed396 - Preserves important context while freeing space397 - Handles different model context sizes3983992. **Streaming Architecture**400 - Real-time chunk processing401 - Partial content handling402 - Race condition prevention403 - Error recovery during streaming4044053. **Error Handling**406 - Automatic retry for transient failures407 - User-prompted retry for persistent issues408 - Detailed error reporting409 - State cleanup on failure4104114. **Token Tracking**412 - Per-request token counting413 - Cumulative usage tracking414 - Cost calculation415 - Cache hit monitoring416417### Context Management System418419The Context Management System handles conversation history truncation to prevent context window overflow errors. Implemented in the `ContextManager` class, it ensures long-running conversations remain within model context limits while preserving critical context.420421Key features:4224231. **Model-Aware Sizing**: Dynamically adjusts based on different model context windows (64K for DeepSeek, 128K for most models, 200K for Claude).4244252. **Proactive Truncation**: Monitors token usage and preemptively truncates conversations when approaching limits, maintaining buffers of 27K-40K tokens depending on the model.4264273. **Intelligent Preservation**: Always preserves the original task message and maintains the user-assistant conversation structure when truncating.4284294. **Adaptive Strategies**: Uses different truncation strategies based on context pressure - removing half of the conversation for moderate pressure or three-quarters for severe pressure.4304315. **Error Recovery**: Includes specialized detection for context window errors from different providers with automatic retry and more aggressive truncation when needed.432433### Task State & Resumption434435The Task class provides robust task state management and resumption capabilities:436437```typescript438class Task {439 async resumeTaskFromHistory() {440 // 1. Load saved state441 this.clineMessages = await getSavedClineMessages(this.getContext(), this.taskId)442 this.apiConversationHistory = await getSavedApiConversationHistory(this.getContext(), this.taskId)443444 // 2. Handle interrupted tool executions445 const lastMessage = this.apiConversationHistory[this.apiConversationHistory.length - 1]446 if (lastMessage.role === "assistant") {447 const toolUseBlocks = content.filter(block => block.type === "tool_use")448 if (toolUseBlocks.length > 0) {449 // Add interrupted tool responses450 const toolResponses = toolUseBlocks.map(block => ({451 type: "tool_result",452 tool_use_id: block.id,453 content: "Task was interrupted before this tool call could be completed."454 }))455 modifiedOldUserContent = [...toolResponses]456 }457 }458459 // 3. Notify about interruption460 const agoText = this.getTimeAgoText(lastMessage?.ts)461 newUserContent.push({462 type: "text",463 text: `[TASK RESUMPTION] This task was interrupted ${agoText}. It may or may not be complete, so please reassess the task context.`464 })465466 // 4. Resume task execution467 await this.initiateTaskLoop(newUserContent, false)468 }469470 private async saveTaskState() {471 // Save conversation history472 await saveApiConversationHistory(this.getContext(), this.taskId, this.apiConversationHistory)473 await saveClineMessages(this.getContext(), this.taskId, this.clineMessages)474475 // Create checkpoint476 const commitHash = await this.checkpointTracker?.commit()477478 // Update task history479 await this.controllerRef.deref()?.updateTaskHistory({480 id: this.taskId,481 ts: lastMessage.ts,482 task: taskMessage.text,483 // ... other metadata484 })485 }486}487```488489Key aspects of task state management:4904911. **Task Persistence**492 - Each task has a unique ID and dedicated storage directory493 - Conversation history is saved after each message494 - File changes are tracked through Git-based checkpoints495 - Terminal output and browser state are preserved4964972. **State Recovery**498 - Tasks can be resumed from any point499 - Interrupted tool executions are handled gracefully500 - File changes can be restored from checkpoints501 - Context is preserved across VSCode sessions5025033. **Workspace Synchronization**504 - File changes are tracked through Git505 - Checkpoints are created after tool executions506 - State can be restored to any checkpoint507 - Changes can be compared between checkpoints5085094. **Error Recovery**510 - Failed API requests can be retried511 - Interrupted tool executions are marked512 - Resources are cleaned up properly513 - User is notified of state changes514515## Plan/Act Mode System516517Cline implements a dual-mode system that separates planning from execution:518519### Mode Architecture520521The Plan/Act mode system consists of:5225231. **Mode State**: Stored in `chatSettings.mode` in the Controller's state5242. **Mode Switching**: Handled by `togglePlanActModeWithChatSettings` in the Controller5253. **Mode-specific Models**: Optional configuration to use different models for each mode5264. **Mode-specific Prompting**: Different system prompts for planning vs. execution527528### Mode Switching Process529530When switching between modes:5315321. The current model configuration is saved to mode-specific state5332. The previous mode's model configuration is restored5343. The Task instance is updated with the new mode5354. The webview is notified of the mode change5365. Telemetry events are captured for analytics537538### Plan Mode539540Plan mode is designed for:541- Information gathering and context building542- Asking clarifying questions543- Creating detailed execution plans544- Discussing approaches with the user545546In Plan mode, the AI uses the `plan_mode_respond` tool to engage in conversational planning without executing actions.547548### Act Mode549550Act mode is designed for:551- Executing the planned actions552- Using tools to modify files, run commands, etc.553- Implementing the solution554- Providing results and completion feedback555556In Act mode, the AI has access to all tools except `plan_mode_respond` and focuses on implementation rather than discussion.557558## Data Flow & State Management559560### Core Extension Role561562The Controller acts as the single source of truth for all persistent state. It:563- Manages VSCode global state and secrets storage564- Coordinates state updates between components565- Ensures state consistency across webview reloads566- Handles task-specific state persistence567- Manages checkpoint creation and restoration568569### Terminal Management570571The Task class manages terminal instances and command execution:572573```typescript574class Task {575 async executeCommandTool(command: string): Promise<[boolean, ToolResponse]> {576 // 1. Get or create terminal577 const terminalInfo = await this.terminalManager.getOrCreateTerminal(cwd)578 terminalInfo.terminal.show()579580 // 2. Execute command with output streaming581 const process = this.terminalManager.runCommand(terminalInfo, command)582583 // 3. Handle real-time output584 let result = ""585 process.on("line", (line) => {586 result += line + "\n"587 if (!didContinue) {588 sendCommandOutput(line)589 } else {590 this.say("command_output", line)591 }592 })593594 // 4. Wait for completion or user feedback595 let completed = false596 process.once("completed", () => {597 completed = true598 })599600 await process601602 // 5. Return result603 if (completed) {604 return [false, `Command executed.\n${result}`]605 } else {606 return [607 false,608 `Command is still running in the user's terminal.\n${result}\n\nYou will be updated on the terminal status and new output in the future.`609 ]610 }611 }612}613```614615Key features:6161. **Terminal Instance Management**617 - Multiple terminal support618 - Terminal state tracking (busy/inactive)619 - Process cooldown monitoring620 - Output history per terminal6216222. **Command Execution**623 - Real-time output streaming624 - User feedback handling625 - Process state monitoring626 - Error recovery627628### Browser Session Management629630The Task class handles browser automation through Puppeteer:631632```typescript633class Task {634 async executeBrowserAction(action: BrowserAction): Promise<BrowserActionResult> {635 switch (action) {636 case "launch":637 // 1. Launch browser with fixed resolution638 await this.browserSession.launchBrowser()639 return await this.browserSession.navigateToUrl(url)640641 case "click":642 // 2. Handle click actions with coordinates643 return await this.browserSession.click(coordinate)644645 case "type":646 // 3. Handle keyboard input647 return await this.browserSession.type(text)648649 case "close":650 // 4. Clean up resources651 return await this.browserSession.closeBrowser()652 }653 }654}655```656657Key aspects:6581. **Browser Control**659 - Fixed 900x600 resolution window660 - Single instance per task lifecycle661 - Automatic cleanup on task completion662 - Console log capture6636642. **Interaction Handling**665 - Coordinate-based clicking666 - Keyboard input simulation667 - Screenshot capture668 - Error recovery669670## MCP (Model Context Protocol) Integration671672### MCP Architecture673674The MCP system consists of:6756761. **McpHub Class**: Central manager in `src/services/mcp/McpHub.ts`6772. **MCP Connections**: Manages connections to external MCP servers6783. **MCP Settings**: Configuration stored in a JSON file6794. **MCP Marketplace**: Online catalog of available MCP servers6805. **MCP Tools & Resources**: Capabilities exposed by connected servers681682The McpHub class:683- Manages the lifecycle of MCP server connections684- Handles server configuration through a settings file685- Provides methods for calling tools and accessing resources686- Implements auto-approval settings for MCP tools687- Monitors server health and handles reconnection688689### MCP Server Types690691Cline supports two types of MCP server connections:692- **Stdio**: Command-line based servers that communicate via standard I/O693- **SSE**: HTTP-based servers that communicate via Server-Sent Events694695### MCP Server Management696697The McpHub class provides methods for:698- Discovering and connecting to MCP servers699- Monitoring server health and status700- Restarting servers when needed701- Managing server configurations702- Setting timeouts and auto-approval rules703704### MCP Tool Integration705706MCP tools are integrated into the Task execution system:707- Tools are discovered and registered at connection time708- The Task class can call MCP tools through the McpHub709- Tool results are streamed back to the AI710- Auto-approval settings can be configured per tool711712### MCP Marketplace713714The MCP Marketplace provides:715- A catalog of available MCP servers716- One-click installation717- README previews718- Server status monitoring719720The Controller class manages MCP servers through the McpHub service:721722```typescript723class Controller {724 mcpHub?: McpHub725726 constructor(context: vscode.ExtensionContext, outputChannel: vscode.OutputChannel, webviewProvider: WebviewProvider) {727 this.mcpHub = new McpHub(this)728 }729730 async downloadMcp(mcpId: string) {731 // Fetch server details from marketplace732 const response = await axios.post<McpDownloadResponse>(733 "https://api.cline.bot/v1/mcp/download",734 { mcpId },735 {736 headers: { "Content-Type": "application/json" },737 timeout: 10000,738 }739 )740741 // Create task with context from README742 const task = `Set up the MCP server from ${mcpDetails.githubUrl}...`743744 // Initialize task and show chat view745 await this.initClineWithTask(task)746 }747}748```749750## Conclusion751752This guide provides a comprehensive overview of the Cline extension architecture, with special focus on state management, data persistence, and code organization. Following these patterns ensures robust feature implementation with proper state handling across the extension's components.753754Remember:755- Always persist important state in the extension756- The core extension follows a WebviewProvider -> Controller -> Task flow757- Use proper typing for all state and messages758- Handle errors and edge cases759- Test state persistence across webview reloads760- Follow the established patterns for consistency761- Place new code in appropriate directories762- Maintain clear separation of concerns763- Install dependencies in correct package.json764765## Contributing766767Contributions to the Cline extension are welcome! Please follow these guidelines:768769When adding new tools or API providers, follow the existing patterns in the `src/integrations/` and `src/api/providers/` directories, respectively. Ensure that your code is well-documented and includes appropriate error handling.770771The `.clineignore` file allows users to specify files and directories that Cline should not access. When implementing new features, respect the `.clineignore` rules and ensure that your code does not attempt to read or modify ignored files.772
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| cline/prompts.clinerules/ai-dlc-adaptive-workflow.md · 1.2k | Cline rules | agent-behaviour | 54/100 | today | |
| cline/prompts.clinerules/audio-plugin-developer.md · 1.2k | Cline rules | styleperformancedo-notagent-behaviour | 57/100 | today | |
| cline/prompts.clinerules/ba.md · 1.2k | Cline rules | archgitagent-behaviour | 50/100 | today | |
| cline/prompts.clinerules/baby-steps.md · 1.2k | Cline rules | do-notagent-behaviour | 50/100 | today | |
| cline/prompts.clinerules/c#-guide.md · 1.2k | Cline rules | style | 27/100 | today | |
| cline/prompts.clinerules/claude-code-subagents.md · 1.2k | Cline rules | testarchdo-notagent-behaviour | 77/100 | today | |
| cline/prompts.clinerules/cline-continuous-improvement-protocol.md · 1.2k | Cline rules | testgitperformance | 58/100 | today | |
| cline/prompts.clinerules/cline-for-research.md · 1.2k | Cline rules | agent-behaviour | 34/100 | today | |
| cline/prompts.clinerules/cline-for-slides.md · 1.2k | Cline rules | setupbuildstylearch+1 | 86/100 | today | |
| cline/prompts.clinerules/cline-for-webdev-ui.md · 1.2k | Cline rules | archagent-behaviour | 58/100 | today | |
| cline/prompts.clinerules/code-review.md · 1.2k | Cline rules | lint-formatgitsecurityperformance | 48/100 | today | |
| cline/prompts.clinerules/codebase-onboarding.md · 1.2k | Cline rules | lint-formatstylearchdependencies | 56/100 | today | |
| cline/prompts.clinerules/comprehensive-slide-dev-guide.md · 1.2k | Cline rules | buildarchtypesui | 62/100 | today | |
| cline/prompts.clinerules/create-documentation.md · 1.2k | Cline rules | apidocs | 44/100 | today | |
| cline/prompts.clinerules/gemini-comprehensive-software-engineering-guide.md · 1.2k | Cline rules | buildstyletesting-strategysecurity+4 | 36/100 | today | |
| cline/prompts.clinerules/general-development-rules.md · 1.2k | Cline rules | stylegitdeploymentdo-not | 73/100 | today | |
| cline/prompts.clinerules/google-apps-script-developer.md · 1.2k | Cline rules | setupstylegitsecurity+3 | 66/100 | today | |
| cline/prompts.clinerules/helm-chart-developer.md · 1.2k | Cline rules | setuplint-formatstylearch+6 | 81/100 | today | |
| cline/prompts.clinerules/mcp-development-protocol.md · 1.2k | Cline rules | setupteststyle | 73/100 | today | |
| cline/prompts.clinerules/mcp_env_configuration.md · 1.2k | Cline rules | setupstylearchsecurity+1 | 77/100 | today |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/cline-prompts-clinerules-cline-architecture)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.