Khairon User Manual

Download PDF

Khairon is a SpiderGen-based Electron app — an AI development assistant that lets you talk to local/remote LLMs while it reads, searches, and modifies your project code, and even runs builds and tests.

This document is written against the code as of 2026-10-14. Actual UI labels and behavior may differ depending on your build version.


1. Screen Layout

When you launch the app, you will see the following structure.

Menu Bar

Menu Item Description
File New Session Create a new session (conversation)
Open File... / Save File / Close File Open, save, and close files (used by the code viewer/editor in section 5)
Exit Quit the app
View Session List Show/hide the session list panel
PreChat List Show/hide the PreChat list panel (see section 3-1)
Build Build Project / Simulate Project Build a SpiderGen project and run the simulator
Option Settings... App and server settings on the General / Lint / Indexing / Logging tabs (including the screen theme — see below)
AI Model... Register/edit LLM Providers (models), OAuth sign-in
MCP Servers... Register/edit external MCP servers — the external tools the AI may use (see section 14)
Help About Version check — shows the installer Version and Release : AS-builddate-patch. Please include that Release line when reporting an issue (see section 15)

Screen Theme

Pick the screen colors under Option > Settings... → General tab → 테마 (Theme): black (default · dark background) or green (green tones on a light background). Press OK and it switches right away without a restart; the code viewer/editor (section 5) follows. If you press OK without touching the theme, your current choice stays as it is.


2. Sessions and the Working Folder (cwd)

One session = one tab = one working folder (cwd) + one conversation history. This is the same model as Claude Code's "one cwd per session".

  1. Create a new session with File > New Session.
  2. Click the 📁 Select Folder button at the bottom of the chat tab to designate the project/code folder you want to work in.
  3. The first time you select a folder, a trust confirmation dialog appears. If you choose "Yes", the folder is recorded in trusted-folders.json so that the same folder can be used from then on without another trust prompt.
  4. Once the folder is trusted, indexing of .aiassist/samples begins if you have turned indexing on under Option > Settings... > Indexing (see section 4). This works regardless of project type. Project source code is not indexed; the AI finds it directly with the search tools.
  5. Note: Once a conversation has started (once the cwd is locked), the working folder cannot be changed within that session. To work on a different folder, create a new session.
  6. If the folder contains a *.prj file, it is automatically recognized as a SpiderGen project, a [SpiderGen] mark is added to the folder bar, and the Build/Simulate menus become enabled.
  7. Folders without code work too. You can pick a folder that holds only documents — meeting notes, specs, definitions (.md/.txt/.csv plus .xlsx/.pptx/.docx) — and ask things like "read every document in this folder and summarize". Text search inside those documents works as well (see section 5-1).

Double-clicking a session entry in the session list (left panel) loads that session's conversation history so you can continue where you left off. Every message is automatically saved locally as it is sent, so no separate "save" action is needed.

Renaming a session — right-click a session entry and choose Rename (or right-click a chat tab and choose Rename Session) to give the session a name of your own. The name then appears in the session list, the chat tab, and the session label. Saving an empty name removes the custom name and restores the automatic one (the first-message preview).

2-1. Archiving Sessions

This folds a session you are done with out of the list instead of deleting it. An archived session keeps its whole conversation and can be reopened at any time.


3. Basic Chat Usage

3-1. PreChat List

A panel for drafting messages in advance — frequently used instructions, or messages you are not ready to send yet — and sending them to the chat when needed. Open it via View > PreChat List.

Slash (/) Commands

These are commands you run directly, without going through the AI's judgment. Type them in the chat input box in the form /command and they run immediately. You can list them all at any time with /help.

