[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-94fc9751-e35a-4bf9-9725-975152abd74c":3,"$fdDEkNI3EmG6_KP2c3MVxnnKpxbcqNXzhxKwg8xTXpgg":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"94fc9751-e35a-4bf9-9725-975152abd74c","autonomous-agent-patterns","构建自主编码代理的设计模式，灵感来源于[Cline](https:\u002F\u002Fgithub.com\u002Fcline\u002Fcline)和[OpenAI Codex](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex)。","cat_life_career","mod_other","sickn33,other","---\nname: autonomous-agent-patterns\ndescription: \"Design patterns for building autonomous coding agents, inspired by [Cline](https:\u002F\u002Fgithub.com\u002Fcline\u002Fcline) and [OpenAI Codex](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex).\"\nrisk: critical\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# 🕹️ Autonomous Agent Patterns\n\n> Design patterns for building autonomous coding agents, inspired by [Cline](https:\u002F\u002Fgithub.com\u002Fcline\u002Fcline) and [OpenAI Codex](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex).\n\n## When to Use This Skill\n\nUse this skill when:\n\n- Building autonomous AI agents\n- Designing tool\u002Ffunction calling APIs\n- Implementing permission and approval systems\n- Creating browser automation for agents\n- Designing human-in-the-loop workflows\n\n---\n\n## 1. Core Agent Architecture\n\n### 1.1 Agent Loop\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                     AGENT LOOP                               │\n│                                                              │\n│  ┌──────────┐    ┌──────────┐    ┌──────────┐              │\n│  │  Think   │───▶│  Decide  │───▶│   Act    │              │\n│  │ (Reason) │    │ (Plan)   │    │ (Execute)│              │\n│  └──────────┘    └──────────┘    └──────────┘              │\n│       ▲                               │                     │\n│       │         ┌──────────┐          │                     │\n│       └─────────│ Observe  │◀─────────┘                     │\n│                 │ (Result) │                                │\n│                 └──────────┘                                │\n└─────────────────────────────────────────────────────────────┘\n```\n\n```python\nclass AgentLoop:\n    def __init__(self, llm, tools, max_iterations=50):\n        self.llm = llm\n        self.tools = {t.name: t for t in tools}\n        self.max_iterations = max_iterations\n        self.history = []\n\n    def run(self, task: str) -> str:\n        self.history.append({\"role\": \"user\", \"content\": task})\n\n        for i in range(self.max_iterations):\n            # Think: Get LLM response with tool options\n            response = self.llm.chat(\n                messages=self.history,\n                tools=self._format_tools(),\n                tool_choice=\"auto\"\n            )\n\n            # Decide: Check if agent wants to use a tool\n            if response.tool_calls:\n                for tool_call in response.tool_calls:\n                    # Act: Execute the tool\n                    result = self._execute_tool(tool_call)\n\n                    # Observe: Add result to history\n                    self.history.append({\n                        \"role\": \"tool\",\n                        \"tool_call_id\": tool_call.id,\n                        \"content\": str(result)\n                    })\n            else:\n                # No more tool calls = task complete\n                return response.content\n\n        return \"Max iterations reached\"\n\n    def _execute_tool(self, tool_call) -> Any:\n        tool = self.tools[tool_call.name]\n        args = json.loads(tool_call.arguments)\n        return tool.execute(**args)\n```\n\n### 1.2 Multi-Model Architecture\n\n```python\nclass MultiModelAgent:\n    \"\"\"\n    Use different models for different purposes:\n    - Fast model for planning\n    - Powerful model for complex reasoning\n    - Specialized model for code generation\n    \"\"\"\n\n    def __init__(self):\n        self.models = {\n            \"fast\": \"gpt-3.5-turbo\",      # Quick decisions\n            \"smart\": \"gpt-4-turbo\",        # Complex reasoning\n            \"code\": \"claude-3-sonnet\",     # Code generation\n        }\n\n    def select_model(self, task_type: str) -> str:\n        if task_type == \"planning\":\n            return self.models[\"fast\"]\n        elif task_type == \"analysis\":\n            return self.models[\"smart\"]\n        elif task_type == \"code\":\n            return self.models[\"code\"]\n        return self.models[\"smart\"]\n```\n\n---\n\n## 2. Tool Design Patterns\n\n### 2.1 Tool Schema\n\n```python\nclass Tool:\n    \"\"\"Base class for agent tools\"\"\"\n\n    @property\n    def schema(self) -> dict:\n        \"\"\"JSON Schema for the tool\"\"\"\n        return {\n            \"name\": self.name,\n            \"description\": self.description,\n            \"parameters\": {\n                \"type\": \"object\",\n                \"properties\": self._get_parameters(),\n                \"required\": self._get_required()\n            }\n        }\n\n    def execute(self, **kwargs) -> ToolResult:\n        \"\"\"Execute the tool and return result\"\"\"\n        raise NotImplementedError\n\nclass ReadFileTool(Tool):\n    name = \"read_file\"\n    description = \"Read the contents of a file from the filesystem\"\n\n    def _get_parameters(self):\n        return {\n            \"path\": {\n                \"type\": \"string\",\n                \"description\": \"Absolute path to the file\"\n            },\n            \"start_line\": {\n                \"type\": \"integer\",\n                \"description\": \"Line to start reading from (1-indexed)\"\n            },\n            \"end_line\": {\n                \"type\": \"integer\",\n                \"description\": \"Line to stop reading at (inclusive)\"\n            }\n        }\n\n    def _get_required(self):\n        return [\"path\"]\n\n    def execute(self, path: str, start_line: int = None, end_line: int = None) -> ToolResult:\n        try:\n            with open(path, 'r') as f:\n                lines = f.readlines()\n\n            if start_line and end_line:\n                lines = lines[start_line-1:end_line]\n\n            return ToolResult(\n                success=True,\n                output=\"\".join(lines)\n            )\n        except FileNotFoundError:\n            return ToolResult(\n                success=False,\n                error=f\"File not found: {path}\"\n            )\n```\n\n### 2.2 Essential Agent Tools\n\n```python\nCODING_AGENT_TOOLS = {\n    # File operations\n    \"read_file\": \"Read file contents\",\n    \"write_file\": \"Create or overwrite a file\",\n    \"edit_file\": \"Make targeted edits to a file\",\n    \"list_directory\": \"List files and folders\",\n    \"search_files\": \"Search for files by pattern\",\n\n    # Code understanding\n    \"search_code\": \"Search for code patterns (grep)\",\n    \"get_definition\": \"Find function\u002Fclass definition\",\n    \"get_references\": \"Find all references to a symbol\",\n\n    # Terminal\n    \"run_command\": \"Execute a shell command\",\n    \"read_output\": \"Read command output\",\n    \"send_input\": \"Send input to running command\",\n\n    # Browser (optional)\n    \"open_browser\": \"Open URL in browser\",\n    \"click_element\": \"Click on page element\",\n    \"type_text\": \"Type text into input\",\n    \"screenshot\": \"Capture screenshot\",\n\n    # Context\n    \"ask_user\": \"Ask the user a question\",\n    \"search_web\": \"Search the web for information\"\n}\n```\n\n### 2.3 Edit Tool Design\n\n```python\nclass EditFileTool(Tool):\n    \"\"\"\n    Precise file editing with conflict detection.\n    Uses search\u002Freplace pattern for reliable edits.\n    \"\"\"\n\n    name = \"edit_file\"\n    description = \"Edit a file by replacing specific content\"\n\n    def execute(\n        self,\n        path: str,\n        search: str,\n        replace: str,\n        expected_occurrences: int = 1\n    ) -> ToolResult:\n        \"\"\"\n        Args:\n            path: File to edit\n            search: Exact text to find (must match exactly, including whitespace)\n            replace: Text to replace with\n            expected_occurrences: How many times search should appear (validation)\n        \"\"\"\n        with open(path, 'r') as f:\n            content = f.read()\n\n        # Validate\n        actual_occurrences = content.count(search)\n        if actual_occurrences != expected_occurrences:\n            return ToolResult(\n                success=False,\n                error=f\"Expected {expected_occurrences} occurrences, found {actual_occurrences}\"\n            )\n\n        if actual_occurrences == 0:\n            return ToolResult(\n                success=False,\n                error=\"Search text not found in file\"\n            )\n\n        # Apply edit\n        new_content = content.replace(search, replace)\n\n        with open(path, 'w') as f:\n            f.write(new_content)\n\n        return ToolResult(\n            success=True,\n            output=f\"Replaced {actual_occurrences} occurrence(s)\"\n        )\n```\n\n---\n\n## 3. Permission & Safety Patterns\n\n### 3.1 Permission Levels\n\n```python\nclass PermissionLevel(Enum):\n    # Fully automatic - no user approval needed\n    AUTO = \"auto\"\n\n    # Ask once per session\n    ASK_ONCE = \"ask_once\"\n\n    # Ask every time\n    ASK_EACH = \"ask_each\"\n\n    # Never allow\n    NEVER = \"never\"\n\nPERMISSION_CONFIG = {\n    # Low risk - can auto-approve\n    \"read_file\": PermissionLevel.AUTO,\n    \"list_directory\": PermissionLevel.AUTO,\n    \"search_code\": PermissionLevel.AUTO,\n\n    # Medium risk - ask once\n    \"write_file\": PermissionLevel.ASK_ONCE,\n    \"edit_file\": PermissionLevel.ASK_ONCE,\n\n    # High risk - ask each time\n    \"run_command\": PermissionLevel.ASK_EACH,\n    \"delete_file\": PermissionLevel.ASK_EACH,\n\n    # Dangerous - never auto-approve\n    \"sudo_command\": PermissionLevel.NEVER,\n    \"format_disk\": PermissionLevel.NEVER\n}\n```\n\n### 3.2 Approval UI Pattern\n\n```python\nclass ApprovalManager:\n    def __init__(self, ui, config):\n        self.ui = ui\n        self.config = config\n        self.session_approvals = {}\n\n    def request_approval(self, tool_name: str, args: dict) -> bool:\n        level = self.config.get(tool_name, PermissionLevel.ASK_EACH)\n\n        if level == PermissionLevel.AUTO:\n            return True\n\n        if level == PermissionLevel.NEVER:\n            self.ui.show_error(f\"Tool '{tool_name}' is not allowed\")\n            return False\n\n        if level == PermissionLevel.ASK_ONCE:\n            if tool_name in self.session_approvals:\n                return self.session_approvals[tool_name]\n\n        # Show approval dialog\n        approved = self.ui.show_approval_dialog(\n            tool=tool_name,\n            args=args,\n            risk_level=self._assess_risk(tool_name, args)\n        )\n\n        if level == PermissionLevel.ASK_ONCE:\n            self.session_approvals[tool_name] = approved\n\n        return approved\n\n    def _assess_risk(self, tool_name: str, args: dict) -> str:\n        \"\"\"Analyze specific call for risk level\"\"\"\n        if tool_name == \"run_command\":\n            cmd = args.get(\"command\", \"\")\n            if any(danger in cmd for danger in [\"rm -rf\", \"sudo\", \"chmod\"]):\n                return \"HIGH\"\n        return \"MEDIUM\"\n```\n\n### 3.3 Sandboxing\n\n```python\nclass SandboxedExecution:\n    \"\"\"\n    Execute code\u002Fcommands in isolated environment\n    \"\"\"\n\n    def __init__(self, workspace_dir: str):\n        self.workspace = workspace_dir\n        self.allowed_commands = [\"npm\", \"python\", \"node\", \"git\", \"ls\", \"cat\"]\n        self.blocked_paths = [\"\u002Fetc\", \"\u002Fusr\", \"\u002Fbin\", os.path.expanduser(\"~\")]\n\n    def validate_path(self, path: str) -> bool:\n        \"\"\"Ensure path is within workspace\"\"\"\n        real_path = os.path.realpath(path)\n        workspace_real = os.path.realpath(self.workspace)\n        return real_path.startswith(workspace_real)\n\n    def validate_command(self, command: str) -> bool:\n        \"\"\"Check if command is allowed\"\"\"\n        cmd_parts = shlex.split(command)\n        if not cmd_parts:\n            return False\n\n        base_cmd = cmd_parts[0]\n        return base_cmd in self.allowed_commands\n\n    def execute_sandboxed(self, command: str) -> ToolResult:\n        if not self.validate_command(command):\n            return ToolResult(\n                success=False,\n                error=f\"Command not allowed: {command}\"\n            )\n\n        # Execute in isolated environment\n        result = subprocess.run(\n            command,\n            shell=True,\n            cwd=self.workspace,\n            capture_output=True,\n            timeout=30,\n            env={\n                **os.environ,\n                \"HOME\": self.workspace,  # Isolate home directory\n            }\n        )\n\n        return ToolResult(\n            success=result.returncode == 0,\n            output=result.stdout.decode(),\n            error=result.stderr.decode() if result.returncode != 0 else None\n        )\n```\n\n---\n\n## 4. Browser Automation\n\n### 4.1 Browser Tool Pattern\n\n```python\nclass BrowserTool:\n    \"\"\"\n    Browser automation for agents using Playwright\u002FPuppeteer.\n    Enables visual debugging and web testing.\n    \"\"\"\n\n    def __init__(self, headless: bool = True):\n        self.browser = None\n        self.page = None\n        self.headless = headless\n\n    async def open_url(self, url: str) -> ToolResult:\n        \"\"\"Navigate to URL and return page info\"\"\"\n        if not self.browser:\n            self.browser = await playwright.chromium.launch(headless=self.headless)\n            self.page = await self.browser.new_page()\n\n        await self.page.goto(url)\n\n        # Capture state\n        screenshot = await self.page.screenshot(type='png')\n        title = await self.page.title()\n\n        return ToolResult(\n            success=True,\n            output=f\"Loaded: {title}\",\n            metadata={\n                \"screenshot\": base64.b64encode(screenshot).decode(),\n                \"url\": self.page.url\n            }\n        )\n\n    async def click(self, selector: str) -> ToolResult:\n        \"\"\"Click on an element\"\"\"\n        try:\n            await self.page.click(selector, timeout=5000)\n            await self.page.wait_for_load_state(\"networkidle\")\n\n            screenshot = await self.page.screenshot()\n            return ToolResult(\n                success=True,\n                output=f\"Clicked: {selector}\",\n                metadata={\"screenshot\": base64.b64encode(screenshot).decode()}\n            )\n        except TimeoutError:\n            return ToolResult(\n                success=False,\n                error=f\"Element not found: {selector}\"\n            )\n\n    async def type_text(self, selector: str, text: str) -> ToolResult:\n        \"\"\"Type text into an input\"\"\"\n        await self.page.fill(selector, text)\n        return ToolResult(success=True, output=f\"Typed into {selector}\")\n\n    async def get_page_content(self) -> ToolResult:\n        \"\"\"Get accessible text content of the page\"\"\"\n        content = await self.page.evaluate(\"\"\"\n            () => {\n                \u002F\u002F Get visible text\n                const walker = document.createTreeWalker(\n                    document.body,\n                    NodeFilter.SHOW_TEXT,\n                    null,\n                    false\n                );\n\n                let text = '';\n                while (walker.nextNode()) {\n                    const node = walker.currentNode;\n                    if (node.textContent.trim()) {\n                        text += node.textContent.trim() + '\\\\n';\n                    }\n                }\n                return text;\n            }\n        \"\"\")\n        return ToolResult(success=True, output=content)\n```\n\n### 4.2 Visual Agent Pattern\n\n```python\nclass VisualAgent:\n    \"\"\"\n    Agent that uses screenshots to understand web pages.\n    Can identify elements visually without selectors.\n    \"\"\"\n\n    def __init__(self, llm, browser):\n        self.llm = llm\n        self.browser = browser\n\n    async def describe_page(self) -> str:\n        \"\"\"Use vision model to describe current page\"\"\"\n        screenshot = await self.browser.screenshot()\n\n        response = self.llm.chat([\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"Describe this webpage. List all interactive elements you see.\"},\n                    {\"type\": \"image\", \"data\": screenshot}\n                ]\n            }\n        ])\n\n        return response.content\n\n    async def find_and_click(self, description: str) -> ToolResult:\n        \"\"\"Find element by visual description and click it\"\"\"\n        screenshot = await self.browser.screenshot()\n\n        # Ask vision model to find element\n        response = self.llm.chat([\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\n                        \"type\": \"text\",\n                        \"text\": f\"\"\"\n                        Find the element matching: \"{description}\"\n                        Return the approximate coordinates as JSON: {{\"x\": number, \"y\": number}}\n                        \"\"\"\n                    },\n                    {\"type\": \"image\", \"data\": screenshot}\n                ]\n            }\n        ])\n\n        coords = json.loads(response.content)\n        await self.browser.page.mouse.click(coords[\"x\"], coords[\"y\"])\n\n        return ToolResult(success=True, output=f\"Clicked at ({coords['x']}, {coords['y']})\")\n```\n\n---\n\n## 5. Context Management\n\n### 5.1 Context Injection Patterns\n\n````python\nclass ContextManager:\n    \"\"\"\n    Manage context provided to the agent.\n    Inspired by Cline's @-mention patterns.\n    \"\"\"\n\n    def __init__(self, workspace: str):\n        self.workspace = workspace\n        self.context = []\n\n    def add_file(self, path: str) -> None:\n        \"\"\"@file - Add file contents to context\"\"\"\n        with open(path, 'r') as f:\n            content = f.read()\n\n        self.context.append({\n            \"type\": \"file\",\n            \"path\": path,\n            \"content\": content\n        })\n\n    def add_folder(self, path: str, max_files: int = 20) -> None:\n        \"\"\"@folder - Add all files in folder\"\"\"\n        for root, dirs, files in os.walk(path):\n            for file in files[:max_files]:\n                file_path = os.path.join(root, file)\n                self.add_file(file_path)\n\n    def add_url(self, url: str) -> None:\n        \"\"\"@url - Fetch and add URL content\"\"\"\n        response = requests.get(url)\n        content = html_to_markdown(response.text)\n\n        self.context.append({\n            \"type\": \"url\",\n            \"url\": url,\n            \"content\": content\n        })\n\n    def add_problems(self, diagnostics: list) -> None:\n        \"\"\"@problems - Add IDE diagnostics\"\"\"\n        self.context.append({\n            \"type\": \"diagnostics\",\n            \"problems\": diagnostics\n        })\n\n    def format_for_prompt(self) -> str:\n        \"\"\"Format all context for LLM prompt\"\"\"\n        parts = []\n        for item in self.context:\n            if item[\"type\"] == \"file\":\n                parts.append(f\"## File: {item['path']}\\n```\\n{item['content']}\\n```\")\n            elif item[\"type\"] == \"url\":\n                parts.append(f\"## URL: {item['url']}\\n{item['content']}\")\n            elif item[\"type\"] == \"diagnostics\":\n                parts.append(f\"## Problems:\\n{json.dumps(item['problems'], indent=2)}\")\n\n        return \"\\n\\n\".join(parts)\n````\n\n### 5.2 Checkpoint\u002FResume\n\n```python\nclass CheckpointManager:\n    \"\"\"\n    Save and restore agent state for long-running tasks.\n    \"\"\"\n\n    def __init__(self, storage_dir: str):\n        self.storage_dir = storage_dir\n        os.makedirs(storage_dir, exist_ok=True)\n\n    def save_checkpoint(self, session_id: str, state: dict) -> str:\n        \"\"\"Save current agent state\"\"\"\n        checkpoint = {\n            \"timestamp\": datetime.now().isoformat(),\n            \"session_id\": session_id,\n            \"history\": state[\"history\"],\n            \"context\": state[\"context\"],\n            \"workspace_state\": self._capture_workspace(state[\"workspace\"]),\n            \"metadata\": state.get(\"metadata\", {})\n        }\n\n        path = os.path.join(self.storage_dir, f\"{session_id}.json\")\n        with open(path, 'w') as f:\n            json.dump(checkpoint, f, indent=2)\n\n        return path\n\n    def restore_checkpoint(self, checkpoint_path: str) -> dict:\n        \"\"\"Restore agent state from checkpoint\"\"\"\n        with open(checkpoint_path, 'r') as f:\n            checkpoint = json.load(f)\n\n        return {\n            \"history\": checkpoint[\"history\"],\n            \"context\": checkpoint[\"context\"],\n            \"workspace\": self._restore_workspace(checkpoint[\"workspace_state\"]),\n            \"metadata\": checkpoint[\"metadata\"]\n        }\n\n    def _capture_workspace(self, workspace: str) -> dict:\n        \"\"\"Capture relevant workspace state\"\"\"\n        # Git status, file hashes, etc.\n        return {\n            \"git_ref\": subprocess.getoutput(f\"cd {workspace} && git rev-parse HEAD\"),\n            \"git_dirty\": subprocess.getoutput(f\"cd {workspace} && git status --porcelain\")\n        }\n```\n\n---\n\n## 6. MCP (Model Context Protocol) Integration\n\n### 6.1 MCP Server Pattern\n\n```python\nfrom mcp import Server, Tool\n\nclass MCPAgent:\n    \"\"\"\n    Agent that can dynamically discover and use MCP tools.\n    'Add a tool that...' pattern from Cline.\n    \"\"\"\n\n    def __init__(self, llm):\n        self.llm = llm\n        self.mcp_servers = {}\n        self.available_tools = {}\n\n    def connect_server(self, name: str, config: dict) -> None:\n        \"\"\"Connect to an MCP server\"\"\"\n        server = Server(config)\n        self.mcp_servers[name] = server\n\n        # Discover tools\n        tools = server.list_tools()\n        for tool in tools:\n            self.available_tools[tool.name] = {\n                \"server\": name,\n                \"schema\": tool.schema\n            }\n\n    async def create_tool(self, description: str) -> str:\n        \"\"\"\n        Create a new MCP server based on user description.\n        'Add a tool that fetches Jira tickets'\n        \"\"\"\n        # Generate MCP server code\n        code = self.llm.generate(f\"\"\"\n        Create a Python MCP server with a tool that does:\n        {description}\n\n        Use the FastMCP framework. Include proper error handling.\n        Return only the Python code.\n        \"\"\")\n\n        # Save and install\n        server_name = self._extract_name(description)\n        path = f\".\u002Fmcp_servers\u002F{server_name}\u002Fserver.py\"\n\n        with open(path, 'w') as f:\n            f.write(code)\n\n        # Hot-reload\n        self.connect_server(server_name, {\"path\": path})\n\n        return f\"Created tool: {server_name}\"\n```\n\n---\n\n## Best Practices Checklist\n\n### Agent Design\n\n- [ ] Clear task decomposition\n- [ ] Appropriate tool granularity\n- [ ] Error handling at each step\n- [ ] Progress visibility to user\n\n### Safety\n\n- [ ] Permission system implemented\n- [ ] Dangerous operations blocked\n- [ ] Sandbox for untrusted code\n- [ ] Audit logging enabled\n\n### UX\n\n- [ ] Approval UI is clear\n- [ ] Progress updates provided\n- [ ] Undo\u002Frollback available\n- [ ] Explanation of actions\n\n---\n\n## Resources\n\n- [Cline](https:\u002F\u002Fgithub.com\u002Fcline\u002Fcline)\n- [OpenAI Codex](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex)\n- [Model Context Protocol](https:\u002F\u002Fmodelcontextprotocol.io\u002F)\n- [Anthropic Tool Use](https:\u002F\u002Fdocs.anthropic.com\u002Fclaude\u002Fdocs\u002Ftool-use)\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,124,895,"2026-05-16 13:04:36",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"其他","other","mdi-page-next-outline","其他类型Skill",5,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"职场发展","career","mdi-briefcase-outline","面试准备、简历优化、职业规划",4,575,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"68e62cb6-7794-4879-a09a-d9661bad6be5","1.0.0","autonomous-agent-patterns.zip",6901,"uploads\u002Fskills\u002F94fc9751-e35a-4bf9-9725-975152abd74c\u002Fautonomous-agent-patterns.zip","a091781c0462b9848a3507e6f67f2634ef60c27cfa9a179a4ea1d3cd8e4872ae","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":23345}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]