We are excited to ship Cursor 1.7, a release focused on smoother Agent flow, smarter inputs, and clearer visibility into what your Agents are doing.
Highlights
Hooks
Use a simple hooks.json to apply custom logic to your Agent’s behavior and output.
Great for adding counters to Agent‑written code, redacting or filtering output, and fine‑grained auto‑run permissions. Think of Hooks as “behavior shapers”, while Rules remain a way to add context.
Agent input autocomplete
The Agent now autocompletes files, methods, and variables based on the context you’ve provided. Small boost, big flowstate improvement.
Image parsing in chat and tools
Agents can now parse images directly via the read_file tool, not just when copy‑pasted.
Easier multimodal debugging and explanation workflows.
Share prompts with deep links
Create a link that opens a prompt directly in Cursor. Perfect for sharing common prompts and team workflows.
Menubar Agent monitor
Keep an eye on running Agents from the system menubar. Quick status checks without leaving your flow.
Quality of life and fixes
Clearer chat context when you paste code from files or the terminal
Correct PowerShell handling for Windows users
Workspace trust confirmation is now consistently enforced
Why this matters
Cursor 1.7 tightens the loop between “describe” and “ship”. Hooks give you precise control when it counts, autocomplete reduces friction in high‑context moments, and deep links make it simple to standardize great prompts across your projects. Add in a glanceable Agent monitor and better multimodal support, and daily Agent work just feels snappier.
If you try Hooks or deep‑linking prompts, we would love to hear what workflows they unlock for you.
I really think the afterFileEdit hook should also support output just like other hooks // Output { “permission”: “allow” | “deny” | “ask”, “userMessage”: “”, “agentMessage”: “” }
I was excited to use it to automatically feed in c# compiler errors after file modification but then i saw I can’t do that and now the whole hooks system feels anemic, it’s currently just for restricting file edits with extra rules, which you can already do with existing .cursorignore. I understand you probably rolled this out conservatively for now due to safety concerns but this is not the play imo, other coding agents have it and people will just look at hooks and be disappointed when they find out how limited they are. Add output to afterFileEdit.
I’m still on 1.2.4 because it has worked ok. I’m generally afraid to upgrade because I can’t afford to interrupt my workflow. Has anyone had success with 1.7 or are the bugs/breaks enough to wait for a newer version?
Hi do you need output on the afterFileEdit hook, or would it be enough to allow the stop hook to return a followup message. I think it would actually be more ergonomic that way as newer models often make many very small changes to a file, you’d be injecting compile errors into the loop before its even finished doing what it was trying to do
I’ve experimented with this in other agents and it seems fine. I think if anything you should add support for both the “afterFileEdit” and “stop” hooks, otherwise you’re going to be getting user requests to add it to the one that lacks it forever. It also would make existing hooks people made for other agents much easier to port
That’s great, but it currently works only at the level of completing file names and method names.
I’d like to see autocomplete that actually helps write common prompt patterns.
This could be based on parts of the chat context, rules, and hint-like hooks that the autocomplete system could read and apply automatically.
Is there any planned development for improving agent autocomplete?
The automatically moving to the next change after pressing “Keep” was brought back, after it was disabled. I am in version 1.7.39
Often I will make some changes to a section of code while reviewing the diff and pressing “Keep” as I go along. Even if I make a change in some other part of the file while reviewing the changes, it will mark my change as a diff that needs to be accepted (“Keep”), since I just made the change I will press “Keep” but then it jumps me to another area of the file while I still wanted to review this area of code. This is completely unnecessary when there is already UI for going to the next diff. Please make this an optional setting. It basically requires me to accept all diffs, then start making my own changes, but then I lose track of what had changed and where I should be inspecting the code.
If Cursor wants to become a hands off tool, then people should just use the “Keep All” button. There is no benefit to remove the granular ability to intimately accept certain changes while making your changes when reviewing code. This is Cursor’s strength compared to competitors. Cursor allows you to still program without getting in the way, but this change is getting in the way of normal code review and updating behavior.
I see the advantage of having it jump to the next diff on accepting, but I think it should be a choice. I think I would prefer it sometimes based on if I intend to review more deeply the surrounding code.
Maybe if we press some modifier like Ctrl it could change the label behavior on click. Like from “Keep and Next” to “Keep” or “Keep and Stay”.
The general intelligence of the Gemini 2.5 PRo model worsened. I can’t describe it and provide reproduction steps, as I can’t go back to previous versions of the cursor, but the results for Gemini 2.5 PRO, which was my go-to model for the last 2 months, became much worse.
The model is losing the context, not fulfilling all the requirements from the prompt, cuts off more often, plans the work sometimes, but fails to execute the plan. And the overall code results that are based on the same prompt techniques and a very detailed context provided from my end are just noticeably worse.
The things that 2.5 PRO delivered in a one-shot detailed prompt previously now require me to iterate 5-6 times and guide the model to accomplish the task. Frustrating, I will probably stop updating the cursor after Gemini 2.5PRO gets fixed back to what it was.