Command Description
/find <part of a file name> [-n count] Searches the whole project by file name (runs find_file directly; case-insensitive, partial match). Shows up to 50 results by default and says limit reached when there are more — use -n to change the count (max 500). — Example: /find manager, /find .lay -n 200
/grep <query> [-n count] Searches the whole project for text (runs search_project directly). Shows up to 20 results by default; raise it with -n (maximum 500). If the limit is reached it is shown as N+ matches (limit reached). — Examples: /grep loadConfig, /grep sendResult -n 100
/outline <file path> Shows the file's function/class list (headings for markdown) with line numbers (runs file_outline directly). — Example: /outline Source/mdi/AIChatView.js
/tree [path] [depth] Shows the project folder structure as an indented tree (runs project_tree directly). Both path and depth can be omitted (defaults: root, depth 3, maximum 5). — Examples: /tree, /tree Source 2
/open <file path> Opens a file immediately in the code viewer (Monaco, read-only) — if there is no split, it opens in a new split on the right. — Example: /open Source/MenuInfo.js
/simulate Runs the built SpiderGen project in the simulator window (runs spidergen_simulate directly). If bin/index.html does not exist, you are prompted to build first.
/skill <skill name> [request] Force-triggers the specified skill (section 6). Unlike the other slash commands, it does not bypass the AI — the skill body (instructions) is injected into this request, and the AI continues the work following those instructions. Useful when the AI fails to trigger a skill automatically. Typing just /skill with no name lists the available skills. The injection applies only to that turn. — Example: /skill my_skill apply it to the login screen
/<skill name> [request] You can use a skill name directly as a slash command — /my_skill apply it to the login screen is identical to /skill my_skill apply it to the login screen. This works for every skill (built-in or project) whose name does not collide with a basic command above; basic commands always take precedence. A name that matches no skill is treated as normal chat text.
/help Immediately lists every available slash command and skill (with source tags [내장] = built-in / [프로젝트] = project).

4. Indexing (RAG)

Adding Samples

To give the AI more material to consult, create a folder under .aiassist/samples/ and put files in it. The example below adds a SpiderGen UI pattern, but there is no required file type or folder structure.

ButtonSample/
  _desc.md           (optional) sample description
  ButtonSample.lay   layout
  ButtonSample.js    script

5. Code Viewer / Editor (Monaco)

Click a file path shown on the AI's tool call card or edit card during a chat and that file opens in a Monaco-based viewer in an MDI tab. You can click to open it the same way after opening a session anew and loading an earlier conversation. File paths shown as inline code in chat text (e.g. a file list the AI mentions in its report) can be clicked and opened the same way.


5-1. Documents (Excel / PowerPoint / Word / PDF)

The AI can read Office documents and PDFs, and edit Office documents, the same way it handles code files.


6. Skills (Per-Project Custom Guides)

A skill is a work guide (a markdown document) that says "when a request like this comes in, handle it like this". The AI is aware of the skill catalog (name + description) on every request, and when your request matches a particular skill's description, it loads the full body with the use_skill tool and follows those instructions.

Built-in Skills

Built-in skills are merged into the same catalog as your project skills (tagged [내장] (built-in) in /help). If you create a project skill with the same name, the project one wins — this is how you override a built-in skill to fit your project.

There is currently one built-in skill, create_agent — ask something like "make me an agent that only investigates code" and the AI reads this skill and creates the agent definition file of section 13 in the right place and format.

Storage Location

The following folder is created automatically the first time you select a working folder.

<project-folder>/.aiassist/skills/
  my_skill.md          (a skill you created — this project only)

Skills you want in every project go in skills/ under the user-data folder (<userData> of section 8): <userData>/skills/my_skill.md. This folder is not created automatically — create it when you need it. When names collide, the first of project > global (<userData>/skills) > built-in wins, and /help shows the source as [프로젝트] (project) · [전역] (global) · [내장] (built-in). Global skills are read when you select (or re-select) the working folder.

Skill File Format

---
name: my_skill
description: one line describing when to use it (max 300 characters)
---
# Body

Write step-by-step instructions, examples, cautions and anything else you need here.

How to Use

  1. Ask the AI to create it: ask something like "save this way of working as a skill" in the chat and the AI creates the file in the correct location and format for you.
  2. A newly created skill is usable right away — no re-indexing needed. Only when you edit an existing skill's name/description yourself do you need to select the working folder again for the change to be picked up (body edits take effect immediately). If a new skill's name matches a skill that already exists (including global and built-in ones), the AI tells you — rename it to use it right away (when it collides with a global or built-in skill, the new project skill wins after you re-select the working folder).
  3. From then on, when you make a request that matches the skill description, the AI automatically loads that skill and works according to its instructions. If the AI fails to trigger it automatically, you can trigger it yourself with /skill <skill name> [request] (see the slash commands in section 3).

7. Memory

A per-project persistent memory feature is implemented. Facts and preferences you saved earlier are retained even when you open a new session on the same project folder.


8. Where Session Data Is Stored

All conversations are saved automatically to local storage (Electron userData).

<userData>/aiassist/
  sessions.json          (session index: sessionId, projectPath, preview, created/modified time, message count)
  data/
    <sessionId>.jsonl     (conversation content per session, append-only)
  archive/data/
    <sessionId>.jsonl.gz  (conversation content of sessions archived more than 7 days ago — compressed)

