# Claude Code Plugin with HLS Support

**URL:** <https://discourse.haskell.org/t/claude-code-plugin-with-hls-support/13480>\
**Category:** Announcements\
**Created:** [January 2, 2026, 4:03am UTC](https://discourse.haskell.org/t/claude-code-plugin-with-hls-support/13480 "2026-01-02T04:03:32Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![m4dc4p](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/m4dc4p/32/1172_2.png) [@m4dc4p](https://discourse.haskell.org/u/m4dc4p)\
**Post date:** [January 2, 2026, 4:03am UTC](https://discourse.haskell.org/t/claude-code-plugin-with-hls-support/13480/1 "2026-01-02T04:03:32Z")

</div>

Claude Code got the ability to work with [LSPs directly just recently](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md#2074). That means Claude can get precise type information, find usages of symbols, and all the other great things we get from HLS.

I created a plugin to take advantage of this new functionality. Check it out at [GitHub - m4dc4p/claude-hls](https://github.com/m4dc4p/claude-hls) (installation instructions are available there).

Feedback & comments welcome! Enjoy!

---

<div class="post-metadata">

**Author:** ![srid](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/srid/32/5514_2.png) [@srid](https://discourse.haskell.org/u/srid)\
**Post date:** [January 2, 2026, 1:52pm UTC](https://discourse.haskell.org/t/claude-code-plugin-with-hls-support/13480/2 "2026-01-02T13:52:21Z")

</div>

How does it work? Does the plugin start the HLS server on its own? Asking because I use Nix to manage my development environment, so whenever `.cabal` file gets updated, a restart of Nix shell is often necessary before restarting HLS.

As an aside, I’ve been [using ghcid](https://github.com/srid/AI/blob/master/skills/haskell/SKILL.md#build-instructions) to provide quick feedback to Claude Code.

---

<div class="post-metadata">

**Author:** ![m4dc4p](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/m4dc4p/32/1172_2.png) [@m4dc4p](https://discourse.haskell.org/u/m4dc4p)\
**Post date:** [January 2, 2026, 4:41pm UTC](https://discourse.haskell.org/t/claude-code-plugin-with-hls-support/13480/3 "2026-01-02T16:41:16Z")

</div>

Claude code starts HLS but I don’t think it’s smart enough to restart it. As for nix, you have to have HLS on the path before starting claude so you’d also have to restart the nix shell yourself.

I use GHCId myself mostly. I think this plugin isn’t so great for compilation errors, but rather for precise types (“hover”) and export info (“document symbols”).

---

<div class="post-metadata">

**Author:** ![mchav](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/mchav/32/5143_2.png) [@mchav](https://discourse.haskell.org/u/mchav)\
**Post date:** [January 3, 2026, 12:21pm UTC](https://discourse.haskell.org/t/claude-code-plugin-with-hls-support/13480/4 "2026-01-03T12:21:23Z")

</div>

Just checked it out. Pretty cool! Noticed you pulled in dataframe for testing - what sort of tests are you running?

---

<div class="post-metadata">

**Author:** ![m4dc4p](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/m4dc4p/32/1172_2.png) [@m4dc4p](https://discourse.haskell.org/u/m4dc4p)\
**Post date:** [January 3, 2026, 6:26pm UTC](https://discourse.haskell.org/t/claude-code-plugin-with-hls-support/13480/5 "2026-01-03T18:26:11Z")

</div>

It’s just needed a recently maintained library to test HLS operations. Nothing specific to data frame but thanks for providing it!

---

<div class="post-metadata">

**Author:** ![mimi1vx](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/mimi1vx/32/5053_2.png) [@mimi1vx](https://discourse.haskell.org/u/mimi1vx)\
**Post date:** [January 10, 2026, 11:41am UTC](https://discourse.haskell.org/t/claude-code-plugin-with-hls-support/13480/6 "2026-01-10T11:41:12Z")

</div>

opencode ( [https://opencode.ai](https://opencode.ai)) has pretty good lsp support and its easy to configure it to use HLS and any formatter needed

---

<div class="post-metadata">

**Author:** ![nh2](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/nh2/32/59_2.png) [@nh2](https://discourse.haskell.org/u/nh2)\
**Post date:** [January 11, 2026, 3:49pm UTC](https://discourse.haskell.org/t/claude-code-plugin-with-hls-support/13480/7 "2026-01-11T15:49:58Z")

</div>

Hi, I’m curious whether there’s added benefits of such a thing when the AI tooling is already integrated into the editor (e.g. Roocode in vscode, which can automatically read the “Problems” panel, which is populated by HLS). Thanks for the info!
