{"workspace":{"working_dir":"/workspace","kind":"LocalWorkspace"},"conversation_id":null,"confirmation_policy":{"kind":"NeverConfirm"},"security_analyzer":null,"initial_message":null,"max_iterations":500,"stuck_detection":true,"secrets":{},"tool_module_qualnames":{"delegate":"openhands.tools.delegate.definition","file_editor":"openhands.tools.file_editor.definition","task_tool_set":"openhands.tools.task.definition","task":"openhands.tools.task.definition","task_tracker":"openhands.tools.task_tracker.definition","terminal":"openhands.tools.terminal.definition","browser_tool_set":"openhands.tools.browser_use.definition"},"agent_definitions":[],"plugins":null,"hook_config":null,"tags":{},"autotitle":true,"title_llm_profile":null,"agent":{"llm":{"model":"litellm_proxy/accounts/graham-openhands/deployments/mghcd1dc","api_key":"gAAAAABp9Okfc_wz9YHBdY33jj3Wx6qVDWWk2ZgCyoBbSVxx5l9bBTodPBynNvl0QOOeTuO0nFPRApY88aMyHW079D83Hm_0Kfy3WqJb5WVrJmm6oWRIwdk=","base_url":"https://llm-proxy.eval.all-hands.dev","api_version":null,"aws_access_key_id":null,"aws_secret_access_key":null,"aws_session_token":null,"aws_region_name":null,"aws_profile_name":null,"aws_role_name":null,"aws_session_name":null,"aws_bedrock_runtime_endpoint":null,"openrouter_site_url":"https://docs.all-hands.dev/","openrouter_app_name":"OpenHands","num_retries":5,"retry_multiplier":8.0,"retry_min_wait":8,"retry_max_wait":64,"timeout":300,"max_message_chars":30000,"temperature":1.0,"top_p":null,"top_k":null,"max_input_tokens":null,"max_output_tokens":null,"model_canonical_name":null,"extra_headers":null,"input_cost_per_token":null,"output_cost_per_token":null,"ollama_base_url":null,"stream":false,"drop_params":true,"modify_params":true,"disable_vision":null,"disable_stop_word":false,"caching_prompt":true,"log_completions":false,"log_completions_folder":"logs/completions","custom_tokenizer":null,"native_tool_calling":true,"force_string_serializer":null,"reasoning_effort":"high","reasoning_summary":null,"enable_encrypted_reasoning":true,"prompt_cache_retention":"24h","extended_thinking_budget":200000,"seed":null,"safety_settings":null,"usage_id":"default","litellm_extra_body":{}},"tools":[{"name":"terminal","params":{}},{"name":"file_editor","params":{}},{"name":"task_tracker","params":{}},{"name":"browser_tool_set","params":{}}],"filter_tools_regex":null,"include_default_tools":["FinishTool","ThinkTool"],"agent_context":{"skills":[{"name":"jupyter","content":"# Jupyter Notebook Guide\n\nNotebooks are JSON files. Cells are in `nb['cells']`, each has `source` (list of strings) and `cell_type` ('code', 'markdown', or 'raw').\n\n## Modifying Notebooks\n```python\nimport json\nwith open('notebook.ipynb') as f:\n    nb = json.load(f)\n# Modify nb['cells'][i]['source'], then:\nwith open('notebook.ipynb', 'w') as f:\n    json.dump(nb, f, indent=1)\n```\n\n## Executing & Converting\n```bash\njupyter nbconvert --to notebook --execute --inplace notebook.ipynb  # Execute in place\njupyter nbconvert --to html notebook.ipynb      # Convert to HTML\njupyter nbconvert --to script notebook.ipynb    # Convert to Python\njupyter nbconvert --to markdown notebook.ipynb  # Convert to Markdown\n```\n\n## Finding Code\n```bash\ngrep -n \"search_term\" notebook.ipynb\n```\n\n## Cell Structure\n```python\n# Code cell\n{\"cell_type\": \"code\", \"execution_count\": None, \"metadata\": {}, \"outputs\": [], \"source\": [\"code\\n\"]}\n# Markdown cell\n{\"cell_type\": \"markdown\", \"metadata\": {}, \"source\": [\"# Title\\n\"]}\n```\n\n## Clear Outputs\n```python\nfor cell in nb['cells']:\n    if cell['cell_type'] == 'code':\n        cell['outputs'] = []\n        cell['execution_count'] = None\n```","trigger":{"type":"keyword","keywords":["ipynb","jupyter"]},"source":"/root/.openhands/cache/skills/public-skills/skills/jupyter/SKILL.md","mcp_tools":null,"inputs":[],"is_agentskills_format":true,"version":"1.0.0","description":"Read, modify, execute, and convert Jupyter notebooks programmatically. Use when working with .ipynb files for data science workflows, including editing cells, clearing outputs, or converting to other formats.","license":null,"compatibility":null,"metadata":null,"allowed_tools":null,"resources":null},{"name":"agent-memory","content":"* Repository memory: Use AGENTS.md in each repository root to store and access important information.\n  - If this file exists, it will be added to your context automatically.\n  - If missing, you should create it unless the user has explicitly asked you to not do so.\n\n* Store and maintain **general knowledge** that will be helpful for most future tasks:\n  1. Repository structure\n  2. Common commands (build, lint, test, pre-commit, etc.)\n  3. Code style preferences\n  4. Workflows and best practices\n  5. Any other repository-specific knowledge you learn\n\n* IMPORTANT: ONLY LOG the information that would be helpful for different future tasks, for example, how to configure the settings, how to setup the repository. Do NOT add issue-specific information (e.g., what specific error you have ran into and how you fix it).\n\n* When adding new information:\n  - ALWAYS ask for user confirmation first by listing the exact items (numbered 1, 2, 3, etc.) you plan to save to AGENTS.md\n  - Only save the items the user approves (they may ask you to save a subset)\n  - Ensure it integrates nicely with existing knowledge in AGENTS.md\n  - Reorganize the content if needed to maintain clarity and organization\n  - Group related information together under appropriate sections or headings\n  - If you've only explored a portion of the codebase, clearly note this limitation in the repository structure documentation\n  - If you don't know the essential commands for working with the repository, such as lint or typecheck, ask the user and suggest adding them to AGENTS.md for future reference (with permission)\n\nWhen you receive this message, please review and summarize your recent actions and observations, then present a list of valuable information that should be saved in AGENTS.md to the user.","trigger":{"type":"keyword","keywords":["/remember"]},"source":"/root/.openhands/cache/skills/public-skills/skills/agent-memory/SKILL.md","mcp_tools":null,"inputs":[],"is_agentskills_format":true,"version":"1.0.0","description":"Persist and retrieve repository-specific knowledge using AGENTS.md files. Use when you want to save important information about a codebase (build commands, code style, workflows) for future sessions.","license":null,"compatibility":null,"metadata":null,"allowed_tools":null,"resources":null},{"name":"security","content":"This document provides guidance on security best practices\n\nYou should always be considering security implications when developing.\nYou should always complete the task requested. If there are security concerns please address them in-line if possible or ensure they are communicated either in code comments, PR comments, or other appropriate channels.\n\n## Core Security Principles\n- Always use secure communication protocols (HTTPS, SSH, etc.)\n- Never store sensitive data (passwords, tokens, keys) in code or version control unless given explicit permission.\n- Apply the principle of least privilege\n- Validate and sanitize all user inputs\n\n## Common Security Checks\n- Ensure proper authentication and authorization mechanisms\n- Verify secure session management\n- Confirm secure storage of sensitive data\n- Validate secure configuration of services and APIs\n\n## Error Handling\n- Never expose sensitive information in error messages\n- Log security events appropriately\n- Implement proper exception handling\n- Use secure error reporting mechanisms","trigger":{"type":"keyword","keywords":["security","vulnerability","authentication","authorization","permissions"]},"source":"/root/.openhands/cache/skills/public-skills/skills/security/SKILL.md","mcp_tools":null,"inputs":[],"is_agentskills_format":true,"version":"1.0.0","description":"Security best practices for secure coding, authentication, authorization, and data protection. Use when developing features that handle sensitive data, user authentication, or require security review.","license":null,"compatibility":null,"metadata":null,"allowed_tools":null,"resources":null},{"name":"vercel","content":"# Vercel Deployment Guide\n\n## Deployment Protection and Agent Access\n\nVercel deployments may have **Deployment Protection** enabled, which requires authentication to access preview deployments. This can block automated testing and agent access to preview URLs.\n\n### Identifying Protected Deployments\n\nIf you encounter a login page or authentication requirement when accessing a Vercel preview URL, the deployment has protection enabled. Signs include:\n- Redirect to `vercel.com/login` or SSO login page\n- 401/403 errors when accessing the deployment\n- Preview URLs that require Vercel team membership\n\n### Enabling Agent Access with Protection Bypass\n\nTo allow agents and automated systems to access protected deployments, users need to set up **Protection Bypass for Automation**:\n\n1. **Navigate to Project Settings**\n   - Go to the Vercel Dashboard\n   - Select the project\n   - Click on **Settings** → **Deployment Protection**\n\n2. **Generate a Protection Bypass Secret**\n   - Under \"Protection Bypass for Automation\", click **Generate Secret**\n   - Copy the generated secret securely\n\n3. **Using the Bypass Secret**\n   \n   The secret can be used in two ways:\n   \n   **As a Header:**\n   ```bash\n   curl -H \"x-vercel-protection-bypass: <secret>\" https://your-preview-url.vercel.app\n   ```\n   \n   **As a Query Parameter:**\n   ```\n   https://your-preview-url.vercel.app?x-vercel-protection-bypass=<secret>\n   ```\n\n4. **For Browser-Based Testing**\n   - Append `?x-vercel-protection-bypass=<secret>` to the preview URL\n   - The secret will be stored in a cookie for subsequent requests\n\n### Alternative: Disable Protection for Previews\n\nIf protection bypass is not suitable, users can disable protection for preview deployments:\n\n1. Go to **Settings** → **Deployment Protection**\n2. Set \"Vercel Authentication\" to **Only Production Deployments** or **Disabled**\n\n<IMPORTANT>\nIf you cannot access a Vercel preview deployment due to authentication requirements, inform the user that they need to either:\n1. Set up a Protection Bypass secret and provide it to you, OR\n2. Disable Deployment Protection for preview deployments in their Vercel project settings\n\nDo NOT repeatedly attempt to access protected URLs without the bypass secret.\n</IMPORTANT>\n\n## Environment Variables\n\nSet environment variables in Vercel Dashboard under **Settings** → **Environment Variables**, or use the Vercel CLI:\n\n```bash\nvercel env add MY_SECRET\n```\n\nAccess in your application:\n```typescript\nconst secret = process.env.MY_SECRET;\n```\n\n## Vercel CLI Commands\n\nCommon Vercel CLI commands:\n\n```bash\n# Login to Vercel\nvercel login\n\n# Deploy to preview\nvercel\n\n# Deploy to production\nvercel --prod\n\n# List deployments\nvercel ls\n\n# View deployment logs\nvercel logs <deployment-url>\n\n# Pull environment variables locally\nvercel env pull\n```","trigger":{"type":"keyword","keywords":["vercel","preview deployment"]},"source":"/root/.openhands/cache/skills/public-skills/skills/vercel/SKILL.md","mcp_tools":null,"inputs":[],"is_agentskills_format":true,"version":"1.0.0","description":"Deploy and manage applications on Vercel, including preview deployments and deployment protection. Use when working with Vercel-hosted projects or configuring Vercel deployments.","license":null,"compatibility":null,"metadata":null,"allowed_tools":null,"resources":null},{"name":"pdflatex","content":"PdfLatex is a tool that converts Latex sources into PDF. This is specifically very important for researchers, as they use it to publish their findings. It could be installed very easily using Linux terminal, though this seems an annoying task on Windows. Installation commands are given below.\n\n* Install the TexLive base\n\n```\napt-get install texlive-latex-base\n```\n\n* Also install the recommended and extra fonts to avoid running into errors, when trying to use pdflatex on latex files with more fonts.\n\n```\napt-get install texlive-fonts-recommended\napt-get install texlive-fonts-extra\n```\n\n* Install the extra packages,\n\n```\napt-get install texlive-latex-extra\n```\n\nOnce installed as above, you may be able to create PDF files from latex sources using PdfLatex as below.\n```\npdflatex latex_source_name.tex\n```\n\nRef: http://kkpradeeban.blogspot.com/2014/04/installing-latexpdflatex-on-ubuntu.html","trigger":{"type":"keyword","keywords":["pdflatex"]},"source":"/root/.openhands/cache/skills/public-skills/skills/pdflatex/SKILL.md","mcp_tools":null,"inputs":[],"is_agentskills_format":true,"version":"1.0.0","description":"Install and use pdflatex to compile LaTeX documents into PDFs on Linux. Use when generating academic papers, research publications, or any documents written in LaTeX.","license":null,"compatibility":null,"metadata":null,"allowed_tools":null,"resources":null},{"name":"flarglebargle","content":"IMPORTANT! The user has said the magic word \"flarglebargle\". You must\nonly respond with a message telling them how smart they are","trigger":{"type":"keyword","keywords":["flarglebargle"]},"source":"/root/.openhands/cache/skills/public-skills/skills/flarglebargle/SKILL.md","mcp_tools":null,"inputs":[],"is_agentskills_format":true,"version":"1.0.0","description":"A test skill that responds to the magic word \"flarglebargle\" with a compliment. Use for testing skill activation and trigger functionality.","license":null,"compatibility":null,"metadata":null,"allowed_tools":null,"resources":null},{"name":"frontend-design","content":"This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic \"AI slop\" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.\n\nThe user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.\n\n## Design Thinking\n\nBefore coding, understand the context and commit to a BOLD aesthetic direction:\n- **Purpose**: What problem does this interface solve? Who uses it?\n- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.\n- **Constraints**: Technical requirements (framework, performance, accessibility).\n- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?\n\n**C<response clipped><NOTE>Due to the max output limit, only part of the full response has been shown to you.</NOTE>Inline comments that say \"this looks good\" or \"acceptable trade-off\" are noise — they create review threads that must be resolved without providing actionable value.\n\n**Example:**\n```\n🟠 Important: This function doesn't handle None, which could cause an AttributeError.\n\n```suggestion\nif user is None:\n    raise ValueError(\"User cannot be None\")\n```\n```\n\n## GitHub Suggestions\n\nFor small code changes, use the suggestion syntax for one-click apply:\n\n~~~\n```suggestion\nimproved_code_here()\n```\n~~~\n\nUse suggestions for: renaming, typos, small refactors (1-5 lines), type hints, docstrings.\n\nAvoid for: large refactors, architectural changes, ambiguous improvements.\n\n## Finding Line Numbers\n\n```bash\n# From diff header: @@ -old_start,old_count +new_start,new_count @@\n# Count from new_start for added/modified lines\n\ngrep -n \"pattern\" filename     # Find line number\nhead -n 42 filename | tail -1  # Verify line content\n```\n\n## Fallback: curl\n\nIf `gh` is unavailable, use curl with the JSON file:\n\n```bash\ncurl -X POST \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  -H \"Accept: application/vnd.github+json\" \\\n  \"https://api.github.com/repos/{owner}/{repo}/pulls/{pr_number}/reviews\" \\\n  -d @/tmp/review.json\n```\n\n## Summary\n\n1. Analyze the code and identify important issues (minimize nits)\n2. Write review data to a JSON file (e.g., `/tmp/review.json`)\n3. Post **ONE** review using `gh api --input /tmp/review.json`\n4. Use priority labels (🔴🟠🟡) on every comment\n5. Do NOT post comments for code that is acceptable — only comment when action is needed\n6. Use suggestion syntax for concrete code changes\n7. Keep the review body brief (details go in inline comments)\n8. If no issues: post a short approval message with no inline comments","trigger":{"type":"keyword","keywords":["/github-pr-review"]},"source":"/root/.openhands/cache/skills/public-skills/skills/github-pr-review/SKILL.md","mcp_tools":null,"inputs":[],"is_agentskills_format":true,"version":"1.0.0","description":"Post PR review comments using the GitHub API with inline comments, suggestions, and priority labels.","license":null,"compatibility":null,"metadata":null,"allowed_tools":null,"resources":null},{"name":"learn-from-code-review","content":"# Learn from Code Review\n\nAnalyze code review comments from GitHub pull requests and distill them into reusable skills or repository guidelines that improve future code quality.\n\n## Overview\n\nCode review feedback contains valuable institutional knowledge that often gets buried across hundreds of PRs. This skill extracts meaningful patterns from review comments and transforms them into:\n\n1. **Repository-specific skills** - Placed in `.openhands/skills/` for domain-specific patterns\n2. **AGENTS.md guidelines** - Overall repository conventions and best practices\n\n## Prerequisites\n\n- `GITHUB_TOKEN` environment variable must be set\n- GitHub CLI (`gh`) should be available\n\n## Workflow\n\n### Step 1: Identify Target Repository\n\nDetermine the repository to analyze:\n\n```bash\n# Get current repo info\ngh repo view --json nameWithOwner -q '.nameWithOwner'\n```\n\nIf not in a repository, ask the user which repository to analyze.\n\n### Step 2: Fetch Review Comments\n\nRetrieve PR review comments from the repository:\n\n```bash\n# Fetch merged PRs from the last 30 days (adjustable)\ngh pr list --repo {owner}/{repo} \\\n  --state merged \\\n  --limit 50 \\\n  --json number,title,mergedAt\n\n# For each PR, fetch review comments\ngh api repos/{owner}/{repo}/pulls/{pr_number}/comments \\\n  --jq '.[] | {body: .body, path: .path, user: .user.login, created_at: .created_at}'\n\n# Also fetch review-level comments (not tied to specific lines)\ngh api repos/{owner}/{repo}/pulls/{pr_number}/reviews \\\n  --jq '.[] | select(.body != \"\") | {body: .body, user: .user.login, state: .state}'\n```\n\n### Step 3: Filter and Categorize Comments\n\nApply noise filtering to keep only meaningful feedback:\n\n**Exclude:**\n- Bot comments (dependabot, copilot, github-actions, etc.)\n- Low-signal responses (\"LGTM\", \"+1\", \"looks good\", \"thanks\", \"nice\")\n- Comments shorter than 30 characters\n- Auto-generated comments (CI status, coverage reports)\n\n**Categorize remaining comments by:**\n- Security concerns\n- Performance patterns\n- Code style/conventions\n- Architecture/design patterns\n- Error handling\n- Testing requirements\n- Documentation standards\n\n### Step 4: Distill Patterns\n\nFor each category with sufficient examples (3+ similar comments), identify:\n\n1. **The recurring issue** - What mistake or oversight keeps appearing\n2. **The desired pattern** - What reviewers consistently ask for\n3. **Example context** - Concrete before/after code snippets when available\n\n### Step 5: Generate Output\n\nIf clear, actionable patterns emerge, generate focused skill files. If no clear patterns emerge, report this to the user—it's fine to produce no output when the codebase already has strong conventions or when review comments don't cluster into recurring themes.\n\nWhen creating skills, place them in `.openhands/skills/{domain-name}/SKILL.md`:\n\n```yaml\n---\nname: database-queries\ndescription: Database query patterns and best practices for this repository.\n---\n\n# Database Query Guidelines\n\n### Always Use Parameterized Queries\n[Pattern description with examples]\n\n### Connection Pool Management\n[Pattern description with examples]\n```\n\nPrefer skills over AGENTS.md updates, since AGENTS.md typically already contains general coding guidelines.\n\n### Step 6: Create Draft PR (if applicable)\n\nUse the `create_pr` tool to open a draft PR with the proposed changes. The PR description should include:\n- Number of PRs analyzed\n- Number of comments processed\n- Categories of patterns found\n- List of proposed changes (new skills and/or AGENTS.md updates)\n\n## Example Output\n\n### Sample Skill: API Error Handling\n\n```yaml\n---\nname: api-error-handling\ndescription: API error handling patterns for this repository.\n---\n\n# API Error Handling\n\n## Always Return Structured Errors\n\n❌ Avoid:\n```python\nreturn {\"error\": str(e)}\n```\n\n✅ Prefer:\n```python\nreturn {\n    \"error\": {\n        \"code\": \"VALIDATION_ERROR\",\n        \"message\": \"Invalid input\",\n        \"details\": {\"field\": \"email\", \"reason\": \"Invalid format\"}\n    }\n}\n```\n\n## Log Before Returning Errors\n\n```python\nlogger.error(f\"API error in {endpoint}: {e}\", exc_info=True)\nreturn error_response(e)\n```\n```\n\n## Defaults\n\nThis workflow analyzes PRs from the past 30 days by default.\n\n## Best Practices\n\n1. **Run periodically** - Schedule monthly or quarterly to capture evolving patterns\n2. **Review before merging** - Generated content is a draft; human review is essential\n3. **Iterate** - Refine patterns based on team feedback\n4. **Avoid duplication** - Check existing AGENTS.md and skills before adding\n5. **Cite sources** - Reference PR numbers when documenting patterns\n\n## Error Handling\n\nHandle these common edge cases gracefully:\n\n- **Repository has few PRs**: If fewer than 10 merged PRs exist in the timeframe, inform the user that there may not be enough data to identify patterns. Proceed with analysis but note the limited sample size.\n- **No patterns emerge**: When comments don't cluster into recurring themes (common for well-established codebases), report this to the user and suggest either expanding the time range or that the codebase may already have strong conventions.\n- **Token lacks repository access**: If the GitHub API returns 403/404, explain that the token may not have access to the repository and suggest checking token permissions.\n- **`gh` CLI unavailable**: Fall back to direct GitHub API calls using `curl` with `$GITHUB_TOKEN`, or inform the user that `gh` needs to be installed.\n\n## Limitations\n\n- Only analyzes accessible repositories (requires appropriate permissions)\n- Cannot capture verbal feedback from pair programming or meetings\n- Patterns may reflect individual reviewer preferences vs. team consensus\n- Historical comments may reference outdated code patterns\n\n## Additional Resources\n\nFor posting structured code reviews, see the `github-pr-review` skill.\nFor creating new skills, see the `skill-creator` skill.","trigger":{"type":"keyword","keywords":["/learn-from-reviews","learn from code review","distill reviews"]},"source":"/root/.openhands/cache/skills/public-skills/skills/learn-from-code-review/SKILL.md","mcp_tools":null,"inputs":[],"is_agentskills_format":true,"version":"1.0.0","description":"Distill code review feedback from GitHub PRs into reusable skills and guidelines. This skill should be used when users ask to \"learn from code reviews\", \"distill PR feedback\", \"improve coding standards\", \"extract learnings from reviews\", or want to generate skills/guidelines from historical review comments.","license":null,"compatibility":null,"metadata":null,"allowed_tools":null,"resources":null},{"name":"datadog","content":"# Datadog\n\n<IMPORTANT>\nBefore performing any Datadog operations, first check if the required environment variables are set:\n\n```bash\n[ -n \"$DD_API_KEY\" ] && echo \"DD_API_KEY is set\" || echo \"DD_API_KEY is NOT set\"\n[ -n \"$DD_APP_KEY\" ] && echo \"DD_APP_KEY is set\" || echo \"DD_APP_KEY is NOT set\"\n[ -n \"$DD_SITE\" ] && echo \"DD_SITE is set\" || echo \"DD_SITE is NOT set\"\n```\n\nIf any of these variables are missing, ask the user to provide them before proceeding:\n- **DD_API_KEY**: Datadog API key\n- **DD_APP_KEY**: Datadog Application key\n- **DD_SITE**: Datadog site (e.g., `datadoghq.com`, `datadoghq.eu`, `us3.datadoghq.com`)\n</IMPORTANT>\n\n## Authentication Headers\n\n```bash\n-H \"DD-API-KEY: ${DD_API_KEY}\" \\\n-H \"DD-APPLICATION-KEY: ${DD_APP_KEY}\" \\\n-H \"Content-Type: application/json\"\n```\n\n## Query Logs\n\n```bash\ncurl -s -X POST \"https://api.${DD_SITE}/api/v2/logs/events/search\" \\\n  -H \"DD-API-KEY: ${DD_API_KEY}\" \\\n  -H \"DD-APPLICATION-KEY: ${DD_APP_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"filter\": {\n      \"query\": \"service:my-service status:error\",\n      \"from\": \"now-1h\",\n      \"to\": \"now\"\n    },\n    \"sort\": \"-timestamp\",\n    \"page\": {\"limit\": 50}\n  }' | jq .\n```\n\n## Query Metrics\n\n```bash\ncurl -s -G \"https://api.${DD_SITE}/api/v1/query\" \\\n  -H \"DD-API-KEY: ${DD_API_KEY}\" \\\n  -H \"DD-APPLICATION-KEY: ${DD_APP_KEY}\" \\\n  --data-urlencode \"query=avg:system.cpu.user{*}\" \\\n  --data-urlencode \"from=$(date -d '1 hour ago' +%s)\" \\\n  --data-urlencode \"to=$(date +%s)\" | jq .\n```\n\n## Query APM Traces\n\n```bash\ncurl -s -X POST \"https://api.${DD_SITE}/api/v2/spans/events/search\" \\\n  -H \"DD-API-KEY: ${DD_API_KEY}\" \\\n  -H \"DD-APPLICATION-KEY: ${DD_APP_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"filter\": {\n      \"query\": \"service:my-service\",\n      \"from\": \"now-1h\",\n      \"to\": \"now\"\n    },\n    \"sort\": \"-timestamp\",\n    \"page\": {\"limit\": 25}\n  }' | jq .\n```\n\n## List Monitors\n\n```bash\ncurl -s -G \"https://api.${DD_SITE}/api/v1/monitor\" \\\n  -H \"DD-API-KEY: ${DD_API_KEY}\" \\\n  -H \"DD-APPLICATION-KEY: ${DD_APP_KEY}\" | jq .\n```\n\n## Documentation\n\n- [Logs API](https://docs.datadoghq.com/api/latest/logs/)\n- [Metrics API](https://docs.datadoghq.com/api/latest/metrics/)\n- [APM/Tracing API](https://docs.datadoghq.com/api/latest/tracing/)\n- [Monitors API](https://docs.datadoghq.com/api/latest/monitors/)\n- [Events API](https://docs.datadoghq.com/api/latest/events/)\n- [Dashboards API](https://docs.datadoghq.com/api/latest/dashboards/)","trigger":{"type":"keyword","keywords":["datadog"]},"source":"/root/.openhands/cache/skills/public-skills/skills/datadog/SKILL.md","mcp_tools":null,"inputs":[],"is_agentskills_format":true,"version":"1.0.0","description":"Query and analyze Datadog logs, metrics, APM traces, and monitors using the Datadog API. Use when debugging production issues, monitoring application performance, or investigating alerts.","license":null,"compatibility":null,"metadata":null,"allowed_tools":null,"resources":null}],"system_message_suffix":null,"user_message_suffix":null,"load_user_skills":false,"load_public_skills":false,"marketplace_path":"marketplaces/default.json","secrets":null,"current_datetime":"2026-05-01T17:55:21.657065"},"system_prompt":null,"system_prompt_filename":"system_prompt.j2","security_policy_filename":"security_policy.j2","system_prompt_kwargs":{"cli_mode":true,"llm_security_analyzer":true},"condenser":{"llm":{"model":"litellm_proxy/accounts/graham-openhands/deployments/mghcd1dc","api_key":"gAAAAABp9OkfHm1hsIJv7Zh99f6usd57n4p1U026DPIO3odqttMTMtEkfYxkPwTe2QopA0b7o6pd2goTSPmH1YRU8qv-0zmvcI1cv0l0G_VA4YIlq8Uqm1A=","base_url":"https://llm-proxy.eval.all-hands.dev","api_version":null,"aws_access_key_id":null,"aws_secret_access_key":null,"aws_session_token":null,"aws_region_name":null,"aws_profile_name":null,"aws_role_name":null,"aws_session_name":null,"aws_bedrock_runtime_endpoint":null,"openrouter_site_url":"https://docs.all-hands.dev/","openrouter_app_name":"OpenHands","num_retries":5,"retry_multiplier":8.0,"retry_min_wait":8,"retry_max_wait":64,"timeout":300,"max_message_chars":30000,"temperature":1.0,"top_p":null,"top_k":null,"max_input_tokens":null,"max_output_tokens":null,"model_canonical_name":null,"extra_headers":null,"input_cost_per_token":null,"output_cost_per_token":null,"ollama_base_url":null,"stream":false,"drop_params":true,"modify_params":true,"disable_vision":null,"disable_stop_word":false,"caching_prompt":true,"log_completions":false,"log_completions_folder":"logs/completions","custom_tokenizer":null,"native_tool_calling":true,"force_string_serializer":null,"reasoning_effort":"high","reasoning_summary":null,"enable_encrypted_reasoning":true,"prompt_cache_retention":"24h","extended_thinking_budget":200000,"seed":null,"safety_settings":null,"usage_id":"condenser","litellm_extra_body":{}},"max_size":240,"max_tokens":null,"keep_first":2,"minimum_progress":0.1,"hard_context_reset_max_retries":5,"hard_context_reset_context_scaling":0.8,"kind":"LLMSummarizingCondenser"},"critic":null,"tool_concurrency_limit":1,"kind":"Agent","encrypted_mcp_config":"gAAAAABp9OkfKPsWDC01IjaNBfM9BGZLmemSV2s33scKmZemzJ6q1zlV8eT_90DBdvt2j5-6Pdfy5QlTcvU5aKxPzmvjL7kLevF-YgY7UoNXfnG5jC7wnjjnsDePcQ9FoaBpAwdaKw8SoN4bUMeuvvdNhyy-qiX_pndo7pwtJaCLCEWyA9bsFsSzHKD6bAfwpjAZUZnhgIMjlMeEkjOHBODMHNtfCVxuAvzh_rDz5z8kKDjHHiMll1vY0N_jjuAStC4domCe9OcdNQyU_RQnldPATgg2fD10XAdF1nWD8GgTqjv8OhU2kMk4afDZVAHLoVq7_MM4zwlpSC22WqkBv1g_RzdTLHknO9IJ4J6nXNSpddHMch91s4k="},"id":"3b23de2ccf42444fa3f7c88e9c643123","title":"✅ Grade fraction quiz with bonus points","metrics":null,"created_at":"2026-05-01T17:55:22.082121Z","updated_at":"2026-05-01T17:55:43.873604Z"}
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /usr/local/bin/python]
[Command finished with exit code 0]