Lucent
The productivity OS for Unity: a keyboard-driven command palette for the Unity Editor.
Overview
Lucent is a command palette for the Unity Editor, inspired by Raycast, Spotlight, and VS Code's Command Palette. One floating window gives you fuzzy search over Lucent commands, Unity menu items, project assets, and scene objects, plus multi-step interactive workflows, all driven from the keyboard.
Everything lives under Assets/Plugins/Lucent/Editor/ and compiles into a single editor
assembly (Lucent.Editor.asmdef). Nothing ships in a build.
Requirements & installation
- Unity 2022.3 LTS or newer (developed against 2022.3.62f2)
- No external dependencies
Copy the Lucent folder into your project's Assets/Plugins/ directory. Unity
compiles the editor assembly on the next refresh. There is no further setup.
Quick start
- Open the palette with Double Shift, or via
Tools → Lucent → Main Window. - Start typing. Lucent searches its own commands, Unity menu items, and context actions for whatever is selected.
- Pick a result with ↑ / ↓ and press Enter to run it or start an interactive flow.
Select an asset or GameObject before opening Lucent. Context is captured on open, and contextual commands for that selection become available.
Keyboard reference
| Key | Action |
|---|---|
| Double Shift | Open the palette (default trigger) |
| ↑ / ↓ | Move the selection through the result list |
| Tab / Shift+Tab | Jump to the next / previous result section |
| Enter | Execute the selected result, or confirm the current step |
| Esc | Step back, then clear the captured selection, then close |
| ← / → | Section-specific navigation (active once the query is 2+ characters) |
The palette window
Sections
Results are grouped into sections. With an empty query you get Recents or a welcome state; while searching you get Commands and Menu Items; with a Project or Hierarchy selection captured you also get Context and Files.
Search & ranking
Queries are matched against command keywords, display names, type labels, extra search terms, Unity menu paths, and asset paths. Matches are scored (exact beats prefix beats word-boundary beats substring) and weighted by how often and how recently you have used each result. Short fragments work better than full paths.
Interactive steps
Multi-step commands ask for one thing at a time: a name, a folder, a prefab, a scene, a component type, a field, a hierarchy object, or a clipboard entry. A breadcrumb shows where you are; Enter advances and Esc goes back a step.
Selection pill
When Lucent captures a Project or Hierarchy selection, a pill appears at the right of the search field. Click it to ping the target, or dismiss it to clear the context.
Settings
Open with Tools → Lucent → Settings. Changes auto-save.
- Hotkey → choose Double Shift or Modifier + Key (capture a combination such as Ctrl+Shift+P), then Save & Apply. Reset to Default returns to Double Shift.
- Menu path blacklist → hide noisy Unity menu paths by prefix, e.g.
Window/Analysis/Profiler. - Console tool → pick the console integration used by Clear Console and Search Console, or leave it empty for Unity's built-in behaviour.
- Prepare AI environment → installs
CLAUDE.md,AGENTS.md, and thegenerate-lucent-commandskill for Claude, Codex, and Antigravity.
Where state is stored
Library/Lucent/State.json→ recents, command usage counts, clipboard history.UserSettings/LucentSettings.json→ hotkey binding, menu blacklist, console tool.
Commands themselves are never persisted; they are rediscovered by reflection on every editor load.
Extending Lucent
1. A Unity menu item
Lucent indexes Unity menu paths automatically, so a plain
[MenuItem("Tools/My Studio/Rebuild Data")] method already shows up in search. No Lucent-specific
registration.
2. A one-shot command
Add a class with a [LucentCommand] attribute and a non-empty keyword. It is discovered by
reflection on the next compile.
using Lucent;
[LucentCommand("Rebuild Data", "rebuild-data",
Category = "Tools",
Icon = LucentIcons.SETTINGS,
Subtitle = "Regenerate the generated data assets")]
public class RebuildDataCommand : Command
{
protected override void OnExecute()
{
DataBuilder.Rebuild();
}
}
Put your own commands in Assets/Editor/LucentCommands/, not inside
Assets/Plugins/Lucent/. Lucent's assembly definition cannot reference
Assembly-CSharp, so a command placed inside the package cannot see your project's scripts.
3. A multi-step command
Derive from CompositeCommand, return a list of StepCommands from
BuildSteps(), and do the real work in OnComplete() once the last step confirms.
Reuse the shipped steps (folder, name, prefab, scene, component type, field, hierarchy object, file,
clipboard) rather than writing new UI.
4. Context filtering
Declare when a command should appear instead of checking inside OnExecute():
SelectionSourceFilter (Hierarchy / Project / None / All), FileTypeFilter, and
SearchStateFilter. IsAvailable() is evaluated per frame against the current
selection and query.
Command reference
Lucent ships with 130 built-in commands. Keywords are what you type in the palette.
Hierarchy 10
| Command | Keyword | Description |
|---|---|---|
| Disable GameObject | disablegameobject | Disable selected GameObject |
| Enable GameObject | enablegameobject | Enable selected GameObject |
| Find Missing Components | findmissingcomponents | List GameObjects with missing scripts |
| Search Components in Hierarchy | searchcomponent | Search and select components across the hierarchy |
| Search GameObject in Hierarchy | searchgameobject | Find a GameObject and select it in the Hierarchy |
| Select All Components | selectallcomponents | Select all GameObjects with a component |
| Select All GameObjects | selectallgameobjects | Select all matching GameObjects in hierarchy |
| Set Layer | setlayer | Set selected GameObject layer |
| Set Static | setstatic | Set static flags on a GameObject |
| Set Tag | settag | Set selected GameObject tag |
GameObject 1
| Command | Keyword | Description |
|---|---|---|
| Add Prefab as Child | addprefab | Instantiate a prefab as a child of the selected GameObject |
Component 11
| Command | Keyword | Description |
|---|---|---|
| Add Component | addcomponent | Add a component to the selected GameObject |
| Assign Child Component | assignchildcomponent | Wire a component field to a child |
| Assign Component | assigncomponent | Wire a component field to a scene object |
| Assign Prefab | assignprefab | Assign a prefab to a serialized field |
| Assign ScriptableObject | assignscriptableobject | Assign a ScriptableObject to a serialized field |
| Disable Component | disablecomponent | Disable selected components |
| Enable Component | enablecomponent | Enable selected components |
| Open Component | opencomponent | Open a selected component script |
| Remove Component | removecomponent | Remove a component from the selected GameObject |
| Reset Component | resetcomponent | Reset a component on the selected GameObject |
| Set Component Value | setcomponentvalue | Set a serializable field's value on a component |
Transform 12
| Command | Keyword | Description |
|---|---|---|
| Anchor to Corners | anchortocorners | Move anchors to wrap the current rect |
| Set Anchor | setanchor | Set anchor min and max |
| Set Anchor Max | setanchormax | Set the upper-right anchor point |
| Set Anchor Min | setanchormin | Set the lower-left anchor point |
| Set Anchor and Pivot | setanchorpivot | Set anchor and pivot to the same value |
| Set Height | setheight | Set the height of a RectTransform |
| Set Pivot | setpivot | Set the pivot point of a RectTransform |
| Set Position | setposition | Set the local position of a GameObject |
| Set Rotation | setrotation | Set the local rotation in degrees |
| Set Scale | setscale | Set the local scale of a GameObject |
| Set Stretch | setstretch | Set stretch anchors on a RectTransform |
| Set Width | setwidth | Set the width of a RectTransform |
Prefab 8
| Command | Keyword | Description |
|---|---|---|
| Apply Override | applyoverride | Apply prefab instance overrides to asset |
| Exit Prefab Mode | exitprefabmode | Exit Prefab Mode and return to the main stage |
| Open In Context | openincontext | Edit prefab in scene context |
| Open In Isolation | openinisolation | Edit prefab in isolation |
| Open Prefab | openprefab | Browse and open a prefab asset |
| Prefab Mode: Back | prefabback | Go back to the previous Prefab Mode stage |
| Prefab Mode: Forward | prefabforward | Go forward to the next Prefab Mode stage |
| Revert Override | revertoverride | Revert prefab instance overrides |
ScriptableObject 1
| Command | Keyword | Description |
|---|---|---|
| Set ScriptableObject Value | setscriptableobjectvalue | Set a serializable field's value on a ScriptableObject |
Project 28
| Command | Keyword | Description |
|---|---|---|
| Create File | createfile | Create a new file with any extension |
| Create Folder | createfolder | Create a new folder in the project |
| Create Scene | createscene | Create a new Unity scene |
| Create Script | createscript | Create a new MonoBehaviour script |
| Create ScriptableObject | createscriptableobject | Create a new ScriptableObject asset |
| Find ScriptableObjects by Type | findscriptableobjectsbytype | List ScriptableObject assets by type |
| Move | move | Move the selected asset to a folder |
| Open | open | Open the selected asset |
| Open Scene | openscene | Browse and open a scene asset |
| Open Script | openscript | Browse and open a script asset |
| Open ScriptableObject | openscriptableobject | Browse and open a ScriptableObject asset |
| Reimport | reimport | Reimport the selected file |
| Reveal in File Browser | revealfile | Reveal the selected asset in the system file browser |
| Reveal in Finder | revealfile | Reveal the selected asset in Finder (macOS) |
| Search Animation in Project | searchanimation | Find an animation and reveal it in the Project window |
| Search Audio in Project | searchaudio | Find an audio clip and reveal it in the Project window |
| Search File in Project | searchfile | Find a file and reveal it in the Project window |
| Search Folder in Project | searchfolder | Find a folder and reveal it in the Project window |
| Search Font in Project | searchfont | Find a font and reveal it in the Project window |
| Search Material in Project | searchmaterial | Find a material and reveal it in the Project window |
| Search Mesh in Project | searchmesh | Find a mesh and reveal it in the Project window |
| Search Prefab in Project | searchprefab | Find a prefab and reveal it in the Project window |
| Search Scene in Project | searchscene | Find a scene and reveal it in the Project window |
| Search Script in Project | searchscript | Find a script and reveal it in the Project window |
| Search ScriptableObject in Project | searchscriptableobject | Find a ScriptableObject and reveal it in the Project window |
| Search Shader in Project | searchshader | Find a shader and reveal it in the Project window |
| Search Texture in Project | searchtexture | Find a texture and reveal it in the Project window |
| Show in Explorer | revealfile | Reveal the selected asset in Explorer (Windows) |
Selection 2
| Command | Keyword | Description |
|---|---|---|
| Delete | delete | Delete the selected asset or GameObject |
| Rename | rename | Rename the selected asset or GameObject |
Clipboard 3
| Command | Keyword | Description |
|---|---|---|
| Copy Component | copycomponent | Copy a component to clipboard |
| Paste Component | pastecomponent | Paste a copied component |
| Paste From History | pastefromhistory | Paste any item from clipboard history |
Prefs 4
| Command | Keyword | Description |
|---|---|---|
| Delete EditorPrefs | deleteeditorpref | Delete an existing Unity EditorPrefs value |
| Delete PlayerPrefs | deleteplayerpref | Delete an existing PlayerPrefs value |
| Set EditorPrefs | seteditorpref | Set or create a Unity EditorPrefs value |
| Set PlayerPrefs | setplayerpref | Set or create a PlayerPrefs value |
Console 2
| Command | Keyword | Description |
|---|---|---|
| Clear Console | clearconsole | Clear Unity Console logs |
| Search Console | searchconsole | Search Unity Console logs |
Editor 15
| Command | Keyword | Description |
|---|---|---|
| Discard Scene Changes | discardscenechanges | Reload the active scene without saving |
| Lock Hierarchy | lockhierarchy | Lock the Hierarchy window |
| Lock Inspector | lockinspector | Lock the Inspector window |
| Lock Project | lockproject | Lock the Project window |
| Pause | pause | Pause play mode |
| Play | play | Enter play mode |
| Quit Unity | quitunity | Quit the Unity Editor |
| Recompile Scripts | recompile | Request Unity script compilation |
| Refresh Asset Database | refreshassets | Refresh Unity's Asset Database |
| Set Time Scale | settimescale | Set Unity time scale |
| Stop | stop | Exit play mode |
| Toggle Inspector Debug Mode | toggleinspectordebug | Switch the Inspector between Normal and Debug mode |
| Unlock Hierarchy | unlockhierarchy | Unlock the Hierarchy window |
| Unlock Inspector | unlockinspector | Unlock the Inspector window |
| Unlock Project | unlockproject | Unlock the Project window |
Settings 32
| Command | Keyword | Description |
|---|---|---|
| Show Asset Pipeline Preferences | windowassetpipeline | Unity Asset Pipeline Preferences |
| Show Audio Settings | windowaudiosettings | Unity Audio Settings Window |
| Show Build Profiles | windowbuildprofiles | Unity Build Profiles Window |
| Show Burst AOT Settings | windowburstsettings | Unity Burst AOT Settings Window |
| Show Editor Colors | windoweditorcolors | Unity Colors Preferences |
| Show Editor Settings | windoweditorsettings | Unity Editor Settings Window |
| Show External Tools | windowexternaltools | Unity External Tools Preferences |
| Show GI Cache Preferences | windowgicache | Unity GI Cache Preferences |
| Show Graphics Settings | windowgraphicssettings | Unity Graphics Settings Window |
| Show Input Manager | windowinputmanager | Unity Input Manager Window |
| Show Input System Settings | windowinputsystemsettings | Unity Input System Package Settings Window |
| Show Memory Settings | windowmemorysettings | Unity Memory Settings Window |
| Show Package Manager Settings | windowpackagemanagersettings | Unity Package Manager Settings Window |
| Show Physics 2D Settings | windowphysics2dsettings | Unity Physics 2D Settings Window |
| Show Physics Settings | windowphysicssettings | Unity Physics Settings Window |
| Show Player Settings | windowplayersettings | Unity Player Settings Window |
| Show Preferences | windowpreferences | Unity Preferences Window |
| Show Preset Manager | windowpresetmanager | Unity Preset Manager Window |
| Show Quality Settings | windowqualitysettings | Unity Quality Settings Window |
| Show Scene Template Settings | windowscenetemplatesettings | Unity Scene Template Settings Window |
| Show Scene View Preferences | windowsceneviewprefs | Unity Scene View Preferences |
| Show Script Execution Order | windowscriptexecutionorder | Unity Script Execution Order Window |
| Show Services Settings | windowservicessettings | Unity Services Settings Window |
| Show Shader Graph Settings | windowshadergraphsettings | Unity Shader Graph Settings Window |
| Show Tags and Layers | windowtagsandlayers | Unity Tags and Layers Window |
| Show TextMesh Pro Settings | windowtextmeshprosettings | Unity TextMesh Pro Settings Window |
| Show Time Settings | windowtimesettings | Unity Time Settings Window |
| Show Timeline Settings | windowtimelinesettings | Unity Timeline Settings Window |
| Show UI Toolkit Settings | windowuitoolkitsettings | Unity UI Toolkit Settings Window |
| Show Version Control Settings | windowversioncontrol | Unity Version Control Settings Window |
| Show Visual Scripting Settings | windowvisualscriptingsettings | Unity Visual Scripting Settings Window |
| Show XR Plug-in Management | windowxrsettings | Unity XR Plug-in Management Window |
Lucent 1
| Command | Keyword | Description |
|---|---|---|
| Show All Commands | showallcommands | Browse every available command |
Troubleshooting
The hotkey doesn't work
Check the saved shortcut in Hotkey Settings. Modifier combinations can be swallowed by Unity, the OS, or another editor tool. Double Shift conflicts least.
A command is missing
Commands appear only when their filters match the current search state, selection source, and file type. Component commands need a Hierarchy selection; project asset actions need a Project selection.
Results change after I select something
That's intended. Lucent captures context when it opens, and the selected GameObject, folder, prefab, scene, or asset determines which commands and context actions are relevant.