ClickIt is a Path of Exile automation plugin for the ExileCore / ExileAPI ecosystem.
It can automatically click visible labels such as items, chests, shrines, strongboxes, essences, and other supported mechanics.
It can also make altar decisions based on your configured settings and weights, and includes debug overlays and diagnostics to help inspect its behavior.
- Install ExileAPI: https://www.ownedcore.com/forums/mmo/path-of-exile/poe-bots-programs/1000594-exileapi-3-23-beyond-plugin-framework.html
- Download the latest ClickIt release: https://github.com/Barragek0/ClickIt/releases/latest
- Copy
ClickIt.dlltoExileAPI/Plugins/Compiled/ClickIt. - Launch ExileAPI.
- Hold
F1(default) to enable clicking.
Recommended first settings:
- Search Radius:
100for 1080p (adjust for your resolution) - Click Frequency Target: start around
80 - Lazy Mode: leave it off until the basic behavior looks right
At a high level, ClickIt works like this:
- Read the current game and UI state.
- Collect visible labels and mechanic context.
- Filter out things that are unsafe, invalid, or not worth clicking.
- Rank the remaining candidates.
- Click only when the target passes the final safety checks.
A few design rules show up all over the codebase:
- safety first
- cached snapshots for hot paths
- domain logic lives in feature owners, not random helpers
- debug tooling stays separate from runtime decision logic
The repo structure changed a lot. The current layout is centered around clear owners instead of broad Services/ and Utils/ buckets.
Host-facing plugin surfaces, lifecycle, composition, runtime hosts, and settings composition.
Important entry surfaces:
Core/ClickIt.csCore/PluginContext.csCore/Bootstrap/PluginCompositionBootstrapper.cs
Real domain behavior lives here.
Current feature owners include:
Features/Click/for click automationFeatures/Labels/for label filtering, classification, selection, and inventory logicFeatures/Altars/Features/Area/Features/Essence/Features/Mechanics/Features/Observability/Features/Pathfinding/Features/Shrines/
Two important ports:
Features/Click/ClickAutomationPort.csFeatures/Labels/LabelFilterPort.cs
Cross-domain helpers that are not owned by one feature.
Main shared areas:
Shared/Diagnostics/Shared/Game/Shared/Input/Shared/Math/
Everything visual belongs here: overlays, debug UI, introspection, and settings panels.
Main UI areas:
UI/Debug/UI/Overlays/UI/Settings/
Tests mirror the runtime ownership as closely as practical.
That means tests generally live under the matching subtree instead of broad buckets.
- Rename
.vscode/tasks.sample.jsonto.vscode/tasks.jsonand modify the file appropriately for your environment.
Use the default build task:
Build and Test
That runs the repo's normal loop in order:
- build the solution
- run the test project
- copy the compiled DLL into the local plugin folder
Run tests:
dotnet test Tests\ClickIt.Tests.csproj -c Debug -p:IncludeIntegrationTests=trueThe VS Code tasks, coverage flow, and CI now start Tests/Scripts/memory-guard.ps1 as a hidden sidecar monitor. The tests still run as normal dotnet test, but if combined testhost* memory crosses the configured ceiling the sidecar kills the host, writes a temporary trip file, and the caller reports that memory failure after the test command returns. Override the default 2048 MB limit with CLICKIT_TEST_MEMORY_THRESHOLD_MB when you need a different local threshold.
Build the solution with an explicit ExileCore package path:
msbuild ClickIt.sln /p:Configuration=Debug /p:exapiPackage="C:\Path\To\PoeHelper\net48\"If exapiPackage is not set, the project also has a local fallback path for development.
The repo does not require ThirdParty/Decompiled/ or .scripts/ThirdPartyDecompiler/ to build. Those are local-only decompile artifacts; the tracked projects skip that refresh path automatically when those files are absent, so a GitHub zip still builds cleanly.
The workspace coverage flow is:
Review Coverage
Coverage output is written under Tests/TestResults/.
If you are working on tests, Tests/README.md has the repo's testing conventions and local coverage notes.
- Make sure the plugin actually loaded in ExileAPI.
- Confirm you are holding the correct hotkey.
- Check whether the target labels are visible and clickable in game.
- Disable
Left-handedin the settings. This should only be used if you're left-handed and using a left-handed mouse which inverts left-click and right-click functionality. - Turn on debug settings and confirm the overlay boxes line up with the UI elements.
- Adjust
Chest Height Offset.
- Lower
Search Radius. - Increase the click frequency target only after the search area looks sane.
- Use the debug overlay before changing lots of settings at once.
Keep it practical:
- Prefer merge-first changes inside the existing owner.
- Do not add wrappers just to preserve an old shape.
- Keep feature logic in
Features/, shared helpers inShared/, and UI code inUI/. - Update tests when behavior changes.
- If you move folders or namespaces, update
.github/project-structure.mdtoo.
Testing rule:
- keep test helpers, reflection helpers, and test-only setup inside
Tests/ - do not add
*ForTestsmethods, test-only flags, test-only branches, or build steps to the main project just to make tests easier to write
The repo has been moving away from old migration-debt names like Services/, Rendering/, and Utils/. New work should follow the current structure instead of the legacy one.
- Arecurius0 - Original pickit improvements that started this project
- cheatingeagle / exapitools - For keeping ExileAPI up to date and functional
- instantsc - Author of the Radar plugin that influenced parts of the terrain and pathfinding structure