Once a session has been archived (section 2-1) for 7 days, its conversation is compressed and moved to archive/data/<sessionId>.jsonl.gz. You open it exactly the same way (it is decompressed for you), and unarchiving moves it back, so there is never any need to touch these files yourself.

You can delete and manage sessions from the session list panel (right-click menu).


9. AI Model (Provider) Settings

Register and edit the LLM Providers you want to use from the Option > AI Model... menu.

Field Description
Name The identifier shown in the dropdown
API Type The kind of model server — vLLM / Ollama / Claude / OpenAI / Gemini / OpenAI-compatible
model Model name (e.g. qwen3-coder-next)
host / port API endpoint
chatPath Chat API path
Max Context The model's context limit (in tokens, max_model_len) — detected automatically if left empty (see below)
(advanced) max_output_tokens Maximum output tokens per response. Normally left unset — it is chosen automatically from the context size (8K–32K). Set it directly in the config file (ai-client-config.json / ai-config.json) if you need to
https Whether to call the endpoint over HTTPS
Authentication method Choose either API Key or OAuth (account sign-in) (see below)
apiKey Authentication key (shown only for the API Key method)
headers Custom headers to add to requests (one per line, in "name": "value" format)
vision Whether image input (attachments) is supported
Vision Broker A model that reads images on this model's behalf when this model cannot accept them (vision unchecked) — see below
Streaming Whether to show the response as it arrives. Unchecked, the response is shown all at once when it is finished. Claude and a ChatGPT subscription (OAuth) always stream

The built-in Providers (server-managed, ai-config.json) and the Providers you add yourself (ai-client-config.json) are shown together in the dropdown. An embedding model (for sample indexing) is also configured separately.

Vision Broker — a "reader" model for models that cannot accept images

Use this when you work with a model that has no vision (e.g., a text-only GLM) but still want to use images. Once set, whenever an attached image or an automatic UI-test screen capture arrives, the broker model first describes the image in detail, and your current model receives that description and carries on "as if it had seen it".

  1. In Option > AI Model..., select the model that cannot accept images and uncheck vision — the select box below only becomes enabled when vision is unchecked.
  2. In the Vision Broker select box, choose the model that will read images instead. The list shows only user-added models with vision checked (the model itself and built-in models are excluded); "None" turns it off. Choosing a cloud model sends your images to an external service and may incur charges.
  3. Press OK — the change applies immediately (no restart).

Notices you may see during use (System lines in the chat):

Keep in mind: what gets passed along is a text description, so details such as "the exact color of the top-left button" may be lost. If the model you chose as broker is later deleted or its vision is unchecked, the setting falls back to "None".

Specifying the Context Limit Manually (max_model_len)

A model's context limit (total token count) is normally detected automatically. In environments where automatic detection fails (in-house gateways, proxies, and so on), long conversations may be truncated early or raise context-overflow errors, so specify the limit yourself in that case.

"my-gateway": {
    "host": "gateway.example.com",
    "port": 443,
    "chatPath": "/v1/chat/completions",
    "model": "OpenAPI",
    "max_model_len": 65536
}

It can be used in both ai-config.json and ai-client-config.json, and takes effect as soon as you save the file.

OAuth (Account) Sign-In

Instead of an API key, you can sign in with a Claude or ChatGPT account and send requests using that subscription.

  1. On the Provider edit screen, switch the authentication method to OAuth.
  2. Select the provider type (claude | chatgpt).
  3. Click the Sign in button; a browser opens and takes you to that service's sign-in/authorization screen.
    • Claude: copy the code displayed after signing in, paste it into the input box, and click the Apply Code button to exchange it.
    • ChatGPT: the authorization code is received automatically over the local loopback address and exchanged without any pasting.
  4. When the connection succeeds, the status indicator changes to "Connected".
  5. The issued tokens are stored encrypted and are retained even if you reinstall the app.

Option > Settings... manages general options (whether to clear the conversation when switching models, edit mode when opening source, and so on) and Lint-related settings. Lint's Auto Lint (automatically running ESLint on just the edited file after a successful edit_file) requires the project's package.json to have an eslint dependency; if it is enabled but eslint is missing, a skip notice is shown once per session with the edit result. The lint tool that the AI calls directly likewise requires eslint/prettier to be installed in the project, and returns a notice suggesting installation if they are not.


10. Command Execution Approval and Safeguards


11. Building and Simulating SpiderGen Projects

This chapter applies only when you are working on a SpiderGen project. Once the working folder is recognized as a SpiderGen project (containing a *.prj file), build and simulation become available.

