Skip to content
cd ../blog

Use Empryo to understand a repository before changing it

empryoaicodingworkflow

When you open an unfamiliar repository, a plausible explanation can be more misleading than no explanation. It gives you file names and a story that sounds connected. You still need to check whether those files actually produce the behavior you care about.

I build Empryo, an AI coding agent for desktop and terminal. A useful first task is to ask it about one behavior and keep editing out of scope. That gives you something small enough to verify before you trust it with a change.

Empryo desktop with a project conversation beside the code graph
The desktop keeps the conversation and repository graph side by side. Open the image to inspect it at full size.

Pick a path through the application

Avoid starting with “explain this entire project.” Pick something you can observe, such as submitting a form or loading a saved setting.

For a web application with a sign-in form, try:

Trace what happens when a user submits the sign-in form.
Start at the UI handler and follow the request through validation
and the response shown to the user.
Cite the files and symbols for each step.
Call out anything you cannot establish from the code.
Do not edit files or run commands that change data.

Replace the behavior with one your project actually has.

If you are setting up Empryo for the first time, use the installation guide and quickstart. Start with one supported model connection. You can compare other models once you have a task and a way to judge the answer.

A repository summary in the Empryo terminal interface
A repository conversation in the terminal. This screenshot shows the interface, while the sign-in trace above is a suggested task.

Check the joins in the explanation

  1. 01
    Form handler

    Find the submit event and the request it sends.

  2. 02
    Server route

    Confirm registration, validation, and the returned response.

  3. 03
    Visible result

    Check how the form displays success and failure.

Follow the request out and the response back. Each connection needs evidence in the code.

Read the cited handler. Check the request path it calls. Then inspect the server route or service the agent identified. The important mistakes often happen between individually correct descriptions.

A route can exist without being mounted. A helper can have callers without being used by this screen. A test can cover a similar function in another package.

Ask a focused follow-up when a connection is unclear:

Show where this route is registered and where this caller reaches it.
Separate code you found from assumptions about runtime configuration.

Keep the answer grounded in the current checkout. If a relationship depends on an environment variable, generated file, or external service, record that as an unresolved part of the trace.

Turn one uncertainty into the next task

Suppose the trace shows that validation errors are returned by the server but never displayed by the form. Before asking for a fix, decide what you expect to see and which test would catch the omission.

For this hypothetical sign-in form, start with three checks:

InputExpected responseWhat the user sees
Empty emailValidation rejects the requestAn error beside the email field
Wrong passwordAuthentication failsA clear sign-in error
Valid credentialsAuthentication succeedsThe next screen loads

Three passing checks cover these three cases. They do not establish that account recovery, rate limits, or session expiry work.

Write the next request around that behavior. Include the intended scope and ask for the relevant checks. Review the diff alongside the test result. A passing check only tells you about the behavior it covers.

The first explanation now has a purpose: it helped you choose a smaller change and identify the evidence you need to accept it.

For more about how an agent gets from a request to an edit, I wrote a walkthrough of an AI agent harness. To try the same task with another tool, use the coding-agent comparison worksheet.