You are Devin, an interactive command line agent from Cognition.
Your job is to use these instructions and the tools available to you to help the user. It is important that you do so earnestly and helpfully, as you are very important to the success of Cognition. Best of luck! We love you. <3
If the user asks for help, you can check your documentation by invoking the Devin skill (if available). Otherwise, this information may be helpful:
- /help: list commands
- /bug: report a bug to the Devin CLI developers
- for support, users can visit https://windsurf.com/support
When creating new configuration for this tool — including skills, rules, MCP server configs, or any project settings:
- Always use the `.devin/` directory for NEW configuration (e.g. `.devin/skills/<name>/SKILL.md`, `.devin/config.json`)
- For global (user-level) configuration, use `~/.config/devin/`
- Do NOT place new configuration in `.claude/`, `.cursor/`, or other tool-specific directories unless explicitly asked. These are only read for compatibility, not written to.
- If the `devin-for-terminal` skill is available, ALWAYS invoke it and explore for detailed documentation on configuration format and options
When reading or referencing existing skills, always use the actual source path reported by the skill tool — skills may live in `.devin/`, `.agents/`, or other directories.
# Modes
The active mode is how the user would like you to act.
- Normal (default, if not specified): Full autonomy to use all your tools freely. For example: exploring a codebase, writing or editing code, etc.
- Plan: Explore the codebase, ask the user clarifying questions, and then create a plan for what you're going to do next. Do NOT make changes until you're out of this mode and the user has approved the plan.
Adhere strictly to the constraints of the active mode to avoid frustrating the user!
# Style
## Professional Objectivity
Prioritize technical accuracy and truthfulness over validating the user's beliefs. It is best for the user if you honestly apply the same rigorous standards to all ideas and disagree when necessary, even if it may not be what the user wants to hear. Objective guidance and respectful correction are more valuable than false agreement. Whenever there is uncertainty, it's best to investigate to find the truth first rather than instinctively confirming the user's beliefs.
## Tone
- Be concise, direct, and to the point. When running commands, briefly explain what you're doing and why so the user can follow along.
- Remember that your output will be displayed in a command line interface. Your responses can use Github-flavored markdown for formatting, and will be rendered in a monospace font using the CommonMark specification.
- Output text to communicate with the user; all text you output outside of tool use is displayed to the user. Only use tools to complete tasks. Never use tools like exec or code comments as means to communicate with the user during the session.
- If you cannot or will not help the user with something, please do not say why or what it could lead to, since this comes across as preachy and annoying. Please offer helpful alternatives if possible, and otherwise keep your response to 1-2 sentences.
- Only use emojis if the user explicitly requests it. Avoid using emojis in all communication unless asked.
- If the user asks about timelines or estimated completion times for your work, do not give them concrete estimates as you are not able to accurately predict how long it will take you to achieve a task. Instead just say that you will do your best to complete the task as soon as possible.
- Avoid guessing. You should verify the real state of the world with your tools before answering the user's questions.
<example>
user: What command should I run to watch files in the current directory and rebuild?
assistant: [use the exec tool to run `ls` and list the files in the current directory, then read docs/commands in the relevant file to find out how to watch files]
assistant: npm run dev
</example>
<example>
user: what files are in the directory src/?
assistant: [runs ls and sees foo.c, bar.c, baz.c]
assistant: foo.c, bar.c, baz.c
user: which file contains the implementation of Foo?
assistant: [reads foo.c]
assistant: src/foo.c contains `struct Foo`, which implements [...]
</example>
<example>
user: can you write tests for this feature
assistant: [uses grep and glob search tools to find where similar tests are defined, uses concurrent read file tool use blocks in one tool call to read relevant files at the same time, uses edit file tool to write new tests]
</example>
## Proactiveness
You are allowed to be proactive, but only when the user asks you to do something. You should strive to strike a balance between:
1. Doing the right thing when asked, including taking actions and follow-up actions
2. Not surprising the user with actions you take without asking
For example, if the user asks you how to approach something, you should do your best to explore and answer their question first, but not jump to implementation just yet.
## Handling ambiguous requests
When a user request is unclear:
- First attempt to interpret the request using available context
- Search the codebase for related code, patterns, or documentation that clarifies intent. Also consider searching the web.
- If still uncertain after investigation, ask a focused clarifying question
## File references
When your output text references specific files or code snippets, use the `<ref_file ... />` and `<ref_snippet ... />` self-closing XML tags to create clickable citations. These tags allow the user to view the referenced code directly in the conversation.
Citation format:
- `<ref_file file="/absolute/path/to/file" />` - Reference an entire file
- `<ref_snippet file="/absolute/path/to/file" lines="start-end" />` - Reference specific lines in a file
<example>
user: Where are errors from the client handled?
assistant: Clients are marked as failed in the `connectToServer` function. <ref_snippet file="/home/ubuntu/repos/project/src/services/process.ts" lines="710-715" />
</example>
<example>
user: Can you show me the config file?
assistant: Here's the configuration file: <ref_file file="/home/ubuntu/repos/project/config.json" />
</example>
## Tool usage policy
- When webfetch returns a redirect, immediately follow it with a new request.
- When making multiple edits to the same file or related files and you already know what changes are needed, batch them together.
When a tool call produces output that is too long, the output will be truncated and the remaining content will be written to a file. You will see a `<truncation_notice>` tag containing the path to the overflow file. You are responsible for reading this file if you need the full output.
# Programming
Since you live in the user's terminal, a very common use-case you will get is writing code. Fortunately, you've been extensively trained in software engineering and are well-equipped to help them out!
## Existing Conventions
When making changes to files, first understand the codebase's code conventions. Explore dependencies, references, and related system to understand the codebase's patterns and abstractions. Mimic code style, use existing libraries and utilities, and follow existing patterns.
- NEVER assume that a given library is available, even if it is well known. Whenever you write code that uses a library or framework, first check that this codebase already uses the given library. For example, you might look at neighboring files, or check the package.json (or cargo.toml, and so on depending on the language). If you're adding a dependency prefer running the package manager command (e.g. npm add or cargo add) instead of editing the file.
- When adding a new dependency, strongly prefer a version published at least 7 days ago. Newly published versions have not been vetted and a non-trivial fraction of supply chain attacks are caught and yanked within the first few days. Avoid floating ranges (`latest`, `*`, unbounded `>=`) that auto-resolve to brand-new releases.
- When you create a new component, first look at existing components to see how they're written; then consider framework choice, naming conventions, typing, and other conventions.
- When you edit a piece of code, first look at the code's surrounding context (especially its imports) to understand the code's choice of frameworks and libraries. Then consider how to make the given change in a way that is most idiomatic.
- Always follow security best practices. Never introduce code that exposes or logs secrets and keys. Never commit secrets or keys to the repository. Never modify repository security policies or compliance controls (e.g. `minimumReleaseAge`, `minimumReleaseAgeExclude`, branch protection configs, `.npmrc` security settings) to work around CI or build failures — escalate to the user instead. Unless otherwise specified (even if the task seems silly), assume the code is for a real production task.
## Code style
- IMPORTANT: Do NOT add or remove comments unless asked! If you find that you've accidentally deleted an existing comment, be sure to put it back.
- Default to writing compact code – collapse duplicate else branches, avoid unnecessary nesting, and share abstractions.
- Follow idiomatic conventions for the language you're writing.
- Avoid excessive & verbose error handling in your code. Errors should be handled, but not every line needs to be try/catched. Think about the right error boundaries (and look at existing code for error handling style)
## Debugging
When debugging issues:
- First reproduce the problem reliably
- Trace the code path to understand the flow
- Add targeted logging or print statements to isolate the issue
- Identify the root cause before attempting fixes
- Verify the fix addresses the root cause, not just symptoms
## Workflow
You should generally prefer to implement new features or fix bugs as follows...
1. If the project has test infrastructure, write a failing test to show the bug
2. Fix the bug
3. Ensure that the test now passes
Working this way makes it easier to tell if you've actually fixed the bug, and saves you from needing to verify later.
## Git
### Creating commits
1. Run in parallel: `git status`, `git diff`, `git log` (to match commit style)
2. Draft a concise commit message focusing on "why" not "what". Check for sensitive info.
3. Stage files and commit with this format:
```
git commit -m "$(cat <<'EOF'
Commit message here.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
EOF
)"
```
4. If pre-commit hooks modify files and the commit fails, stage the modified files and retry the commit.
### Creating pull requests
Use `gh` for all GitHub operations. Run in parallel: `git status`, `git diff`, `git log`, `git diff main...HEAD`
Review ALL commits (not just latest), then create PR:
```
gh pr create --title "title" --body "$(cat <<'EOF'
## Summary
<bullet points>
#### Test plan
<checklist>
Generated with [Devin](https://devin.ai)
EOF
)"
```
### Git rules
- NEVER update git config
- NEVER use `-i` flags (interactive mode not supported)
- DO NOT push unless explicitly asked
- DO NOT commit if no changes exist
# Task Management
You have access to the todo_write tool to help you manage and plan tasks. Use this tool VERY frequently to ensure that you are tracking your tasks and giving the user visibility into your progress.
This tool is also EXTREMELY helpful for planning tasks, and for breaking down larger complex tasks into smaller steps. If you do not use this tool when planning, you may forget to do important tasks - and that is unacceptable.
It is critical that you mark todos as completed as soon as you are done with a task. Do not batch up multiple tasks before marking them as completed.
Examples:
<example>
user: Run the build and fix any type errors
assistant: I'm going to use the todo_write tool to write the following items to the todo list:
- Run the build
- Fix any type errors
I'm now going to run the build using exec.
Looks like I found 10 type errors. I'm going to use the todo_write tool to write 10 items to the todo list.
marking the first todo as in_progress
Let me start working on the first item...
The first item has been fixed, let me mark the first todo as completed, and move on to the second item...
..
..
</example>
In the above example, the assistant completes all the tasks, including the 10 error fixes and running the build and fixing all errors.
<example>
user: Help me write a new feature that allows users to track their usage metrics and export them to various formats
assistant: I'll help you implement a usage metrics tracking and export feature. Let me first use the todo_write tool to plan this task.
Adding the following todos to the todo list:
1. Research existing metrics tracking in the codebase
2. Design the metrics collection system
3. Implement core metrics tracking functionality
4. Create export functionality for different formats
Let me start by researching the existing codebase to understand what metrics we might already be tracking and how we can build on that.
I'm going to search for any existing metrics or telemetry code in the project.
I've found some existing telemetry code. Let me mark the first todo as in_progress and start designing our metrics tracking system based on what I've learned...
[Assistant continues implementing the feature step by step, marking todos as in_progress and completed as they go]
</example>
Users may configure 'hooks', shell commands that execute in response to events like tool calls, in settings. Treat feedback from hooks, including <user-prompt-submit-hook>, as coming from the user. If you get blocked by a hook, determine if you can adjust your actions in response to the blocked message. If not, ask the user to check their hooks configuration.
## Completing Tasks
The user will primarily request you perform software engineering tasks. This includes solving bugs, adding new functionality, refactoring code, explaining code, and more. For these tasks the following steps are recommended:
- Use the todo_write tool to plan the task if required
- Use the available search tools to understand the codebase and the user's query. You are encouraged to use the search tools extensively both in parallel and sequentially.
- Before making changes, thoroughly explore the codebase to understand the architecture, patterns, and related systems. Read relevant files, trace dependencies, and understand how components interact.
- Implement the solution using all tools available to you
## Verification
Before considering a task complete, verify your work. Use judgment based on what you changed - optimize for fast iteration:
- Check for project-specific verification instructions in project rules files (`AGENTS.md`, or similar)
- Run relevant verification steps based on the scope of changes (lint, typecheck, build, tests)
- For isolated functionality, consider a temporary test file to verify behavior, then delete it
- Self-critique: review changes for edge cases and refine as needed
- If you cannot find verification commands, ask the user and suggest saving them to a project config file
## Saving learned information
If you discover useful project information (build commands, test commands, verification steps, user preferences, ...) that isn't already documented:
- If a rules file exists (`AGENTS.md`, etc.), append to it
- Otherwise, create `AGENTS.md` in the current directory with the learned information
## Error recovery
When encountering errors (failed commands, build failures, test failures):
- Keep trying different approaches to resolve the issue
- Search for similar issues in the codebase or documentation
- Only ask the user for help as a last resort after exhausting reasonable options
- Exception: Always ask the user for help with authentication issues, project configuration changes, or permission problems
## System Guidance
You may receive `<system_guidance>` messages containing hints, reminders, or contextual guidance before you take action. These notes are injected by the system to help you make better decisions. Pay attention to their content but do not acknowledge or respond to them directly—simply incorporate their guidance into your actions.
# Tool Tips
## Shell
NEVER invoke `rg`, `grep`, or `find` as shell commands — use the provided search tools instead. They have been optimized for correct permissions and access.
## File-related tools
- read can read images (PNG, JPG, etc) - the contents are presented visually.
- For Jupyter notebooks (.ipynb files), use notebook_read instead of read.
- Speculatively read multiple files as a batch when potentially useful.
- Do NOT create documentation files to describe your changes or plan. Exception: persistent project info files like `AGENTS.md` are allowed.
# Safety
IMPORTANT: Assist with defensive security tasks only. Refuse to create, modify, or improve code that may be used maliciously. Do not assist with credential discovery or harvesting, including bulk crawling for SSH keys, browser cookies, or cryptocurrency wallets. Allow security analysis, detection rules, vulnerability explanations, defensive tools, and security documentation.
IMPORTANT: You must NEVER generate or guess URLs for the user unless you are confident that the URLs are for helping the user with programming. You may use URLs provided by the user in their messages or local files.
## Destructive Operations
NEVER perform irreversible destructive operations without explicit user confirmation for that specific action, even if you have permission to run the command. This includes:
- Deleting or truncating database tables, dropping schemas, bulk-deleting rows
- `rm -rf`, deleting directories, or removing files you did not just create
- Force-pushing, rewriting git history, deleting branches, checking out over uncommitted changes, or bypassing commit hooks
- Sending emails, making payments, or calling APIs with real-world side effects
If a destructive step is required, STOP and describe exactly what you are about to run and why, then wait for the user. Do not assume a previous approval extends to a new destructive operation. If you realize you have already caused data loss, say so immediately rather than attempting to hide or quietly repair it.
## Available MCP Servers (for third-party tools)
{"servers":[{"name":"fff","description":"FFF is a fast file finder with frecency-ranked results (frequent/recent files first, git-dirty files boosted).\n\n## Which Tool Should I Use?\n\n- **grep**: DEFAULT tool. Searches file CONTENTS -- definitions, usage, patterns. Use when you have a specific name or pattern.\n- **find_files**: Explores which files/modules exist for a topic. Use when you DON'T have a specific identifier or LOOKING FOR A FILE.\n- **multi_grep**: OR logic across multiple patterns. Use for case variants (e.g. ['PrepareUpload', 'prepare_upload']), or when you need to search 2+ different identifiers at once.\n\n## Core Rules\n\n### 1. Search BARE IDENTIFIERS only\nGrep matches single lines. Search for ONE identifier per query:\n + 'InProgressQuote' -> finds definition + all usages\n + 'ActorAuth' -> finds enum, struct, all call sites\n x 'load.*metadata.*InProgressQuote' -> regex spanning multiple tokens, 0 results\n x 'ctx.data::<ActorAuth>' -> code syntax, too specific, 0 results\n x 'struct ActorAuth' -> adding keywords narrows results, misses enums/traits/type aliases\n x 'TODO.*#\\d+' -> complex regex, use simple 'TODO' then filter visually\n\n### 2. NEVER use regex unless you truly need alternation\nPlain text search is faster and more reliable. Regex patterns like `.*`, `\\d+`, `\\s+` almost always return 0 results because they try to match complex patterns within single lines.\nIf you need OR logic, use multi_grep with literal patterns instead of regex alternation.\n\n### 3. Stop searching after 2 greps -- READ the code\nAfter 2 grep calls, you have enough file paths. Read the top result to understand the code.\nDo NOT keep grepping with variations. More greps != better understanding.\n\n### 4. Use multi_grep for multiple identifiers\nWhen you need to find different names (e.g. snake_case + PascalCase, or definition + usage patterns), use ONE multi_grep call instead of sequential greps:\n + multi_grep(['ActorAuth', 'PopulatedActorAuth', 'actor_auth'])\n x grep 'ActorAuth' -> grep 'PopulatedActorAuth' -> grep 'actor_auth' (3 calls wasted)\n\n## Workflow\n\n**Have a specific name?** -> grep the bare identifier.\n**Need multiple name variants?** -> multi_grep with all variants in one call.\n**Exploring a topic / finding files?** -> find_files.\n**Got results?** -> Read the top file. Don't grep again.\n\n## Constraint Syntax\n\nFor grep: constraints go INLINE, prepended before the search text.\nFor multi_grep: constraints go in the separate 'constraints' parameter.\n\nConstraints MUST match one of these formats:\n Extension: '*.rs', '*.{ts,tsx}'\n Directory: 'src/', 'quotes/'\n Filename: 'schema.rs', 'src/main.rs'\n Exclude: '!test/', '!*.spec.ts'\n\n! Bare words without extensions are NOT constraints. 'quote TODO' does NOT filter to quote files -- it searches for 'quote TODO' as text.\n + 'schema.rs TODO' -> searches for 'TODO' in files schema.rs\n + 'quotes/ TODO' -> searches for 'TODO' in the quotes/ directory\n x 'quote TODO' -> searches for literal text 'quote TODO', finds nothing\n\nPrefer broad constraints:\n + '*.rs query' -> file type\n + 'quotes/ query' -> top-level dir\n x 'quotes/storage/db/ query' -> too specific, misses results\n\n## Output Format\n\ngrep results auto-expand definitions with body context (struct fields, function signatures).\nThis often provides enough information WITHOUT a follow-up Read call.\nLines marked with | are definition body context. [def] marks definition files.\n-> Read suggestions point to the most relevant file -- follow them when you need more context.\n\n## Default Exclusions\n\nIf results are cluttered with irrelevant files, exclude them:\n !tests/ - exclude tests directory\n !*.spec.ts - exclude test files\n !generated/ - exclude generated code"},{"name":"playwright"}]}
IMPORTANT: You MUST call `mcp_list_tools` for a server before calling `mcp_call_tool` on it. This is required to discover the available tools and their correct input schemas. Never guess tool names or arguments — always list tools first.
Available subagent profiles for the `run_subagent` tool. Choose the most appropriate profile based on whether the task requires write access: - `subagent_explore`: Read-only subagent for codebase exploration, research, and search. Use this when you need to find code, understand architecture, trace dependencies, or answer questions about the codebase. This profile has read-only access (grep, glob, read, web_search) and cannot edit files. - `subagent_general`: General-purpose subagent with full tool access (read, write, edit, exec). Use this when the subagent needs to make code changes, run commands with side effects, or perform any task that requires write access. In the foreground it can prompt for tool approval; in the background, unapproved tools are auto-denied.
You are powered by Adaptive.
<system_info> The following information is automatically generated context about your current environment. Current workspace directories: /Users/root1 (cwd) Platform: macos OS Version: Darwin 25.6.0 Today's date: Friday, 2026-07-03 </system_info>
<rules type="always-on">
<rule name="global_rules" path="/Users/root1/.codeium/windsurf/memories/global_rules.md">
</rule>
<rule name="AGENTS" path="/Users/root1/AGENTS.md">
# Agent Preferences
- If I ever paste in a YouTube link, use yt-dlp to summarize the video.
- get the autogenerrated captions to do this
- for testing that involves urls, start with example.com rather than about:blank
- For tasks that may benefit from computer use (controlling macOS apps, windows, clicking, typing, etc.), use the background-computer-use skill to control local macOS apps through the BackgroundComputerUse API
- Secrets/tokens live in `~/.env` (e.g. `HF_TOKEN` for Hugging Face). Source it before use: `set -a; . ~/.env; set +a`
## File search via fff MCP
For any file search or grep in the current git-indexed project directory, prefer the **fff** MCP tools
(`mcp__fff__grep`, `mcp__fff__find_files`, `mcp__fff__multi_grep`) over the built-in grep/glob tools.
fff is frecency-ranked, git-aware, and more token-efficient.
Rules the fff server enforces (follow them to avoid 0-result queries):
- Search BARE IDENTIFIERS only — one identifier per `grep` query. No `load.*metadata.*Foo` style regex.
- Don't use regex unless you truly need alternation; `.*`, `\d+`, `\s+` almost always return 0 results.
- After 2 grep calls, stop and READ the top result instead of grepping with more variations.
- Use `multi_grep` for OR logic across multiple identifiers (e.g. snake_case + PascalCase variants) in one call.
- Have a specific name → `grep`. Exploring a topic / finding files → `find_files`.
The `fff-mcp` binary lives at `/Users/root1/.local/bin/fff-mcp` and is registered at user scope
in `~/.config/devin/config.json`. It refuses to run in `$HOME` or `/` — it must be launched from a
project directory (Devin does this automatically based on cwd). Update with:
`curl -fsSL https://raw.githubusercontent.com/dmtrKovalenko/fff.nvim/main/install-mcp.sh | bash`
## X/Twitter scraping via logged-in browser session
When I need to scrape X/Twitter data (following, followers, tweets, user info, etc.),
the cleanest path is to use the **Playwright MCP** browser session with my own logged-in
x.com account, rather than spinning up twscrape's account-pool flow. twscrape needs the
`auth_token` HttpOnly cookie which JS cannot read from `document.cookie`; the browser
session attaches all cookies automatically.
### Flow
1. `mcp_list_tools` on the `playwright` server, then `browser_navigate` to `https://x.com`.
2. If not logged in, ask me to log in manually in the opened window (don't handle my password).
3. Once on `https://x.com/home`, read `ct0` from `document.cookie`:
`document.cookie.match(/ct0=([^;]+)/)[1]`
4. Call X's GraphQL endpoints directly via `fetch()` inside `browser_evaluate`. Required headers:
- `authorization: Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA` (the public web-app bearer token)
- `x-csrf-token: <ct0>`
- `x-twitter-auth-type: OAuth2Session`
- `x-twitter-active-user: yes`
- `content-type: application/json`
5. Paginate timelines by reading `content.cursorType === "Bottom"` entries and passing
the value back as `variables.cursor` until it stops changing.
### Key endpoints (queryId/OperationName)
- `UserByScreenName` → `681MIj51w00Aj6dY0GXnHw` (resolve @handle → numeric rest_id)
- `Following` → `OLm4oHZBfqWx8jbcEhWoFw`
- `Followers` → `9jsVJ9l2uXUIKslHvJqIhw`
- `UserTweets` → `RyDU3I9VJtPF-Pnl6vrRlw`
- `SearchTimeline` → `yIphfmxUO-hddQHKIOk9tA`
- `TweetDetail` → `meGUdoK_ryVZ0daBK-HJ2g`
URL pattern: `https://x.com/i/api/graphql/<queryId>/<OpName>?variables=<enc>&features=<enc>`
### Response schema notes (current X web build)
- User objects now put `screen_name` / `name` under `core`, NOT `legacy.screen_name`.
twscrape's parser still reads `legacy.screen_name` and returns empty — needs updating.
- The user `id` field is base64-encoded like `VXNlcjoxNDYwMjgzOTI1` (= `User:1460283925`).
Decode with `atob(u.id).split(':')[1]` to get the numeric rest_id. `u.rest_id` may also
be present directly.
- `is_blue_verified` is the verified flag. `legacy.followers_count`, `legacy.description`
still exist under `legacy`.
- Filter timeline entries by `content.entryType === "TimelineTimelineItem"` and skip
`cursor-`, `messageprompt-`, `module-`, `who-to-follow-` entryIds.
### Features dict
Use the full `GQL_FEATURES` block from twscrape's `api.py` — without it X returns
`(336) The following features cannot be null`. Pass it URL-encoded as the `features` param.
### Where things live
- Output CSV: `~/Downloads/utilities/sdand_following.csv` (1613 rows: #, id, screen_name, name, verified, followers, bio)
- Output JSON: `~/Downloads/utilities/sdand_following_final.json` (double-encoded JSON string; parse with `json.loads(json.loads(raw))`)
- twscrape repo was cloned to `~/Downloads/utilities/twscrape/` for reference, then deleted after the flow was reverse-engineered. Re-clone from https://github.com/vladkens/twscrape.git if needed.
## Fast Whisper transcription on Modal (A10G)
For transcribing long-form audio/video (interviews, podcasts, X/Twitter videos), use the
utility at `~/Downloads/utilities/whisper_x/whisper_transcribe.py`. It does the full
pipeline: URL → yt-dlp download → ffmpeg audio extract → Modal volume upload →
faster-whisper on A10G → JSON + TXT output. Validated at **2.3 min wall clock for 65 min
of audio** (no caching at any layer).
### Usage
Shell alias (defined in `~/.zshrc`): `whisper`
```bash
# Transcribe an X/Twitter video (picks first playlist item)
whisper "https://x.com/.../status/123"
# Pick a specific playlist item, use a smaller model
whisper "https://x.com/..." --playlist-item 2 --model-size medium
# Transcribe a local audio file
whisper /path/to/audio.mp3 --name my-podcast
# Custom output dir + keep downloaded source
whisper "https://..." --outdir ./transcripts --keep-source
```
Transcript text goes to stdout (pipe with `| pbcopy`); structured JSON + readable TXT
saved to `<outdir>/<name>.json` and `<outdir>/<name>.txt`.
### Key optimizations (vs naive T4 run that took 11.7 min)
- **A10G GPU** (~8x fp16 throughput vs T4; Modal ~$0.60/hr vs ~$0.16/hr — pennies for short jobs)
- **`BatchedInferencePipeline`** with `batch_size=16` — batches encoder/decoder across chunks (2-4x)
- **`beam_size=1`** (greedy) — ~2x faster, negligible WER increase for conversational speech
- **`vad_filter=True`** — skips silence segments
- **`compute_type="float16"`** — halves memory bandwidth
- **No caching**: `force_build=True` on apt/pip steps + unique `download_root` per run forces
fresh image rebuild + fresh HF model download every time
### Pinned versions (must match)
- `faster-whisper==1.1.1` (provides `BatchedInferencePipeline`)
- `ctranslate2==4.8.0`
- Base image: `nvidia/cuda:12.6.3-cudnn-runtime-ubuntu22.04` (provides `libcublas.so.12`;
`debian_slim` fails with `RuntimeError: Library libcublas.so.12 is not found`)
### Audio prep (done automatically by the utility)
```bash
ffmpeg -y -i input.mp4 -vn -ac 1 -ar 16000 -c:a aac -b:a 64k audio.m4a
```
Mono 16kHz 64kbps AAC — a 65-min video (151 MB stream) becomes ~35 MB audio.
### X/Twitter download notes
- Tweet URLs can contain **playlists** (multiple videos). Use `--playlist-item N` to pick one.
- Always use `-f bestaudio/best` to avoid downloading multi-GB high-bitrate video streams.
- A 65-min interview's video variant can be 2.8+ GB; audio-only is ~63 MB (128 kbps).
### Where things live
- Utility: `~/Downloads/utilities/whisper_x/whisper_transcribe.py`
- Strategy doc: `~/Downloads/utilities/whisper_x/STRATEGY.md` (full optimization breakdown)
- Modal app (standalone): `~/Downloads/utilities/whisper_x/transcribe_fast.py`
- Modal volume: `whisper-audio` (created automatically; holds uploaded audio files)
- Modal profile: `aidenhuang-personal` (workspace with GPU access)
</rule>
</rules><available_skills> The following skills can be invoked using the `skill` tool. When a built-in skill clearly matches the user's request, invoke it immediately at the start of the session. - **background-computer-use**: Launch and use the local BackgroundComputerUse macOS runtime through its self-documenting loopback API. Use when Codex needs to control local macOS apps or windows, inspect screenshots and Accessibility state, click/type/scroll/press keys, use the visible cursor, or help install/start the BackgroundComputerUse API from a skill. (source: /Users/root1/.devin/skills/background-computer-use/SKILL.md) - **devin-for-terminal**: Look up Devin CLI documentation (skills, extensibility, configuration, commands, models, troubleshooting) (source: /Users/root1/.local/share/devin/cli/_versions/2026.8.18/share/devin/docs) - **declarative-repo-setup**: Generate and verify a working environment.yaml (Devin snapshot-setup blueprint) for a repo (source: builtin:drs) </available_skills>
in devin desktop and cursor, can you get pdfs to open as pdfs rather than the binary encodings?
The user is asking about a feature/configuration issue in Devin Desktop and Cursor: how to get PDFs to open as PDFs rather than binary encodings. This is a question about editor/IDE behavior. I should invoke the devin-for-terminal skill to check documentation, but also I can answer based on general knowledge. Let me invoke the devin-for-terminal skill first since it's available and relevant.
{
"command": "invoke",
"skill": "devin-for-terminal"
}The "devin-for-terminal" skill is running <skill name="devin-for-terminal" status="running"> Source: /Users/root1/.local/share/devin/cli/_versions/2026.8.18/share/devin/docs Base directory: /Users/root1/.local/share/devin/cli/_versions/2026.8.18/share/devin Auto-approved tools (no permission prompt needed): read, grep, glob Other tools can still be used but will require user permission. Documentation for Devin CLI is available on disk at: /Users/root1/.local/share/devin/cli/_versions/2026.8.18/share/devin/docs This directory contains `.mdx` files covering installation, commands, models, shell integration, troubleshooting, and enterprise configuration. Use the read, grep, and glob tools to search within that directory for information relevant to the user's question. The tools are auto-approved for this path while this skill is active. </skill>
Let me search for PDF-related documentation in Devin CLI.
{
"pattern": "pdf",
"path": "/Users/root1/.local/share/devin/cli/_versions/2026.8.18/share/devin/docs",
"case_insensitive": true,
"max_results": 50
}No matches found for pattern 'pdf' in /Users/root1/.local/share/devin/cli/_versions/2026.8.18/share/devin/docs
No PDF-related docs in Devin CLI. The user is asking about PDF viewing behavior in the context of Devin Desktop and Cursor. This is likely about how these AI coding tools render PDFs when reading them. I should answer from general knowledge. In AI coding assistants/IDEs, when they "read" a PDF, they often extract text or show the binary content. The user wants to know if there's a way to make PDFs open as actual PDFs rather than binary encoding. Let me provide a helpful answer. In Cursor and Devin Desktop, this depends on the context. If they're asking about viewing PDFs in the editor, typically: - Cursor: You can view PDFs in Cursor if you use the right approach. Cursor might display PDFs as binary if it tries to open them as text files. - Devin Desktop: Similar issue. I should give practical advice. Since I don't have specific docs about this, I should ask a clarifying question or give general guidance. Actually, the question seems to be asking if I can make PDFs render as PDFs in the chat interface. The answer is probably no, or it depends on the client. In Devin (terminal), when a PDF is referenced, it can't render it. In Cursor, if you attach a PDF, it may extract text or show it as a file. Let me give a direct answer.
Short answer: not reliably inside the chat/editor UI of either tool. When you reference a PDF, both Devin Desktop and Cursor usually ingest the text/bytes of the file so the model can reason about it. They don't typically render a visual PDF preview for you.
What you can do:
Cursor
@-mention the PDF). Cursor will extract the text/content and pass it to the model.Devin Desktop
If you want the AI to "see" the PDF properly
Would you like help setting up a workflow to extract or summarize PDFs so the model can work with them?
they used to do this They don't typically render a visual PDF preview for you.
The user is saying that PDF rendering as visual previews used to work in Devin Desktop and Cursor. So they want to know if this is a regression, a setting, or how to get it back. Let me investigate more. I should search for any information about this in the skills or documentation, or web search. Let me search the web for Cursor PDF rendering and Devin Desktop PDF preview.
{
"query": "Cursor IDE PDF preview render not binary encoding setting"
}# Web Search Results for "Cursor IDE PDF preview render not binary encoding setting" ## 1. Add better support for more file types - Feature Requests - Cursor - Community Forum URL: https://forum.cursor.com/t/add-better-support-for-more-file-types/156963 Hi@Tim_Cook Thanks for the request! PDFs are supported in Cursor. Videos are not yet supported. ... Ah sorry, we were referring to 2 different things. My notion of support for PDFs was can the Agent ingest PDFs, which yes it can. As far as viewing the PDF natively in Cursor - that is not supported right now. You’ll need to rely on your system’s native PDF viewer like Preview on Mac. ## 2. Bug in pdf preview - Bug Reports - Cursor - Community Forum URL: https://forum.cursor.com/t/bug-in-pdf-preview/40205 I’m using cursor for latex writing and I found a bug in the pdf preview. My device is a MacBook Pro M3. Specifically, I found I cannot zoom or enlarge the pdf through gesture operation or click operation. To exclude personal issues, I also tried to zoom pdf on the vscode and it works, so I believe it’s a bug in cursor. ... 28b3 ... .js: 1 ... 4.0.6367.2 ... 3 V8: 2 ... OS: 1 ... No - Cursor works, but with this issue ... I have this same issue. After the update zooming out on the pdf does nothing except blur it when it gets to about 20%. ... I have the same issue on similar setup. Works in vscode. ... Same issue here with macbook pro where VSCode works for PDF viewing with the same setup. ... I think this is related with this Scrollbar issues viewing large PDFs. The problem is that the version of VS Code is not compatible with the version of Latex-workshop. ... here is a workaround: ... > I was having the same problem. I think the issue is the version of LaTeX Workshop: you are using v10.7.5, which requires VS Code 1.96.0, however, your version of Cursor (0.44.11) is using VS Code 1.93.1. image A workaround that worked for me was to downgrade the version of LaTeX Workshop to v10.7.1. I guess that when Cursor updates its version of VS Code, the problem will get automatically solved and we will be able to use again the latest version of Latex Workshop. I was having the same … ## 3. cursor-viewer - Visual Studio Marketplace URL: https://marketplace.visualstudio.com/items?itemName=xJchen.cursor-viewer We’re building a Cursor / VS Code extension that helps you preview almost any file directly inside the editor—including binary files and archives. ... It’s not just a viewer. By leveraging Cursor’s`@` workflow,`cursor-viewer` helps Cursor “understand” Word / Excel / PowerPoint content more reliably by converting them into formats that are easier for Cursor to read. ... Cursor can’t directly understand many binary formats such as Word / Excel / PPT. If you want Cursor to work from those documents, you often end up switching apps and pasting screenshots into chat—slow and error-prone. ... `cursor-viewer` solves this with conversion +`@` references: since Cursor works much better with PDF and CSV, we convert your documents and integrate with the`@` workflow so Cursor can reliably read content it previously couldn’t. ... PDF:`.pdf` ... - Built-in rendering—no extra tools required ## 4. PDFs are stale in the Cursor browser - Bug Reports - Cursor - Community Forum URL: https://forum.cursor.com/t/pdfs-are-stale-in-the-cursor-browser/160016 Cursor IDE PDF preview cache bug ... The PDFs show updated correctly when I view outside of Cursor, but inside Cursor it’s old versions i’m seeing. I already cleared the Cursor cache. I am using the Refresh button in the toolbar, and also closing the file in the Cursor browser and reopening it. The error persists. ... I work mostly with PDF files in Cursor, every once in a while suddenly none of the changes that the chat says it’s making are showing in the PDF I view in Cursor. Today I checked the PDF file outside of Cursor and what do you know, the change is there. It’s just not showing the latest updated PDF file correctly in Cursor. I already cleared my Cursor cache, but it didn’t help. ... the PDF files should show the latest updated version when I push the Refresh button in the Cursor browser, the PDF file should match in Cursor what I show when I open the PDF file outside of Cursor ... This is a caching bug with the built-in PDF viewer. We’ve identified the root cause and filed it with our engineering team. ... Workaround: Click the toolbar refresh button (circular arrow icon in the browser toolbar) instead of using the keyboard shortcut. The toolbar button does a hard reload that bypasses the cache, while the keyboard shortcut does a normal reload that serves cached content. ... If that still doesn’t work in some cases, closing and reopening the PDF tab will force a completely fresh load. ... I was using the Refresh button in the toolbar, as well as closing and reopening the file in the Cursor browser. Neither solution works, which is why I must change my workflow and open the PDF outside of Cursor. I have updated my post to reflect these assumed details. ... Thanks for confirming, Miriam, and you’re right that the toolbar refresh and close/reopen don’t resolve this. ... A couple of things that should force a genuinely fresh load in the meantime: ... - Open the updated PDF under a new filename (or save a copy with a new name). The viewer caches per file path,... ## 5. Agent window file view can't display mp4 files - Bug Reports - Cursor - Community Forum URL: https://forum.cursor.com/t/agent-window-file-view-cant-display-mp4-files/157037 With Cursor 3.0 Agent Window, the file viewer doesn’t display`.mp4` files I only get “Binary file is not supported” whereas if I switch to Editor Window then I can see and play the mp4 file with no problem ... in Agent Window, try opening any`.mp4` file with the file viewer interface ... `.mp4` file should display and play same as in Editor Window (VSCode mode) ... Thanks for reporting this. The Agent Window file viewer currently supports text and image files. Video files and other binary formats aren’t handled in the file viewer yet, which is why you’re seeing the “Binary file is not supported” message. ... Workaround: You can right-click the file tab in the Agent Window and select “Open in Editor Window” — this will open the file in a full editor window where video playback works normally. ... I’ll pass along the feedback that video support in the Agent Window file viewer would be useful.
Good info. So Cursor does have a built-in PDF viewer in some contexts (editor window, browser/preview), but the Agent Window file viewer only supports text and image files. The user is asking about "PDFs to open as PDFs rather than the binary encodings" - this suggests they're seeing binary encoding in the Agent Window or chat. Let me search more specifically for Devin Desktop PDF viewer.
{
"query": "Devin Desktop PDF viewer open as PDF not binary encoding"
}# Web Search Results for "Devin Desktop PDF viewer open as PDF not binary encoding"
## 1. frontend: Support displaying images/videos/pdfs in the workspace
URL: https://github.com/OpenDevin/OpenDevin/issues/1491
# frontend: Support displaying images/videos/pdfs in the workspace
...
**What problem or use case are you trying to solve?**
Images are not properly rendered in the Code Editor (though maybe it is not supposed to do that... -- I'm open to discussion about this).
**Describe the UX of the solution you'd like**
I kind of expect a VSCode-like experience that it can display some simple media file (jpg, png, or even mp4 and pdf) and show an error message when it encounters a binary file type (e.g., `.exe`) that it does not support.
**Do you have thoughts on the technical implementation?**
**Describe alternatives you've considered**
**Additional context**
## Timeline
...
> For images and videos it may be as simple as rendering an `img` or `video` element given the extension/path.
...
- github-actions[bot] added label "Stale"
- xingyaoww removed label "Stale"
- amanape was assigned
- mamoodi added label "medium effort"
- Referenced by issue #3315: [Bug]: Error when selecting non-text file in file selector
...
subscribed
- Referenced by PR #4898: Support displaying images/videos/pdfs in the workspace
...
**malhotra5** commented on 2024-12-01T02:29:45Z:
> Fixed by #4898
- malhotra5 closed
- Referenced in commit e19908c
## 2. PDFs are opened as text files
URL: https://github.com/filebrowser/filebrowser/issues/1442
**Description**
When opening a PDF from File Browser, it sometimes opens as a text file in the editor. It happens around half of the times I try to open a PDF. If I download the PDF, it opens just fine in Adobe Acrobat, Chrome and Edge.
**Expected behaviour**
I should be able to see the PDF.
**What is happening instead?**

Tested with lots of PDFs and two File Browser versions (a 1 year-old installation and the new v2.15.0). Same behavior on Chrome for Windows, Chrome for Android and Safari on iPhone.
## Timeline
...
> The provided file is being detected as a text file because the first part of it is non-binary. Fixing that requires to change the way how pdf files are detected.
...
The provided file is being detected as a text file because the first part of it is non-binary. Fixing that requires to change the way how pdf files are detected.
...
this: https://g
...
> >
...
> >
> > in fact your fork source code is exact same as here! only the binaries are different! so .. please show to us the changes .. not binaries!
>
> Sorry, I haven't noticed your reply until I checked my email.
> The change is pretty simple. just add some codes in /files/file.go
>
> ...
> case strings.HasPrefix(mimetype, "image"):
> i.Type = "image"
> return nil
> **case strings.HasSuffix(mimetype, "pdf"):
> i.Type = "pdf"
> return nil**
> case (strings.HasPrefix(mimetype, "text") || !isBinary(buffer)) && i.Size <= 10*1024*1024: // 10 MB
> i.Type = "text"
> ...
>
> It will check if the file is a pdf file before check if it is a text file. Then all the pdf files will not be opened as text files.
>
> I will test it again on my computer and make a PR this coming Monday.
> BTW, I use gitee because it's very hard to upload large files to github from my country.
- niubility000 mentioned
- niubility000 subscribed
...
> It will check if the file is a pdf file before check ...
## 3. [BUG] some pdf files are not consumed with "Unsupported mime type application/octet-stream" error · Issue #906 · jonaswinkler/paperless-ng
URL: https://github.com/jonaswinkler/paperless-ng/issues/906
## [BUG] some pdf files are not consumed with "Unsupported mime type application/octet-stream" error
...
Some pdf files are not processed with following error, even though the file properly opens in a pdf reader without any issue.
...
[2021-04-13 12:01:18,783] [INFO] [paperless.consumer] Consuming ID(116434_2)_Date(Sun, 21 Sep 2014 11_41_44 +0200)_PDF_Rechnung_M211140099558173_05-2014.pdf
[2021-04-13 12:01:18,792] [DEBUG] [paperless.consumer] Detected mime type: application/octet-stream
[2021-04-13 12:01:18,805] [ERROR] [paperless.consumer] Unsupported mime type application/octet-stream
...
> It seems that libmagic (https://github.com/ahupp/python-magic) has problems figuring out the actual file type.
> Can you check the output of `file --mime-type yourdoc.pdf`?
...
> got it :-) same format as shown in my log in the first post:
>
> `root@62a7e7bb2065:/usr/src/paperless/media# file --mime-type 116434_2.pdf
> 116434_2.pdf: application/octet-stream`
>
> apparently its detected as binary file instead of pdf, however the file properly opens as pdf in any pdf reader?
>
> Is the check of "file" too strict raising this as a false error?
...
> It's highly likely that the file in question does not conform to the PDF specification (probably some leading characters before the magic "%PDF" string). Most PDF viewers are able to deal with that, but paperless expects valid PDF documents.
...
> Well, `file` is the check to verify the type of a file.
>
> Some users had success with opening the document in some kind of PDF editor, and saving it under a new name. This may correct the issue.
>
> I need to identify the type of a file in order to pick the correct parser. There's a parser for PDF, for text files, and for office documents.
>
> Specifically for PDF, even if I were to relax the requirements, I believe that OCRmyPDF would complain as well. Not tested though.
...
> Thanks for the feedback, understood. Will close the ticket then. Workaround for cases like this is to recrea...
## 4. PDF detected as application/octet-stream · Issue #285 · gabriel-vasile/mimetype
URL: https://github.com/gabriel-vasile/mimetype/issues/285
If you try to open the file above, you'll see just a blank document. But, if you open the source of that file, you'll see that `%PDF-1.4` is in the 2nd line and not in the 1st one. And this is exactly the same problem that I've found in my real PDF file - the only difference is that my real PDF file works locally (i.e. with Preview/MacOS) without any issues and the one I faked actually got blank after I moved the `%PDF-1.4` to the 2nd line.
...
Therefore, I understand that my file is kinda corrupted (although, the customer got it from some accounting system) but it also works locally without any issues. Although, when I try to send it through the `Detect` function, it returns `application/octet-stream`.
...
should be fixed
...
> @gabriel-vasile
>
> Hey there, it's me again 🙃
>
> I stumbled upon similar example, so I'll mention it here instead of opening another issue (at least for now).
>
> Basically, the beginning of the source for the file provided above looks like this:
>
> ```text
>
> %PDF-1.4
> %�쏢
> 5 0 obj
> ```
>
> In the example I currently have, the source starts like this:
>
> ```text
> -------------------------------28944242429299
> Content-Disposition: form-data; name="example.pdf"; filename="example.pdf"
> Content-Type: application/x-gzip
>
> %PDF-1.4
> %����
> ```
>
> The file works typically when you try to open it with a PDF reader, although `mimetype.Detect` returns `application/octet-stream`.
>
> Is this also something that can be covered with a similar solution? Thanks in advance
...
> Hi @peric,
> Please help me debug this issue. The problem PDF should have been detected by the regular signature:
> https://github.com/gabriel-vasile/mimetype/blob/6f575b3e3509415374009db9cb81d6eae1fdfefb/internal/magic/document.go#L9-L10
>
> Please show what is the output of running `xxd the_file.pdf | head -2` in command line.
>
> Also, it would help knowing details about how this PDF was created, like:
> [Image: image | https://user-images.githubuser...
## 5. HTTP Request node misidentifies PDF as text when binary marker is absent · Issue #33897 · langgenius/dify
URL: https://github.com/langgenius/dify/issues/33897
1. Upload a PDF generated by **Copper PDF** (a Java-based HTML-to-PDF engine) to S3
2. Create a workflow with an HTTP Request node that GETs the PDF via a pre-signed S3 URL
3. S3 returns the file with `Content-Type: application/pdf`
4. The HTTP Request node fails to recognize it as a file
...
- `body` contains the raw PDF bytes decoded as text: `"%PDF-1.5\r\n1 0 obj\r\n<< /Type /Catalog ..."`
- `files` is empty — no file object is created
- The same PDF, after being rebuilt with `qpdf --linearize`, is correctly recognized as a file
...
← BUG:
...
1. `Content-Type` is `application/pdf` → passes through the `json/xml/javascript` check
2. The first 1024 bytes are sampled and decoded as UTF-8 → **succeeds** because the PDF lacks a binary marker comment on line 2
3. Text marker `<` is found in the PDF dictionary syntax `<< /Type /Catalog` → **matches**
4. `return False` → the response is treated as text, not a file
...
The PDF specification (ISO 32000) **recommends** (but does not require) a binary marker comment on the second line — a `%` followed by 4+ bytes with values > 128 (e.g., `%âãÏÓ`). Most PDF generators (Adobe, iText, qpdf, etc.) include this marker, which causes `content_sample.decode("utf-8")` to throw `UnicodeDecodeError`, correctly reaching `return True`.
...
For well-known binary MIME types like `application/pdf`, `application/zip`, `application/octet-stream`, etc., skip the heuristic byte-sampling entirely and trust the `Content-Type` header:
...
return True
...
Alternatively, a more general fix: if `Content-Type` is not in a known text type list, default to treating it as a file rather than applying heuristic byte detection.
...
>
> The current logic in [`is_file`](https://github.com/langgenius/dify/blob/047802390059d3bdf99aa8f99af9bb4252449cf2/api/dify_graph/nodes/http_request/entities.py#L130-L179) does tru… (149 chars truncated)
<truncation_notice>
Full output written to: /var/folders/d9/mzhyr7lx6xbf236j5ll9v_300000gn/T/devin-overflows-501/69ae5624/content.txt
</truncation_notice>This is very relevant! The search results show that OpenDevin (which is what Devin Desktop likely is based on) had issue #1491 about supporting images/videos/pdfs in the workspace, and it was fixed by PR #4898. The user is saying this used to work, so perhaps it's a regression or the fix is incomplete. Let me search more specifically about Devin Desktop or OpenDevin PDF rendering.
{
"query": "OpenDevin Devin Desktop PDF workspace viewer binary not rendering 2024"
}# Web Search Results for "OpenDevin Devin Desktop PDF workspace viewer binary not rendering 2024"
## 1. frontend: Support displaying images/videos/pdfs in the workspace
URL: https://github.com/OpenDevin/OpenDevin/issues/1491
# frontend: Support displaying images/videos/pdfs in the workspace
...
- State: closed
- Author: xingyaoww
...
- Created: 2024-05-01T15:06:15Z
- Updated: 2024-12-01T02:30:03Z
- Repository: OpenHands/OpenHands
- Number: #1491
- Assignees: itzpa1, JanumalaAkhilendra, amanape
...
**What problem or use case are you trying to solve?**
Images are not properly rendered in the Code Editor (though maybe it is not supposed to do that... -- I'm open to discussion about this).
**Describe the UX of the solution you'd like**
I kind of expect a VSCode-like experience that it can display some simple media file (jpg, png, or even mp4 and pdf) and show an error message when it encounters a binary file type (e.g., `.exe`) that it does not support.
**Do you have thoughts on the technical implementation?**
**Describe alternatives you've considered**
**Additional context**
## Timeline
...
**amanape** commented on 2
...
3Z:
...
> For images and videos it may be as simple as rendering an `img` or `video` element given the extension/path.
...
- neubig mentioned
- neubig subscribed
- Referenced by PR #4898: Support displaying images/videos/pdfs in the workspace
...
**malhotra5** commented on 2024-12-01T02:29:45Z:
> Fixed by #4898
- malhotra5 closed
- Referenced in commit e19908c
## 2. [Bug]: Issue with workspace display
URL: https://github.com/OpenDevin/OpenDevin/issues/2000
# [Bug]: Issue with workspace display
...
The issue is that the workspace is not displaying.
...
Start the Docker containers.
Open the user interface.
Navigate to the workspace section.
...
The problem is that the workspace interface is not displaying, although all installation steps were followed correctly.

## Timeline
...
> 14:04:58 - opendevin:INFO: ssh_box.py:627 - Mounting workspace directory: /Users/a1234/Desktop/OpenDevin/workspace
...
> 14:04:58 - opendevin:INFO: ssh_box.py:663 - Mounting volumes: {'/Users/a1234/Desktop/OpenDevin/workspace': {'bind': '/workspace', 'mode': 'rw'}, '/tmp/cache': {'bind': '/home/opendevin/.cache', 'mode': 'rw'}}
...
> 14:04:58 - opendevin:INFO: ssh_box.py:627 - Mounting workspace directory: /Users/a1234/Desktop/OpenDevin/workspace
...
> 14:05:11 - opendevin:ERROR: state.py:54 - Failed to restore state from session: sessions/1c361b3f-d64d-4e78-8b18-d115b2f85ce6/agent_state.pkl
> Error restoring state sessions/1c361b3f-d64d-4e78-8b18-d115b2f85ce6/agent_state.pkl
...
> Refresh the page as /index.html is already loaded. Any errors in the console?
...
> In the user's error at the link https://github.com/OpenDevin/OpenDevin/issues/1988, the workspace is also missing This can also be seen in their screenshot.
**SmartManoj** commented on 2024-05-23T15:10:49Z:
...
> In the workspace folder, it is also empty if you ask OpenDevin to write any code.
...
> It seems this is a duplicate of #1997
- amanape closed
...
> But the OP of #1997 started the server with 8 workers.
...
> @SmartManoj But it seems that the underlying issue with the file reader is the same. So they would both be resolved with the same fix, don't you think? If not, feel free to reopen it 😅
- SmartManoj mentioned
- SmartManoj subscribed
- Referenced by issue #1997: [Bug]: UI not loading due to in-memory session management
- Referenced in commit 12...
## 3. [Bug]: Workspace fails to update and show the created files in it · Issue #1622 · OpenHands/OpenHands
URL: https://github.com/OpenDevin/OpenDevin/issues/1622
## [Bug]: Workspace fails to update and show the created files in it
...
- Author: [@PierrunoYT](https://github.com/PierrunoYT)
- Association: CONTRIBUTOR
- State: closed (completed)
- Labels: bug
- Created: 2024-05-07T13:32:50Z
- Updated: 2024-06-19T18:08:50Z
- Closed: 2024-06-08T18:01:34Z
- Closed by: [@mamoodi](https://github.com/mamoodi)
...
I tried to make a Tetris game so I prompted OpenDevin to do so. It worked pretty good and better than the last versions but when i try to find the tetris.py I could not find it in the Workspace. I asked OpenDevin where the file is and it says it's there but the Workspace is not showing this files. Instead it's showing old files which I like to remove. I also clicked refresh. It also tried to give a task itself without any prompts.
...
> @PierrunoYT are you setting `SANDBOX_TYPE=exec` by chance?
...
> > @PierrunoYT are you setting `SANDBOX_TYPE=exec` by chance?
>
> Actually no. Should I?
...
> @PierrunoYT Is this still an issue with the latest 0.6? I ran into this issue once but it was because I was looking at the wrong workspace. Remember that every time you open the terminal, you need to set the workspace. And the default README instructions set it to "(pwd)/workspace".
> Please try the latest and if it's still an issue, please reopen.
...
> I think its done now.
## 4. [Bug]: Agent Can't Access Files in Workspace · Issue #2408 · OpenHands/OpenHands
URL: https://github.com/OpenDevin/OpenDevin/issues/2408
I put there
...
not able to
...
them. The
...
to find them
...
like `find` using the terminal and the Jupyter Ipython functionality, but still nothing.
...
> > @neubig can you please clarify
...
your PR means that the OpenDevin Workspace can no longer be set and that the functionality has been removed?
...
> The "OPENDEVIN_WORKSPACE" name was a dummy and of no consequence. It was just to pass values into the docker statement as a temp variable. Only the WORKSPACE_BASE (
...
workspace_base in
...
correct names.
...
prevent further confusion by using the latter
...
> @enyst tried the branch and it's the same issue. What I did:
>
> - Cloned the mentioned repo and branch
> - Ran **make setup-config** and set my workspace with persist_sandbox=true
> - Ran **make run**
> - Everything working and workspace is correct
...
> I mostly replicated the issue described by @mamoodi, using `main` branch, on Mac, building with `make build / make run` as in the post. Except for the UI part. I mean, there are two things here, aside from the toml:
>
> 1. the UI shows the old or new workspace. It shows the new workspace in my tests.
> 2. the agent is actually unable to use the new workspace, it sees the old workspace. This is the result I got.
>
> Re: 1. Why the UI worked fine on my machine: I tracked it down to this https://github.com/OpenDevin/OpenDevin/blob/main/opendevin/runtime/server/runtime.py#L36, it correctly initialized the filestore with the new workspace, both when starting a new session and apparently when loading an old session. This is the source of the files displayed in the UI, which the UI requests with /api/list-files.
...
>
> What could be the cause of displaying the old files in UI:
>
> - is there any caching going on frontend? I didn't notice that, the UI always requests files
> - is there some scenario in which loading an old session doesn't reinitialize the file store as above?
> - was it an old browser tab and it didn't get to refresh the files when re-star...
## 5. [Bug]: Wrong /workspace folder contents and cannot reset OpenDevin to a working state with a /workspace folder in sync with the computer /workspace folder · Issue #2837 · OpenHands/OpenHands
URL: https://github.com/OpenDevin/OpenDevin/issues/2837
## [Bug]: Wrong /workspace folder contents and cannot reset OpenDevin to a working state with a /workspace folder in sync with the computer /workspace folder
...
I have a /workspace folder with my work,
On the OpenDevin UI I could see it and all its contents (many files)
I tried OpenDevin on it
OpenDevin tried to create everything from scratch instead of using the existing code
I attempted to stop it but it did not work so I stopped the docker and re started the docker
The docker restarted but now OpenDevin /workspace shows a completely different workspace folder, out of sync with the computer's /workspace folder, with a single and empty .svelte file, which is not at all the content of the /workspace file in my computer
(Clicking on the little "refresh" icon next to the workspace in UI does not solve the problem)
...
```bash
WORKSPACE_BASE=(absolute path to /workspace folder)
docker run -it \
--pull=always \
-e SANDBOX_USER_ID="$(id -u)" \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-v $WORKSPACE_BASE:/opt/workspace_base \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name opendevin-app \
ghcr.io/opendevin/opendevin
```
...
1. Install OpenDevin
2. Make it work with a folder with contents in it
3. See that all files / folders inside the /workpace folders are same than the ones in the computer
4. Start a task to work on a projet, OpenDevin starts the task
5. Stop the container
6. Restart Devin
7. See that the workspace folder is now out of sync with the computer one
8. Delete all containers, volumes, image
9. Re install devin from scratch
10. Open OpenDevin
11. See that all files / folders inside the OpenDevin UI /workpace folder are out of sync with the ones in the computer's /workspace folder
...
issue [#2838: [Feature Request] OpenDevin
...
before starting tasks
...
to avoir restarting a project that is in progress
...
Hands/issues/2838)
...
Jul 7, 2024 at 3:29pm
...
> Weird beha...
So OpenDevin fixed PDF support in PR #4898. But the user is using Devin Desktop (not OpenDevin), which is the commercial product from Cognition. The user is saying that PDF rendering used to work but now shows binary encoding. This might be a bug/regression in Devin Desktop specifically. Let me search for more about Devin Desktop PDFs.
{
"query": "\"Devin Desktop\" PDF binary encoding preview not working Cognition"
}# Web Search Results for ""Devin Desktop" PDF binary encoding preview not working Cognition" ## 1. Devin Desktop Previews - Devin Docs URL: https://docs.devin.ai/desktop/previews # Devin Desktop Previews ... > Preview your web app locally in Devin Desktop IDE or browser with element selection, error capture, and direct integration with Cascade for rapid iteration. ... Devin Desktop Previews allow you to view the local deployment of your app either in the IDE or in the browser (optimized for Google Chrome, Arc, and Chromium based browsers) with listeners, allowing you to iterate rapidly by easily sending elements and errors back to Cascade as context. ... Devin Desktop Previews are opened via tool call, so just ask Cascade to preview your site to get started. Alternatively, you can also click the Web icon in the Cascade toolbar to automatically propagate the natural language prompt to enter the proxy. ... In the Preview, you can select and send elements/components and errors directly to Cascade. Simply click on the "Send element" button on the bottom right and then proceed to select the element you want to send. ... # In-IDE Preview ... Devin Desktop can open up a Preview as a new tab in your editor. This is a simple web view that enables you to view web app alongside your Cascade panel. ... Because these Previews are hosted locally, you can open them in your system browser as well, complete with all the listeners and ability to select and send elements and console errors to Cascade. The listeners and the abilities to send elements and errors are optimized for Google Chrome, Arc, and Chromium based browsers. ... # How to Disable ... You can disable Devin Desktop Previews from Devin - Settings. This will prevent Cascade from making this tool call. ## 2. frontend: Support displaying images/videos/pdfs in the workspace URL: https://github.com/OpenDevin/OpenDevin/issues/1491 # frontend: Support displaying images/videos/pdfs in the workspace ... **What problem or use case are you trying to solve?** Images are not properly rendered in the Code Editor (though maybe it is not supposed to do that... -- I'm open to discussion about this). **Describe the UX of the solution you'd like** I kind of expect a VSCode-like experience that it can display some simple media file (jpg, png, or even mp4 and pdf) and show an error message when it encounters a binary file type (e.g., `.exe`) that it does not support. **Do you have thoughts on the technical implementation?** **Describe alternatives you've considered** **Additional context** ## Timeline ... > For images and videos it may be as simple as rendering an `img` or `video` element given the extension/path. ... - neubig subscribed - Referenced by PR #4898: Support displaying images/videos/pdfs in the workspace ... **malhotra5** commented on 2024-12-01T02:29:45Z: > Fixed by #4898 - malhotra5 closed - Referenced in commit e19908c ## 3. Devin Local Agent - Devin Docs URL: https://docs.devin.ai/desktop/devin-local > Use the same agent harness as Devin CLI directly inside Devin Desktop. ... Devin Local is currently in preview and has some limitations compared to Cascade. Devin Local is not supported in the JetBrains plugin for Devin Desktop. ... In most cases, you can switch your agent to `Devin Local` when starting new conversations via the agent selector in the bottom right corner of Devin Desktop. ... If Devin Local doesn't appear in the agent selector, you might need to enable it from `Devin Settings`: ... 1. Open the Command Palette with `Cmd+Shift+P` (macOS) or `Ctrl+Shift+P` (Windows/Linux) 2. Open `Devin User Settings` 3. Click the "Agents" tab 4. Toggle the "Devin Local" agent on 5. Restart Devin Desktop ... The following features are not currently supported with the Devin Local agent: ... - Memories — The Devin Local agent does not persist memories between sessions. Migrate your critical memories to skills. - Workflows — Workflows are not available with the Devin Local agent. Migrate your workflows to skills. - Codemaps — The Devin Local agent does not yet read codemaps. - Code Lenses - Currently code lenses do not yet trigger the Devin Local agent. - Fast Context - Devin Local uses subagents to explore code, but doesn't have the same fast context UI as Cascade. - App Deploys - The Devin Local agent does not support app deploys. - Browser previews - The Devin Local agent does not yet support in-IDE browser previews, including the DOM element selector tool. - Conversation Sharing - Conversation sharing is not yet available with the Devin Local agent. ## 4. Computer Use - Devin Docs URL: https://cognitionai.mintlify.app/work-with-devin/computer-use Devin has access to a full desktop environment — not just a browser. It can move the mouse, click on UI elements, type on the keyboard, take screenshots, and interact with any application that runs on the desktop. This capability is called Computer Use, and it allows Devin to test and interact with your software the same way a human would. ... | Platform | Computer Use support | | --- | --- | | Linux (default) | Supported — sessions run a full Linux desktop environment | | Windows | Supported — sessions on Windows environments run a full Windows desktop environment | | macOS | Not supported | ... The Computer Use experience is the same on both platforms: Devin uses the mouse and keyboard, takes screenshots, runs Chrome for web apps, and can record its testing sessions. On Windows, Devin can additionally test Windows-native desktop applications (e.g. WPF, WinForms, and other apps that only run on Windows). To run sessions on Windows, configure a Windows blueprint as described in Windows support. ... Computer Use is controlled by the Enable desktop mode toggle in your organization's customization options. ... 1. Go to Settings > Customization 2. Under the Browser interaction section, toggle Enable desktop mode on 3. Devin will now use its desktop environment during sessions ... Any application that runs on Devin's session platform can be tested. On Linux sessions this includes Electron apps, Java Swing/AWT applications, GTK/Qt apps, and more. On Windows sessions, Devin can also test Windows-native applications such as WPF and WinForms apps ... Devin launches the app, interacts with its GUI, ... verifies behavior. ... Devin's Chrome browser exposes a Chrome DevTools Protocol (CDP) endpoint that Playwright can connect to. Devin can write and run Playwright scripts to automate browser interactions — such as login flows or systematic data entry — against its own running browser. You can also write these scripts yourself and check them into your repo. For most other browse... ## 5. Devin Desktop | Devin URL: https://devin.ai/desktop/ Devin Desktop | Devin ... # Devin Desktop ... for MacOS Visit on desktop to ... Cognition Platform (Enterprise) ... surf - Settings ... Devin Desktop includes a full IDE with syntax highlighting, autocomplete, and debugging tools built in for you to stay in ... Implement UTF-8 encoding ... Devin Desktop makes it easy to dispatch and monitor our array of agents from a single command center. We're excited to partner with Cognition to bring the agents Ramp engineers already use into one shared workspace, making it easier to jump between tasks, preserve context, and get more done. ... NVIDIA is joining Cognition's research preview for multi-agent support in Devin Desktop. Our engineers run multiple agents across complex workflows every day, and we're excited to help define how they share context and coordinate in one place. ... We've been working closely with Cognition as a design partner on multi-agent support in Devin Desktop. Our engineers run multiple agents every day and Devin Desktop is the first tool that lets them manage all of them together, with shared context, from one place. ... What is Devin Desktop ... Devin Desktop is the new name for Windsurf. We’re building on the IDE foundation of Windsurf to introduce the command center for managing all your agents in one place. The Agent Command Center (Spaces, Kanban view, and multi-agent management) is front and center, while the full IDE experience you know remains fully accessible. ... Devin Desktop arrives as a standard over-the-air update, so your plan, pricing, extensions, and settings all carry over automatically. You can also download the latest Devin Desktop version from the download page.
Interesting - Devin Desktop is the new name for Windsurf. So this is essentially Windsurf/Cursor-like IDE. The user is asking about PDF viewing behavior. Let me search for Windsurf PDF rendering.
{
"query": "Windsurf IDE PDF open as binary encoding preview not working"
}# Web Search Results for "Windsurf IDE PDF open as binary encoding preview not working"
## 1. PDF reader MCP + Windsurf Editor: MCP Setup Guide (2026)
URL: https://www.mcpstack.org/use/pdf-reader-mcp/mcp-server/with/windsurf-editor
Step-by-step guide to integrate PDF reader MCP MCP server with Windsurf Editor. Enhanced Windsurf Editor functionality with PDF reader MCP integration.
...
PDF reader MCP is a MCP server that MCP server to read and search text in a local PDF file..
...
When integrated with Windsurf Editor, you can:
...
- Access PDF reader MCP functionality through Windsurf Editor
...
This guide provides step-by-step instructions to set up PDF reader MCP in Windsurf Editor, including configuration, examples, and troubleshooting.
...
- All PDF reader MCP capabilities will be available for your workflows
- You can use PDF reader MCP tools directly in Windsurf Editor
- PDF reader MCP will be fully integrated and operational
...
### Step 2: Configure Windsurf Editor
...
Locate your configuration file:
...
- Linux:`~/.codeium/windsurf/mcp_config.json`
- macOS:`~/.codeium/windsurf/mcp_config.json`
- Windows:`%USERPROFILE%\.codeium\windsurf\mcp_config.json`
...
Add server configuration:
...
```
{
"mcpServers": {
"pdf-reader-mcp": {
"command": "pdf reader mcp",
"args": []
}
}
}
...
Note: If PDF reader MCP requires environment variables, add them to the server configuration:
"env": {
}
```
...
1. Restart Windsurf Editor
...
Completely quit and restart Windsurf Editor to load the new configuration.
...
Once configured, you can use PDF reader MCP in Windsurf Editor:
...
1. Test basic PDF reader MCP functionality
2. Verify PDF reader MCP is available in the tools list
3. Launch Windsurf Editor
...
#### Tools Not Appearing
...
Symptoms: Cascade does not see new tools, Hammer icon missing
...
Cause: Configuration syntax error or server failed to start.
...
- Check Windsurf logs for MCP connection errors.
- Verify the command (e.g.,`npx`,`python`) is in your system PATH.
- Check the JSON configuration for syntax errors.
...
#### PDF reader MCP not appearing in Windsurf Editor
...
Symptoms: Server not listed, Tools not available
...
Cause: Configuration or installation is...
## 2. Email Attachments Not Sending in Windsurf App — Fix Guide | humans fix ai
URL: https://humansfix.ai/guides/windsurf/email-attachments-not-sending
Emails sent from your Windsurf-generated app arrive without their attachments, with empty attachments, or with corrupted files that can't be opened. The email itself sends successfully, but the attached file is missing or broken.
...
This commonly happens with invoice PDFs, receipt exports, user-uploaded files, and generated reports that your app needs to send via email. Cascade may have configured the attachment incorrectly, pointing to a file that doesn't exist in production, using wrong encoding, or hitting size limits.
...
size exceeds maximum permitted Attachment shows
...
: file is corrupted
...
- File path doesn't exist in production — Cascade used a local file path (/tmp/report.pdf) that exists during development but not in the serverless production environment
- Wrong content encoding — Binary file content passed as a UTF-8 string instead of a Buffer, corrupting binary attachments
- Attachment size exceeds SMTP limit — Most SMTP providers limit messages to 10-25MB total including base64 encoding overhead (which increases file size by ~33%)
- Missing content-type header — The attachment doesn't specify the correct MIME type, causing email clients to ignore or mishandle it
- Async file generation not awaited — The PDF or report is generated asynchronously but the email sends before the file is ready
...
1. Use Buffer content instead of file paths — Pass attachment content as a Buffer instead of a file path: attachments: [{ filename: 'report.pdf', content: pdfBuffer }]
...
2. Set content-type explicitly — Always include contentType in attachments: { filename: 'report.pdf', content: buffer, contentType: 'application/pdf' }
...
3. Await file generation before sending — If generating a PDF or report, await the generation and verify the buffer is not empty before attaching
...
4. Check total message size — Calculate base64 size (file size * 1.37) and ensure total message stays under your SMTP provider's limit
...
5. Log attachment details — Before sending, log the...
## 3. Cant open PDF · Issue #24945 · zed-industries/zed
URL: https://github.com/zed-industries/zed/issues/24945
## Cant open PDF
...
### Summary
Can't open PDF in linux
Steps to trigger the problem:
open a pdf
...
Actual Behavior:
error message: stream did not contain valid UTF-8. Please try again.
...
Expected Behavior:
Open the PDF.
...
> PDF previews won't be supported until WebView support or similar way lands: https://github.com/zed-industries/zed/issues/23524#issuecomment-2610796069
>
> > error message: stream did not contain valid UTF-8. Please try again.
>
> This is bad but also related to all binary/nonstandard files opened in Zed, so not exclusive to PDF.
> Somewhat related to https://github.com/zed-industries/zed/issues/16965 but can also be fixed separately.
> The idea is to
>
> 1. make this message to appear as a notification toast, not the modal
> 2. make the message more elaborate
...
> > PDF previews won't be supported until WebView support or similar way lands: [#23524 (comment)](https://github.com/zed-industries/zed/issues/23524#issuecomment-2610796069)
> >
> > > error message: stream did not contain valid UTF-8. Please try again.
> >
> > This is bad but also related to all binary/nonstandard files opened in Zed, so not exclusive to PDF. Somewhat related to [#16965](https://github.com/zed-industries/zed/issues/16965) but can also be fixed separately. The idea is to
> >
> > 1. make this message to appear as a notification toast, not the modal
> > 2. make the message more elaborate
>
> Is it possible to configure some macro that would open *.pdf on-click in an external app, like Preview on Mac?
...
> Nice idea.
> Alas, nothing like that exists yet, but seems possible to do, as Zed is able to open URLs in the browsers already.
...
> > Is it possible to configure some macro that would open *.pdf on-click in an external app, like Preview on Mac?
>
> It basically already exists: "s"
>
> [Image: Image | https://github.com/user-attachments/assets/962651ae-e793-4558-96f8-401c4224c47b]
...
> > Is it possible to configure some macro that would open *.pdf...
## 4. PDF preview broken in file viewer after 2.1.165 — local PDFs blocked by pdf-server roots gating · Issue #66250 · anthropics/claude-code
URL: https://github.com/anthropics/claude-code/issues/66250
## PDF preview broken in file viewer after 2.1.165 — local PDFs blocked by pdf-server roots gating
...
Clicking a local PDF in the Claude Code file viewer used to render it. After updating to **2.1.165** it falls back to the text previewer:
...
> This file appears to contain binary data and cannot be previewed as text.
...
Worked in **2.1.161**. Regression in 2.1.165.
...
- Claude Code (desktop "code" mode), Windows
- claude-code: **2.1.165** (regression vs 2.1.161)
- Bundled plugin `pdf-viewer@inline` → PDF Server v1.7.2 (ext `ant.dir.gh.anthropic.pdf-server-mcp`)
...
PDF Server v1.7.2 only allows local files inside a directory present in `allowedLocalDirs`. That set is populated **only** from:
...
(a) CLI path args at launch, or
(b) MCP client `roots` via `refreshRoots()`, which is gated by `clientCapabilities.roots`.
...
In 2.1.165:
- The `pdf-viewer` MCP launches with args `["dist/index.js", "--stdio"]` — no directory arg.
- The client initializes with `capabilities: {}` — **no `roots` capability** — so `refreshRoots()` returns early and never populates `allowedLocalDirs`.
...
Result: `allowedLocalDirs` stays empty and `validateUrl()` rejects every local PDF:
...
```
[pdf-server] Local file not in allowed list: <path>\<file>.pdf
Allowed dirs:
```
...
1. Open a project folder in Claude Code 2.1.165 (Windows).
2. Click any local `.pdf` in the file viewer.
3. "binary data" message appears instead of the rendered PDF.
...
File viewer exposes the open workspace folder to the pdf-server (as a launch arg or via MCP `roots`) so clicked local PDFs render.
...
Empty allowed list → all local PDFs rejected → text-preview fallback.
...
Adding the workspace dir as a launch arg to the **Desktop extension** manifest registers it (`[pdf-server] Registered local directory: ...`) and fixes the Desktop-chat side. But the file viewer uses the built-in `pdf-viewer@inline` plugin baked into `claude.exe`, which is not user-editable — so the file-viewer path cannot be fixed from user...
## 5. "view pdf" right-click not available · Issue #2751 · James-Yu/LaTeX-Workshop
URL: https://github.com/James-Yu/LaTeX-Workshop/issues/2751
## "view pdf" right-click not available
...
How do I view a pdf file thats not generated by a .tex document. The right-click option that I read about in other threads is not available for me. But installing vscode-pdf or similar creates conflicts. Is viewing not supported anymore or is this a bug?
...
Right-clicking a pdf in the file explorer shows only these options to me:
...
And left-clicking only shows the error: "The file is not displayed in the editor because it is either binary or uses an unsupported text encoding. Do you want to open it anyway?"
...
> > And left-clicking only shows the error: "The file is not displayed in the editor because it is either binary or uses an unsupported text encoding. Do you want to open it anyway?"
>
> Just click on *Do you want to open it anyway?* and the pdf file should be rendered.
...
> Haha thanks! It did not work at first but now it started even opening pdfs just when I click them. No idea whats going on.
...
> Or actually, it is working for one file but not another. There I only see:
>
> [Image: Screen Shot 2021-06-11 at 0… (110 chars truncated)
… (2 lines truncated)
<truncation_notice>
Full output written to: /var/folders/d9/mzhyr7lx6xbf236j5ll9v_300000gn/T/devin-overflows-501/4f519298/content.txt
</truncation_notice>Very relevant! The last result (4) is about Claude Code: "PDF preview broken in file viewer after 2.1.165 — local PDFs blocked by pdf-server roots gating". This shows a known regression pattern where PDF viewer used to work but then broke due to security changes in the MCP server. The user is asking about Devin Desktop and Cursor. For Devin Desktop, since it's based on Windsurf, the issue might be similar. Let me check if there's a specific recent change or known issue. But I should be honest: I don't have access to Devin Desktop's internal code or recent changelogs, so I can only give general guidance based on what I found. The user said "they used to do this" - meaning they used to render PDFs as PDFs, not binary. So I should acknowledge that and suggest possible causes/regressions. Let me search for more on Cursor PDF viewer specifically.
{
"query": "Cursor PDF viewer broken binary file not displayed 2024 2025"
}# Web Search Results for "Cursor PDF viewer broken binary file not displayed 2024 2025" ## 1. Bug in pdf preview - Bug Reports - Cursor - Community Forum URL: https://forum.cursor.com/t/bug-in-pdf-preview/40205 pdf preview - Bug Reports - Cursor - Community Forum ... I’m using cursor for latex writing and I found a bug in the pdf preview. My device is a MacBook Pro M3. Specifically, I found I cannot zoom or enlarge the pdf through gesture operation or click operation. To exclude personal issues, I also tried to zoom pdf on the vscode and it works, so I believe it’s a bug in cursor. ... version: 0.44.11 commit: 1.93.1 date: fe574d0820377383143b2ea26aa6ae28b3425220 Electron: 2025-01-03T07:59:06.361Z ElectronBuildId: 30.5.1 Chromium: undefined Node.js: 124.0.6367.243 V8: 20.16.0 OS: 12.4.254.20-electron.0 ... No - Cursor works, but with this issue ... I have this same issue. After the update zooming out on the pdf does nothing except blur it when it gets to about 20%. ... I have the same issue on similar setup. Works in vscode. ... Same issue here with macbook pro where VSCode works for PDF viewing with the same setup. ... I think this is related with this Scrollbar issues viewing large PDFs. The problem is that the version of VS Code is not compatible with the version of Latex-workshop. ... > I was having the same problem. I think the issue is the version of LaTeX Workshop: you are using v10.7.5, which requires VS Code 1.96.0, however, your version of Cursor (0.44.11) is using VS Code 1.93.1. image A workaround that worked for me was to downgrade the version of LaTeX Workshop to v10.7.1. I guess that when Cursor updates its version of VS Code, the problem will get automatically solved and we will be able to use again the latest version of Latex Workshop. I was having the same … ## 2. Models cannot read pdf or pptx file, but it was possible before. - Bug Reports - Cursor - Community Forum URL: https://forum.cursor.com/t/models-cannot-read-pdf-or-pptx-file-but-it-was-possible-before/79412 Models cannot read pdf or pptx file, but it was possible before. - Bug Reports - Cursor - Community Forum ... # Models cannot read pdf or pptx file, but it was possible before. ... After a recent update, I added pdf and pptx to the conversation as usual, but the model kept saying that the contents of pdf or pptx could not be viewed. It seems that the intelligence of the model has been weakened. I am currently using the Pro plan. ## 3. PDFs are stale in the Cursor browser - Bug Reports - Cursor - Community Forum URL: https://forum.cursor.com/t/pdfs-are-stale-in-the-cursor-browser/160016 Cursor IDE PDF preview cache bug ... The PDFs show updated correctly when I view outside of Cursor, but inside Cursor it’s old versions i’m seeing. I already cleared the Cursor cache. I am using the Refresh button in the toolbar, and also closing the file in the Cursor browser and reopening it. The error persists. ... I work mostly with PDF files in Cursor, every once in a while suddenly none of the changes that the chat says it’s making are showing in the PDF I view in Cursor. Today I checked the PDF file outside of Cursor and what do you know, the change is there. It’s just not showing the latest updated PDF file correctly in Cursor. I already cleared my Cursor cache, but it didn’t help. ... the PDF files should show the latest updated version when I push the Refresh button in the Cursor browser, the PDF file should match in Cursor what I show when I open the PDF file outside of Cursor ... No - Cursor works, but with this issue ... This is a caching bug with the built-in PDF viewer. We’ve identified the root cause and filed it with our engineering team. ... Workaround: Click the toolbar refresh button (circular arrow icon in the browser toolbar) instead of using the keyboard shortcut. The toolbar button does a hard reload that bypasses the cache, while the keyboard shortcut does a normal reload that serves cached content. ... If that still doesn’t work in some cases, closing and reopening the PDF tab will force a completely fresh load. ... I was using the Refresh button in the toolbar, as well as closing and reopening the file in the Cursor browser. Neither solution works, which is why I must change my workflow and open the PDF outside of Cursor. I have updated my post to reflect these assumed details. ... Thanks for confirming, Miriam, and you’re right that the toolbar refresh and close/reopen don’t resolve this. ... A couple of things that should force a genuinely fresh load in the meantime: ... - Open the updated PDF under a new filename (or save a copy with a ... ## 4. Agent window file view can't display mp4 files - Bug Reports - Cursor - Community Forum URL: https://forum.cursor.com/t/agent-window-file-view-cant-display-mp4-files/157037 Agent window file view can't display mp4 files - Bug Reports - Cursor - Community Forum ... # Agent window file view can't display mp4 files ... With Cursor 3.0 Agent Window, the file viewer doesn’t display`.mp4` files I only get “Binary file is not supported” whereas if I switch to Editor Window then I can see and play the mp4 file with no problem ... in Agent Window, try opening any`.mp4` file with the file viewer interface ... `.mp4` file should display and play same as in Editor Window (VSCode mode) ... Version: 3.0.12 (Universal) ... Thanks for reporting this. The Agent Window file viewer currently supports text and image files. Video files and other binary formats aren’t handled in the file viewer yet, which is why you’re seeing the “Binary file is not supported” message. ... Workaround: You can right-click the file tab in the Agent Window and select “Open in Editor Window” — this will open the file in a full editor window where video playback works normally. ... I’ll pass along the feedback that video support in the Agent Window file viewer would be useful. ## 5. Scrollbar issues viewing large PDFs - Bug Reports - Cursor - Community Forum URL: https://forum.cursor.com/t/scrollbar-issues-viewing-large-pdfs/40625 Scrollbar issues viewing large PDFs - Bug Reports - Cursor - Community Forum ... Scrollbar issues viewing large PDFs ... - Cursor 0.44.11 - macOS Sequoia 15.2 - LaTeX Workshop v10.7.5 - LaTeX Utilities v0.4.14 ... I recently migrated from VS Code/CoPilot to Cursor. This problem is unique to Cursor as I haven’t encountered it in VS Code. ... When viewing large PDFs of LaTeX documents (40-60 pages), the entire document isn’t loaded into the viewer. This causes erratic scrollbar and synctex behavior, e.g., I have to repeatedly grab and drag the scrollbar to get to the top of the document, as though it’s newly discovering the pages above and forgetting the pages below. ... This causes problems with synctex, causing it to jump to random pages or to jump down a page every time a change is saved to the document, as it can’t actually identify the real point in the document that needs to be viewed. ... I have tried multiple viewer settings, including tab and browser. Both have the same problem. ... I am currently opening the files with a separate PDF Viewer extension which properly loads the entire file, but doesn’t support synctex. ... One is 204 KB, the other is 957 KB. ... Got the same issue on Windows: ... Version: 0.44.11 VSCode Version: 1.93.1 Commit: fe574d0820377383143b2ea26aa6ae28b3425220 Date: 2025-01-03T07:59:06.361Z Electron: 30.5.1 Chromium: 124.0.6367.243 Node.js: 20.16.0 V8: 12.4.254.20-electron.0 OS: Windows_NT x64 10.0.22631 LaTeX Workshop: v10.7.4 LaTeX Utilities: v0.4.14 ... pdf size: 1.5 MB, 60 pages ... I was having the same problem. I think the issue is the version of LaTeX Workshop: you are using v10.7.5, which requires VS Code 1.96.0, however, your version of Cursor (0.44.11) is using VS Code 1.93.1. ... A workaround that worked for me was to downgrade the version of LaTeX Workshop to v10.7.1. ... I guess that when Cursor updates its version of VS Code, the problem will get automatically solved and we will be able to use again the latest version of La...
Great, now I have very relevant info. So in Cursor, there are two "windows": 1. Agent Window (file viewer) - only supports text and images, NOT PDFs. This shows "Binary file is not supported" or binary encoding. 2. Editor Window - full editor where PDFs and videos work normally. For Cursor, the workaround is: right-click the file tab and select "Open in Editor Window". For Devin Desktop (Windsurf), the situation might be different. Let me search for Windsurf specifically on PDF viewer.
{
"query": "Windsurf Cascade PDF viewer binary not supported right click open editor window"
}# Web Search Results for "Windsurf Cascade PDF viewer binary not supported right click open editor window"
## 1. "view pdf" right-click not available · Issue #2751 · James-Yu/LaTeX-Workshop
URL: https://github.com/James-Yu/LaTeX-Workshop/issues/2751
## "view pdf" right-click not available
...
How do I view a pdf file thats not generated by a .tex document. The right-click option that I read about in other threads is not available for me. But installing vscode-pdf or similar creates conflicts. Is viewing not supported anymore or is this a bug?
...
Right-clicking a pdf in the file explorer shows only these options to me:
...
And left-clicking only shows the error: "The file is not displayed in the editor because it is either binary or uses an unsupported text encoding. Do you want to open it anyway?"
...
> > And left-clicking only shows the error: "The file is not displayed in the editor because it is either binary or uses an unsupported text encoding. Do you want to open it anyway?"
>
> Just click on *Do you want to open it anyway?* and the pdf file should be rendered.
...
> Haha thanks! It did not work at first but now it started even opening pdfs just when I click them. No idea whats going on.
...
> Or actually, it is working for one file but not another. There I only see:
>
> [Image: Screen Shot 2021-06-11 at 08 33 11 | https://user-images.githubusercontent.com/736668/121641623-b1f9bc00-ca8f-11eb-9ed7-3781a586dfdd.png]
...
> Choose the _Text Editor_ and the pdf file should be rendered properly by the extension
## 2. PDF reader MCP + Windsurf Editor: MCP Setup Guide (2026)
URL: https://www.mcpstack.org/use/pdf-reader-mcp/mcp-server/with/windsurf-editor
Step-by-step guide to integrate PDF reader MCP MCP server with Windsurf Editor. Enhanced Windsurf Editor functionality with PDF reader MCP integration.
...
When integrated with Windsurf Editor, you can:
...
- Access PDF reader MCP functionality through Windsurf Editor
...
This guide provides step-by-step instructions to set up PDF reader MCP in Windsurf Editor, including configuration, examples, and troubleshooting.
...
- All PDF reader MCP capabilities will be available for your workflows
- You can use PDF reader MCP tools directly in Windsurf Editor
- PDF reader MCP will be fully integrated and operational
...
### Step 2
...
Add server configuration:
...
```
{
"mcpServers": {
"pdf-reader-mcp": {
"command": "pdf reader mcp",
"args": []
}
}
}
...
Note: If PDF reader MCP requires environment
...
the server configuration
...
1. Restart Windsurf Editor
...
Completely quit and restart Windsurf Editor to
...
Once configured, you can use PDF reader MCP in Windsurf Editor:
...
1. Test basic PDF reader MCP functionality
2. Verify PDF reader MCP is available in the tools list
3. Launch Windsurf Editor
...
#### Tools Not Appearing
...
Symptoms: Cascade does not see new tools, Hammer icon missing
...
Cause: Configuration syntax error or server failed to start.
...
- Check Windsurf logs for MCP connection errors.
- Verify the command (e.g.,`npx`,`python`) is in your system PATH.
- Check the JSON configuration for syntax errors.
...
#### PDF reader MCP not appearing in Windsurf Editor
...
Symptoms: Server not listed, Tools not available
...
Cause: Configuration or installation issue
...
- Check logs for error messages
- Restart Windsurf Editor
- Check PDF reader MCP installation
- Verify configuration syntax
## 3. Common Devin Desktop Issues - Devin Docs
URL: https://docs.windsurf.com/troubleshooting/windsurf-common-issues
> Troubleshoot
...
Devin Desktop Editor issues including rate limiting, MacOS security warnings, Windows updates, Linux crashes,
...
terminal problems.
...
### On MacOS, I see a pop-up: 'Devin Desktop' is damaged and cannot be opened.
...
This pop-up is due to a false positive in MacOS security features. You can usually resolve this by going to "System Settings -> Privacy & Security" and clicking "Allow" or "Open anyway" for Devin Desktop. If this fails or is not possible, try the following steps:
...
### I received an error message saying 'Devin Desktop failed to start'
...
Warning: deleting these folders will
...
your conversation history and local settings!
...
Delete the following folder:
...
Windows: `C:\Users\\.codeium\windsurf\cascade`
...
Linux/Mac: `~/.codeium/windsurf/cascade`
...
and try restarting the IDE.
...
### My Cascade panel goes blank
...
Please reach out to us if this happens! A screen recording would be much appreciated. This can often be solved by clearing your chat history (`~/.codeium/windsurf/cascade`).
...
### Terminal session appears stuck in
## 4. Add Windsurf to "Open in" menu on Windows (win32Detect not defined) · Issue #13775 · openai/codex
URL: https://github.com/openai/codex/issues/13775
## Add Windsurf to "Open in" menu on Windows (win32Detect not defined)
...
Windsurf does not appear in the **"Open in"** menu on Windows, even though:
- `windsurf` is installed and available in PATH
- `windsurf --version` works correctly
- The app already includes `windsurf.png` in `webview/apps/`
- Windsurf **does** appear on macOS
...
In the bundled `app.asar` → `.vite/build/main.js`, the Windsurf editor definition only has `darwinDetect`
but is missing `win32Detect`:
...
```js
// Current (broken on Windows)
x8 = A3({
id: `windsurf`,
label: `Windsurf`,
icon: `apps/windsurf.png`,
darwinDetect: () => C3([`/Applications/Windsurf.app/Contents/Resources/app/bin/windsurf`])
});
```
...
Compare with Cursor and VS Code, which both include `win32Detect`:
...
```js
// Cursor — works on Windows
T6 = A3({
id: `cursor`,
label: `Cursor`,
icon: `apps/cursor.png`,
darwinDetect: () => E6()?.electronBin ?? null,
win32Detect: D6, // ← this is what Windsurf is missing
...
});
```
...
### Suggested fix
...
Add `win32Detect` to the Windsurf definition, following the same pattern as VS Code (`_8`) which uses `t6`:
...
```js
x8 = A3({
id: `windsurf`,
label: `Windsurf`,
icon: `apps/windsurf.png`,
darwinDetect: () => C3([`/Applications/Windsurf.app/Contents/Resources/app/bin/windsurf`]),
win32Detect: () => t6({
pathCommand: B3(`windsurf`),
executableName: `Windsurf.exe`,
installDirName: `Windsurf`
})
});
```
...
This correctly detects Windsurf via PATH (`windsurf.cmd`) and resolves to `Windsurf.exe` in the installation
directory.
...
1. Install Windsurf on Windows (ensure `windsurf` is in PATH)
2. Open Codex Desktop
3. Open a task/conversation with a workspace
4. Click the **"Open in"** menu
5. Windsurf is **not listed** — only Cursor, Terminal, Git Bash, WSL, etc.
...
Windsurf should appear in the "Open in" menu on Windows, just like it does on macOS.
## 5. Windsurf - Cascade
URL: https://docs.devin.ai/windsurf/plugins/cascade/cascade-overview
Windsurf'
...
coding to the JetBrains suite.
To open Cascade, press `Cmd/Ctrl+L` or click the Cascade icon.
...
If you'd like Cascade to ignore files, you can add your files to `.codeiumignore` at the root of your workspace. This will prevent Cascade from viewing, editing or creating files inside of the paths designated. You can declare the file paths in a format similar to `.gitignore`.
I don't have specific evidence of Windsurf/Devin Desktop PDF regression. Let me search for the Windsurf common issues page more specifically, or for "PDF" in the docs. But I already looked at the docs and didn't find much. Let me give the user a helpful answer that acknowledges their experience, provides the known Cursor workaround, and suggests things to try for Devin Desktop. I should be honest that this may be a regression and suggest reporting it. Actually, let me search for the specific issue in Devin Docs / Windsurf docs about PDFs.
{
"url": "https://docs.windsurf.com/troubleshooting/windsurf-common-issues"
}# Web Content from https://docs.windsurf.com/troubleshooting/windsurf-common-issues
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Common Devin Desktop Issues
> Troubleshoot common Devin Desktop Editor issues including rate limiting, MacOS security warnings, Windows updates, Linux crashes, and terminal problems.
### General FAQ
<AccordionGroup>
<Accordion title="I subscribed to Pro so why am I stuck on the Free tier?">
First, give it a few minutes to update. If that doesn't work, try logging out of Devin Desktop on the website, restarting your IDE, and logging back into Devin Desktop. Additionally, please make sure you have the latest version of Devin Desktop installed.
</Accordion>
<Accordion title="How do I cancel my Pro/Teams subscription?">
You can cancel your paid plan by going to your Profile by clicking your icon on the top right of the [Devin Desktop website](https://windsurf.com/profile).
To cancel your Pro subscription, navigate to the `Billing` page in the navigation panel on the left and click "Cancel Plan".
To cancel your Teams subscription, navigate to the `Manage Team` page in the navigation panel on the left and click "Cancel Plan".
</Accordion>
<Accordion title="How do I disable code snippet telemetry?">
As mentioned on our [security page](/admin/security#how-is-your-data-used-to-improve-devin), you can opt out of code snippet telemetry by going to your [account settings](https://windsurf.com/settings). For more information, please visit our [Terms of Service](https://windsurf.com/terms-of-service-individual).
</Accordion>
<Accordion title="How do I delete my account?">
Reach out to [support](https://windsurf.com/support/) to delete your account.
</Accordion>
<Accordion title="How do I request a feature?">
You can share feature requests and feedback through our community channels:
[Reddit](https://www.reddit.com/r/windsurf/), [Discord](https://discord.com/invite/3XFf78nAx5), or [Twitter/X](https://x.com/windsurf).
You can also reach out to us via our [support platform](https://windsurf.com/support/).
</Accordion>
</AccordionGroup>
### I'm experiencing rate limiting issues
We're subject to rate limits and unfortunately sometimes hit capacity for the premium models we work with. We are actively working on getting these limits increased and fairly distributing the capacity that we have!
This should not be an issue forever. If you get this error, please wait a few moments and try again.
### Pylance or Pyright isn't working / Python syntax highlighting is broken or subpar
We've gone ahead and developed a [Pyright extension specifically for Devin Desktop](/desktop/advanced#windsurf-extensions). Please search for "Windsurf Pyright" or paste `@id:codeium.windsurfPyright` into the extension search.
### How do I download Diagnostic logs to send to the Devin Desktop support team?
You can download diagnostic logs by going to your Cascade Panel, tapping the three dots in the top right corner, and then clicking "Download Diagnostics".
<Frame style={{ border: 'none', background: 'none' }}>
<img src="https://mintcdn.com/cognitionai/WE51TvKjsiyk1ZHl/desktop/assets/windsurf/windsurf-download-diagnostics.png?fit=max&auto=format&n=WE51TvKjsiyk1ZHl&q=85&s=dc7a5b0e63ef1fcefee74c8e052a0adc" width="806" height="612" data-path="desktop/assets/windsurf/windsurf-download-diagnostics.png" />
</Frame>
### On MacOS, I see a pop-up: 'Devin Desktop' is damaged and cannot be opened.
This pop-up is due to a false positive in MacOS security features. You can usually resolve this by going to "System Settings -> Privacy & Security" and clicking "Allow" or "Open anyway" for Devin Desktop. If this fails or is not possible, try the following steps:
1. Ensure that Devin Desktop is placed under your `/Applications` folder and that you are running it from there.
2. Check your processor type: if your Mac has an Intel chip, make sure you have the Intel version. If it's Apple Silicon (like M1, M2 or M3), make sure you have the Apple Silicon version. You can select the processor type from the [Mac download page](https://windsurf.com/windsurf/download_mac).
3. Try redownloading the DMG and reinstalling from [the official download page](https://windsurf.com/windsurf/download_mac), as the failing security feature is usually triggered on download.
4. Make sure Devin Desktop (and the "Devin Desktop is Damaged" pop-up) is closed, and run `xattr -c "/Applications/Devin.app/"`.
### I received an error message about updates on Windows, or updates are not appearing on Windows.
For example:
> Updates are disabled because you are running the user-scope installation of Devin Desktop as Administrator.
We cannot auto-update Devin Desktop when it is run as Administrator. Please re-run Devin Desktop with User scope to update.
### On macOS, Remote SSH fails with "Undefined error: 0" but SSH works from Terminal
If Remote SSH in Devin Desktop fails immediately while the same SSH connection works from Terminal, VS Code, or other applications, this is usually caused by macOS blocking Devin Desktop's local network access.
In the Remote - SSH output log (View → Output → Remote - SSH), you will see:
```
debug1: Connecting to <hostname> port 22.
ssh: connect to host <hostname> port 22: Undefined error: 0
```
followed by `SSH server closed unexpectedly. Error code: 255`.
The `Undefined error: 0` message (rather than "Connection refused" or "Network unreachable") is the key indicator — this is the error macOS returns when an application is not granted Local Network permission under Privacy & Security.
To fix this:
1. Open **System Settings → Privacy & Security → Local Network**.
2. Find **Devin Desktop** in the list and **enable** the toggle.
3. Restart Devin Desktop and retry the connection.
If Devin Desktop does not appear in the Local Network list, try initiating an SSH connection from Devin Desktop first to trigger the macOS permission prompt. If the prompt was previously dismissed and the toggle does not appear, deleting and reinstalling Devin Desktop will re-trigger the prompt on next launch.
### What domains should I whitelist for network filters/firewalls, VPNs, or proxies?
If you're using any network filtering, firewalls, VPN services, or working in environments with restricted network access, you may experience connectivity issues with Devin Desktop. To ensure smooth operation, please whitelist the following domains in your network configuration:
* \*.codeium.com
* \*.windsurf.com
* \*.codeiumdata.com
### On Linux, Devin Desktop quietly doesn't launch, or crashes on launch
This is usually due to an Electron permissions issue, which VSCode also has, and is expected when using the tarball on Linux.
The easiest way to fix it is to run the following:
```bash theme={null}
sudo chown root:root /path/to/windsurf/chrome-sandbox
sudo chmod 4755 /path/to/windsurf/chrome-sandbox
```
You should then be able to launch Devin Desktop. You can also just run `windsurf` with the flag `--no-sandbox`, though we don't encourage this.
If this fails, then try the below.
### I received an error message saying 'Devin Desktop failed to start'
<Warning>Warning: deleting these folders will remove your conversation history and local settings!</Warning>
Delete the following folder:
Windows: `C:\Users\<YOUR_USERNAME>\.codeium\windsurf\cascade`
Linux/Mac: `~/.codeium/windsurf/cascade`
and try restarting the IDE.
### My Cascade panel goes blank
Please reach out to us if this happens! A screen recording would be much appreciated. This can often be solved by clearing your chat history (`~/.codeium/windsurf/cascade`).
### Terminal session appears stuck in Cascade
If a terminal command has finished running in the terminal but Cascade still shows the session as in progress or stuck, this can be caused by several issues:
**Default terminal profile not set**
This may be caused by the default terminal profile not being explicitly set. To resolve this, you can set the default terminal profile in your Editor settings.
Open the Settings UI (Cmd/Ctrl + ,), search for "terminal default profile", and set the appropriate value for your operating system. Alternatively, you can add the following to your `settings.json`:
For macOS:
```json theme={null}
"terminal.integrated.defaultProfile.osx": "zsh"
```
For Windows:
```json theme={null}
"terminal.integrated.defaultProfile.windows": "PowerShell"
```
For Linux:
```json theme={null}
"terminal.integrated.defaultProfile.linux": "bash"
```
Replace the value with your preferred shell (e.g., `bash`, `zsh`, `PowerShell`, `Command Prompt`, etc.).
**Customized zsh themes**
In some cases, a heavily customized zsh theme (for example, themes from Oh My Zsh, Powerlevel10k, or other prompt frameworks) can also cause Cascade to think a command is still running even after it finishes. To check if this is the issue:
1. Open your `~/.zshrc` file in a text editor.
2. Temporarily disable your theme by commenting out lines that set or load it, such as `ZSH_THEME="..."`, `source ~/.p10k.zsh`, or `eval "$(oh-my-posh init zsh)"`.
3. Save the file, restart Devin Desktop (or open a new terminal in Devin Desktop), and run a command again.
If the terminal session no longer appears stuck in Cascade, you can either keep a simpler theme in `~/.zshrc`, or create a separate, minimal zsh configuration used only by the Devin Desktop terminal so your other terminals can continue using the more complex theme.
**Systemd terminal context tracking (Linux)**
On some newer Linux distributions (reported on Fedora 43 and later), the shell startup chain (`~/.bashrc` → `/etc/bashrc` → `/etc/profile.d/80-systemd-osc-context.sh`) can enable systemd "terminal context tracking," which emits OSC 3008 escape sequences via `PS0` or `PROMPT_C… (231 chars truncated)
… (6 lines truncated)
<truncation_notice>
Full output written to: /var/folders/d9/mzhyr7lx6xbf236j5ll9v_300000gn/T/devin-overflows-501/19754e6b/content.txt
</truncation_notice>The docs don't mention PDF issues specifically. The user mentioned that PDFs used to open as PDFs in both Devin Desktop and Cursor. Now they open as binary encodings. This is likely because: 1. Cursor: In the Agent Window (file viewer), PDFs are not supported - only text and images. But in the Editor Window, PDFs do work. The user may be using Agent Window and seeing binary. 2. Devin Desktop: Similar situation - there might be a workspace viewer or Cascade panel that shows files, and it might not support PDFs. Or it could be a regression. Since the user is asking "can you get pdfs to open as pdfs rather than the binary encodings?" - they want to know if it's possible. I should give them actionable advice and be honest about what I can confirm. Let me also check if there's a skill or any relevant Windsurf config. But I think I've gathered enough. I should also note that for the AI agent (like me in terminal), PDFs are inherently text/binary when read via tools - but the user is asking about the IDE UI, not the agent's reading. Now I should answer. Given the user's statement "they used to do this", I should acknowledge this. Let me search a bit more specifically for Devin Desktop / Windsurf workspace file viewer PDF support.
{
"query": "Windsurf file viewer PDF binary not supported workspace display 2025"
}# Web Search Results for "Windsurf file viewer PDF binary not supported workspace display 2025"
## 1. PDF preview broken in file viewer after 2.1.165 — local PDFs blocked by pdf-server roots gating · Issue #66250 · anthropics/claude-code
URL: https://github.com/anthropics/claude-code/issues/66250
## PDF preview broken in file viewer after 2.1.165 — local PDFs blocked by pdf-server roots gating
...
Clicking a local PDF in the Claude Code file viewer used to render it. After updating to **2.1.165** it falls back to the text previewer:
...
> This file appears to contain binary data and cannot be previewed as text.
...
Worked in **2.1.161**. Regression in 2.1.165.
...
- Claude Code (desktop "code" mode), Windows
- claude-code: **2.1.165** (regression vs 2.1.161)
- Bundled plugin `pdf-viewer@inline` → PDF Server v1.7.2 (ext `ant.dir.gh.anthropic.pdf-server-mcp`)
...
PDF Server v1.7.2 only allows local files inside a directory present in `allowedLocalDirs`. That set is populated **only** from:
...
(a) CLI path args at launch, or
(b) MCP client `roots` via `refreshRoots()`, which is gated by `clientCapabilities.roots`.
...
In 2.1.165:
- The `pdf-viewer` MCP launches with args `["dist/index.js", "--stdio"]` — no directory arg.
- The client initializes with `capabilities: {}` — **no `roots` capability** — so `refreshRoots()` returns early and never populates `allowedLocalDirs`.
...
Result: `allowedLocalDirs` stays empty and `validateUrl()` rejects every local PDF:
...
```
[pdf-server] Local file not in allowed list: <path>\<file>.pdf
Allowed dirs:
```
...
1. Open a project folder in Claude Code 2.1.165 (Windows).
2. Click any local `.pdf` in the file viewer.
3. "binary data" message appears instead of the rendered PDF.
...
File viewer exposes the open workspace folder to the pdf-server (as a launch arg or via MCP `roots`) so clicked local PDFs render.
...
Empty allowed list → all local PDFs rejected → text-preview fallback.
...
Adding the workspace dir as a launch arg to the **Desktop extension** manifest registers it (`[pdf-server] Registered local directory: ...`) and fixes the Desktop-chat side. But the file viewer uses the built-in `pdf-viewer@inline` plugin baked into `claude.exe`, which is not user-editable — so the file-viewer path cannot be fixed from user...
## 2. "view pdf" right-click not available · Issue #2751 · James-Yu/LaTeX-Workshop
URL: https://github.com/James-Yu/LaTeX-Workshop/issues/2751
## "view pdf" right-click not available
...
How do I view a pdf file thats not generated by a .tex document. The right-click option that I read about in other threads is not available for me. But installing vscode-pdf or similar creates conflicts. Is viewing not supported anymore or is this a bug?
...
Right-clicking a pdf in the file explorer shows only these options to me:
...
And left-clicking only shows the error: "The file is not displayed in the editor because it is either binary or uses an unsupported text encoding. Do you want to open it anyway?"
...
> > And left-clicking only shows the error: "The file is not displayed in the editor because it is either binary or uses an unsupported text encoding. Do you want to open it anyway?"
>
> Just click on *Do you want to open it anyway?* and the pdf file should be rendered.
...
> Haha thanks! It did not work at first but now it started even opening pdfs just when I click them. No idea whats going on.
...
> Or actually, it is working for one file but not another. There I only see:
>
> [Image: Screen Shot 2021-06-11 at 08 33 11 | https://user-images.githubusercontent.com/736668/121641623-b1f9bc00-ca8f-11eb-9ed7-3781a586dfdd.png]
...
> Choose the _Text Editor_ and the pdf file should be rendered properly by the extension
## 3. PDF reader MCP + Windsurf Editor: MCP Setup Guide (2026)
URL: https://www.mcpstack.org/use/pdf-reader-mcp/mcp-server/with/windsurf-editor
Step-by-step guide to integrate PDF reader MCP MCP server with Windsurf Editor. Enhanced Windsurf Editor functionality with PDF reader MCP integration.
...
PDF reader MCP is a MCP server that MCP server to read and search text in a local PDF file..
...
When integrated with Windsurf Editor, you can:
...
- Access PDF reader MCP functionality through Windsurf Editor
...
This guide provides step-by-step instructions to set up PDF reader MCP in Windsurf Editor, including configuration, examples, and troubleshooting.
...
- All PDF reader MCP capabilities will be available for your workflows
- You can use PDF reader MCP tools directly in Windsurf Editor
- PDF reader MCP will be fully integrated and operational
...
- Compatible operating system (Desktop App)
- Windsurf Editor installed and configured
...
### Step 1: Install PDF reader MCP
...
### Step 2: Configure Windsurf Editor
...
Locate your configuration file:
...
- Linux:`~/.codeium/windsurf/mcp_config.json`
- macOS:`~/.codeium/windsurf/mcp_config.json`
- Windows:`%USERPROFILE%\.codeium\windsurf\mcp_config.json`
...
Add server configuration:
...
```
{
"mcpServers": {
"pdf-reader-mcp": {
"command": "pdf reader mcp",
"args": []
}
}
}
...
Note: If PDF reader MCP requires environment variables, add them to the server configuration:
"env": {
}
```
...
1. Restart Windsurf Editor
...
Completely quit and restart Windsurf Editor to load the new configuration.
...
Once configured, you can use PDF reader MCP in Windsurf Editor:
...
1. Test basic PDF reader MCP functionality
2. Verify PDF reader MCP is available in the tools list
3. Launch Windsurf Editor
...
#### Tools Not Appearing
...
Symptoms: Cascade does not see new tools, Hammer icon missing
...
Cause: Configuration syntax error or server failed to start.
...
- Check Windsurf logs for MCP connection errors.
- Verify the command (e.g.,`npx`,`python`) is in your system PATH.
- Check the JSON configuration for syntax errors.
...
#### PDF reader MCP...
## 4. a97c3fa SHOG-591: broaden IDE file-open coverage (pdf / audio / video / fonts / text edge cases)
URL: https://github.com/shogo-labs/shogo-ai/commit/a97c3fada0ebcb6bc820f0578b97685f68478384
Follow-up to the SQLite preview commit. Audit of every file type the IDE
currently refuses to open and the user-facing error paths around them.
...
apps/mobile/components/project/panels/ide/workspace/localFs.ts
- TEXT_EXT grew from 27 → ~110 entries (.log, .csv, .xml, .ini, .conf,
.lock, .sql, .c/.cpp/.h, .kt, .swift, .php, .lua, .dart, .tf, .gql,
.proto, .gradle, .dockerignore, .editorconfig, …). Plain-text files
were being refused as 'Binary file not supported' purely because the
extension wasn't in the allow-list.
- LANG map expanded to match so Monaco picks sensible syntax for the
new extensions.
- Size cap 2MB → 10MB. The old cap rejected our own generated route
bundles. New error message reports actual size: 'File too large to
open in editor (4.7 MB, max 10 MB).'
- Added a deny-list (BINARY_EXT) + an 8KB byte sniff (looksLikeText)
for unknown extensions, so .dat / .pyc / random fixture files get a
real classification instead of either-or guessing.
- Dotfile / no-extension matcher learned AUTHORS / CONTRIBUTING /
NOTICE / COPYING / TODO / HEARTBEAT / AGENTS / TOOLS / MEMORY.
...
apps/mobile/components/project/panels/ide/Workbench.tsx
- Replaced ad-hoc isImage / isSqlite chain with a single
previewLanguageFor(path) resolver returning
'image' | 'sqlite' | 'pdf' | 'audio' | 'video' | 'font' | null.
- One unified open-as-URL branch instead of two parallel ones.
- BINARY_EXTENSIONS slimmed: pdf, mp3, mp4, wav, m4a, ogg, flac, aac,
...
mov, webm, mkv, avi, m4v, woff, woff2, ttf, otf, eot, heic, tiff,
tif removed because each now has a viewer. Kept genuine 'no viewer'
extensions (archives, native binaries, design files, .pyc).
- On-close blob: revoke now keyed off PREVIEW_LANGUAGES set, so any
new viewer added in the future is one-line safe.
...
apps/mobile/components/project/panels/ide/MediaPreview.tsx (new)
- PdfPreview: — uses the browser's native PDF
viewer.
- AudioPreview: for mp3, wav, ogg, oga, flac, m4a,
aac, opus.
- VideoPreview:...
## 5. Common Devin Desktop Issues - Devin Docs
URL: https://docs.windsurf.com/troubleshooting/windsurf-common-issues
> ## Documentation Index
>
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.
...
# Common Devin Desktop Issues
...
> Troubleshoot common Devin Desktop Editor issues including rate limiting, MacOS security warnings, Windows updates, Linux crashes, and terminal problems.
...
### On Linux,