To verify screen behavior automatically, use the automated UI test in section 12.


12. Automated UI Test (run_test)

This chapter also applies only to SpiderGen projects.

Ask "test ~ for me" in the chat and the AI plans a test scenario, drives the simulator itself, checks each step, and reports the outcome. No mode switch or preparation is needed.

Making the request

Writing a scenario without running it

Use this when you want to review the plan first instead of running the test right away.

The scenario file

Re-running a saved test

Recording your own actions into a test (● Rec)

You can record manual interactions with the simulator and turn the recording into a test.

Turn frequent tests into skills — for a test you run repeatedly, make it a skill (section 6) and run it with /name. Keep only "run the test with the .aiassist/tests/<file> scenario" plus parameters such as the account in the skill body, and leave the steps and expected values in the scenario file — that way results accumulate in the scenario file rather than in the skill.

Limits: the simulator always starts from the app's first screen, so the AI navigates to the target screen as part of the test. Screens that need a separate backend server cannot be tested unless that server is running (the AI reports that it could not reach them).


13. Background Delegation (Sub-agents)

This hands a large piece of work to another AI worker while you keep talking. There is no button or menu — the AI uses it on its own when it judges the work warrants it, and you can also ask for it directly ("delegate this and keep going"). It is available on every model (local, Claude, ChatGPT).

How it flows

  1. When the AI hands work off, a DELEGATE: dlg1 card appears in the chat and streams what the worker is reading and changing, live.
  2. The AI does not wait — it ends its turn. The card keeps progressing after the conversation ends, and stopping the conversation with the Stop button does not stop the delegated work.
  3. When the worker finishes, the AI picks it up on its own — you do not have to say anything. A line appears in the chat (✔ 백그라운드 위임이 끝났습니다 — 완료 보고를 받아 이어갑니다.), then the AI reads the completion report and carries on with your original request — it checks the deliverables, applies them to the real project and tells you what it applied, or hands the next piece of work to a worker.
  4. In a SpiderGen project, when code or screen files were applied, the AI follows up by verifying the build — and for screens (.lay), that they actually load — and reports the results along the way.
  5. If it judges the deliverables to be faulty, it does not apply them and says so.
  6. If you were in the middle of another exchange while the delegation was running, the AI picks it up once that answer finishes. When a completion report is folded into an ongoing exchange, you see one line: 📨 백그라운드 위임 완료 보고를 이번 메시지에 첨부했습니다.

Do not edit the delegated files yourself while the work is running. If the same file changes in your editor meanwhile, the AI does not overwrite it — it holds that file back and tells you, so your edit is never lost. It then re-reads the current file to merge, or waits for your call.

Deliverables and applying them

Files produced by the worker are stored only in the work folder (.aiassist/quality-work/<delegation id>/). The worker cannot touch real project files; those change only when the AI applies the deliverables (apply_files) after reviewing them. Once applied, you can revert them with Undo, exactly like any other edit.

You do not need to approve each apply. If you dislike the result, revert it with Undo or ask for a rework. The Undo button only shows for that turn, so to revert an older apply just say "revert the files you applied earlier".

The worker's final answer (report) is always saved in full as report.md in the work folder. For research-style delegations where the answer itself is the deliverable, the AI picks up that content as-is; if the answer is very long, the AI reads report.md to continue. To keep answers short, say so when delegating (e.g. "key points only, under 2,000 characters").

The work folder is never cleaned up automatically, so you can still open deliverables you chose not to apply.

Agent definition files (choosing the worker)

You can pin down the model, thinking level, tools and extra instructions a worker uses by putting a file in your working folder at .aiassist/agents/<name>.md, in the same format as the Skills of section 6 (frontmatter + body). When the AI delegates, it reads the description and picks the fitting worker. You can also name one yourself ("hand this to grep_local").

Workers you want in every project go in <userData>/agents/ under the user-data folder (same rule as global skills — create it yourself; on a name collision the project one wins). A global worker's model must be a name registered in AI Model... on that PC.

