The Files window is a built-in file manager and editor: you can view and change your project’s files right in the browser, with no extra software to install. It is handy for manually checking or adjusting what the agent did — or for preparing files for it.
Opening the Files window
Open the Files window with the Files button in the message input area or on the Git panel. It also opens when you click the file edit icon on the Git panel, the Edit file button in the diff view, or when the agent edits a file through tool messages.
The window looks like a large overlay with two parts: on the left, the file tree (the project structure); on the right, the editor for viewing and changing content. This split lets you jump between files quickly without losing sight of the code.
If the window was opened from the Git panel or a tool message, it immediately shows the relevant file. Otherwise — the last viewed file or a default selection.
How to open a file from the Git panel:
- The edit icon — every file on the Git panel has a pencil icon: click it to open that file in the Files window
- The Files button — the Git panel has its own Files button that opens the window from the project root
- Edit file in the diff — the Git diff view has an Edit file button that opens the changed file in the editor
Viewing files in the Skills dialog:
The Skills dialog has its own file viewer — for viewing and editing skill files (for example, SKILL.md) separately from the main Files window.
The file tree
The file tree on the left shows the whole project structure: folders with expandable content, files with icons depending on their type.
Navigating the tree:
- Click a folder to expand or collapse its content
- Click a file to open it in the editor on the right
- Double-click a folder to expand it and see its properties at the same time
Keyboard shortcuts:
- Arrows — move up and down through files and folders
- Enter — open the selected file, or expand/collapse the selected folder
- Delete — delete the selected file or folder (with confirmation)
- + (plus) — expand the selected folder
- – (minus) — collapse the selected folder
- F2 — rename the selected file or folder
The tree remembers which folders are expanded: after you close and reopen the window, everything is as you left it — no need to expand it all over again.
The file editor
The editor on the right does everything you need to work with code right in the browser. Select a file in the tree — its content appears in the editor, ready to view and change.
Editor features:
- Syntax highlighting — code is colored by meaning (keywords, strings, comments), which makes it noticeably easier to read
- Line numbers — on the left, so you can easily refer to specific lines
- Autosave — changes are saved as you type; nothing gets lost
- Token counter — at the bottom of the editor: how many “portions of text” the file takes; useful for understanding your spending when working with AI
- Theme — the editor follows the app’s light or dark theme
The usual text operations are supported: typing, deleting, selecting, copying, pasting, undo/redo. Ctrl+S (or Cmd+S on a Mac) saves the file manually at any moment, even with autosave on.
Large files load efficiently, and the editor stays responsive even on big projects. Highlighting adapts to the file extension automatically: TypeScript, JavaScript, Python, HTML, CSS, and other languages are recognized without manual setup.
Running scripts
A script is a file with a set of commands (the .sh extension) that performs work automatically. When a script is open in the editor, a Run button appears in the header: press it and the execution starts, with the output streaming live in the Script Output window.
The Script Output window:
The window header shows the script’s name, the project it belongs to, and an elapsed time counter. The output arrives line by line with automatic scrolling; if you scroll up to look at the past, autoscroll pauses and a scroll-to-bottom button appears.
- Copy — copies the full output to the clipboard (disabled while the script runs, so you never copy a partial result)
- Stop — an animated button in the header ends the script; closing the window also stops the execution
- Completion sound — a notification when the script finishes, even if the window is not in focus
Error highlighting in the output:
The script output is analyzed automatically: lines that look like errors are highlighted in red, warnings in orange. The highlighting rules are defined by the output.parser file in the project’s .xedant/ folder. The same format is used for build output (build.parser) and deploys (deploy.parser).
The parser file is simple: [ERROR] and [WARNING] blocks with text-search patterns (regular expressions) inside. For multi-line patterns (for example, Python tracebacks), the expression is wrapped in double curly braces: {{regex}}. Lines starting with # are comments.
# Shell command not found
[ERROR]
.*command not found
[/ERROR]
# Python traceback (multi-line)
[ERROR]
^Traceback \(most recent call last\)\:
{{.*}}
[/ERROR]
You can edit the output.parser file in the Files window. Changes take effect on the next script run — no server restart needed.
Creating files and folders
You can add new items with the toolbar at the top of the window or from the right-click context menu — the set of functions is the same, use whichever is more convenient.
To create a new file:
- Press the New File button on the toolbar, or right-click the file tree → New File
- A dialog appears, asking for the file name
- Type the name with the extension (for example:
helper.tsorstyles.css) - To create the file inside a specific folder, include the path (for example:
src/utils/helper.ts) - Press Enter or the Create button
To create a new folder:
- Press the New Folder button on the toolbar, or right-click the file tree → New Folder
- Type the folder name (for example:
componentsortests) - Nested folders are created with forward slashes (for example:
src/components/ui) - Press Enter or the Create button
The new file opens in the editor right away — you can start filling it with content. New folders appear in the tree and expand (while still empty). The system checks names for invalid characters and conflicts with existing items.
Renaming files and folders
Renaming helps you keep the project tidy or fix a mistake in a name: the item’s content and location stay, only the name changes.
To rename an item:
- Select the file or folder in the tree with a single click
- Press F2 or right-click → Rename
- Type the new name (for files — with the extension)
- Press Enter or the Rename button
The system will not let you rename an item to a name that already exists in the folder — you will see an error message.
Renaming a folder automatically updates the paths of all files and subfolders inside it. But if the code has hard-coded paths or import strings with the old name, you will have to update those by hand.
Moving files and folders
Moving helps you reorganize the project structure: the item is transferred to another place, keeping its content and properties.
To move an item:
- Select the file or folder in the tree with a single click
- Right-click → Move
- In the folder picker, navigate the tree to the destination
- Select the folder and press Move
When you move a folder, all of its content (files and subfolders) moves with it, and the internal structure is preserved. The system checks that the destination has no item with the same name — accidental overwrites are excluded.
Moving automatically updates the internal paths of the items. But as with renaming, relative paths and import strings in the code that point to the old location may need manual fixes. For example, moving a utility file from src/utils/ to src/lib/ means updating every import that references the old path.
Deleting files and folders
Deleting removes items for good, so the system always asks for confirmation — to keep you from losing data by accident.
To delete an item:
- Select the file or folder in the tree with a single click
- Press Delete or right-click → Delete
- Confirm in the dialog that appears
- Check the item’s name and path — make sure you picked the right one
- Press Delete, or Cancel to change your mind
Deleting a folder also deletes all files inside it; the dialog shows how many items will be removed, so you understand the scale.
Important: deletion is irreversible — there is no recycle bin in the app. Accidentally deleted files have to be restored from a backup (if you have one) or recreated. Always check the confirmation dialog before pressing Delete.
The file path
Above the editor you can see the path bar — the full address of the open file in the project structure. It helps you orient quickly and return to parent folders.
For example, for the file src/utils/helper.ts the bar shows:
src › utils › helper.ts
Every path segment is clickable: clicking a folder opens it in the file tree. Especially convenient with deeply nested files — the path lets you jump back to parent folders without scrolling the tree by hand. When you switch between files, the path updates by itself and always shows which file is active.
The built-in FTP server
Both Docker images (dev and min) include a built-in vsftpd FTP server. FTP is a common file transfer protocol: it lets you connect to your project’s files with familiar programs — FileZilla, WinSCP, and others — without opening the web interface. Convenient, for example, for uploading many files at once or working with the project from your favorite file manager.
The FTP server lives inside the Docker container and starts automatically at startup when credentials are set. The root directory is /project, so all of your project’s files are accessible.
Configuration
To enable the FTP server, add two environment variables to the container configuration (the full list of variables):
AGENT_FTP_USER— the user name for FTP accessAGENT_FTP_PASSWORD— the password for FTP access
Example in docker-compose.yml:
services:
xedant_agent:
image: registry2.xedant.com/agent:latest
ports:
- "5001:80"
- "21:21" # FTP port
- "30000-30009:30000-30009" # passive mode
volumes:
- "./MyProject:/project"
environment:
- AGENT_LOGIN=agent
- AGENT_PASSWORD=...
- AGENT_FTP_USER=myuser
- AGENT_FTP_PASSWORD=mypassword
Additional variables
AGENT_FTP_MIN_PORT— the minimum passive-mode port (default:30000)AGENT_FTP_MAX_PORT— the maximum passive-mode port (default:30009)AGENT_FTP_ADDRESS— the server address for passive mode (detected automatically by default)
Ports
The FTP server uses two kinds of ports:
- Port 21 — the command channel (connection control)
- Ports 30000–30009 — passive mode for data transfer
Both ranges must be forwarded in docker-compose.yml (see the example above). Without the passive ports forwarded, FTP clients will connect but won’t be able to transfer files.
If AGENT_FTP_USER and AGENT_FTP_PASSWORD are not set, the FTP server does not start, and ports 21 and 30000–30009 stay unused.