---
name: grep_local
description: Investigation-only worker. Searches the code and reports findings without editing any file.
model: qwen-local
quality: 1
tools: read_file, search_project, list_files, find_file
maxRounds: 40
---
Do not modify project files. Find where and how the requested feature is implemented and report it with file paths.
Field Description
name · description Required. description is what the AI uses to pick this worker, so make that one line clear
model The name of a model you registered under Option > AI Model.... Leave it out to use the same model as the chat
quality Thinking level 1–5. Leave it out to use the same level as the chat
tools The tools the worker may use, comma-separated. Pick from the default tools, or list MCP tools you connected in section 14 (mcp__<server>__<tool>) to hand them to the worker. An MCP tool needs its server connected at delegation time (if it is disconnected, the delegation does not start and the AI tells you). Leave it empty for all default tools
maxRounds Cap on how many work rounds the worker takes. If you write more than the model's own cap, the model's cap is used
wait true makes it a waiting delegation — instead of ending its turn, the AI waits for the worker's result and carries on within the same answer (below)
profile plain makes it a worker for non-coding roles (review, judgement, summaries…) — the coding rules and work-folder instructions are left out and it follows the output format written in the body as is. Its default tools are read-only, and listing a file-editing tool in tools makes the definition invalid. Omit it for the usual coding worker
Body Extra instructions for the worker. The default instructions (work-folder confinement, report format) still apply (with profile: plain, the body's format takes precedence)

Waiting delegation (wait: true)

A normal delegation runs in the background: the AI ends its turn and picks the result up on its own later (see "How it flows"). When you hand work to a worker with wait: true, the AI waits for the result right there and moves on to the next step within the same answer — useful for skills (section 6) that chain steps such as "design review → implementation → tests". Several workers called at once run in parallel, and the DELEGATE cards show progress while it waits. In this mode Stop also stops the workers (background delegations keep running regardless of Stop). A stopped delegation can be resumed later, e.g. "continue dlg3".

Things worth knowing


14. Connecting MCP Servers (Adding External Tools)

An MCP (Model Context Protocol) server is a set of tools provided by another program — a design tool, an in-house system, a file server, and so on. Connect one here and the AI calls those tools during a conversation just like its own.

Open the registration window with Option > MCP Servers.... The list of registered servers is on the left, and the settings for the selected server are on the right.

Registering a Server

  1. Press Add to create an entry and type the server name in Name. Only letters, digits, _ and - are allowed, and this name is prefixed to the tool names.
  2. Choose the transport. Only the fields that transport needs are shown.
    • stdio (local process) — runs the server program on this PC. Command (npx, node, python, or the path to an executable), Args (separated by spaces; wrap an argument containing spaces in "quotes"), Cwd (working folder, optional), Env (environment variables, one "name": "value" per line).
    • http (Streamable HTTP) · sse (legacy HTTP+SSE) — connects by address to a server that is already running. URL (must start with http:// or https://), Headers (request headers, one "Authorization": "Bearer ..." per line).
  3. Clearing the Enabled checkbox stops the app from connecting to that server (the settings are kept).
  4. Turning on Approve every call makes an approval card appear each time the AI uses a tool from that server (see below).
  5. Timeout is the limit for a single tool call, in milliseconds. Left empty it is 120000 (2 minutes).
  6. Delete removes the selected entry from the list.
  7. Pressing OK saves and connects at once — no app or server restart is needed.

Checking the Connection

Servers That Require an Account Sign-In (OAuth)

Some http/sse servers ask for an account sign-in instead of a token header.

  1. Check Use OAuth sign-in — the sign-in and sign-out buttons are only enabled while it is checked.
  2. Press Sign in; a browser opens and takes you to that service's authorization screen. When you approve, the app takes over, connects automatically, and the status text changes to "Signed in".
  3. The issued tokens are stored encrypted and are refreshed automatically when they expire. Sign out deletes the stored tokens.
  4. If the connection test reports Sign-in required, do this sign-in first.

How It Looks in the Chat

Things Worth Knowing


15. Automatic Updates

Khairon checks for new builds on its own while it is running, and tells you inside the app when one is available.


Summary: Your First Run

  1. Create a session with File > New Session
  2. Select the working folder (cwd) at the bottom of the chat window → confirm trust
  3. If needed, register and select the model to use in Option > AI Model... (API key or account OAuth sign-in)
  4. Enter your request in the chat window → the AI automatically references code/samples when needed and calls tools when file changes or command execution are required (dangerous commands ask for approval). If you do not like the result, revert it with Undo.
  5. Click a file path to view/edit it in the Monaco viewer (Git changes are shown in the gutter)
  6. Ask "save this as a skill" to accumulate recurring work rules in .aiassist/skills/ → they are used automatically from then on. Ask "remember this" for short facts and preferences and they accumulate in .aiassist/memory.md, applied automatically in later sessions as well.
  7. Return to an earlier conversation from the session list and continue at any time