Spaces:
Build error
Build error
--- | |
title: Start Building | |
description: So you've [run OpenHands](./installation) and have [set up your LLM](./installation#setup). Now what? | |
icon: code | |
--- | |
OpenHands can assist with a range of engineering tasks. However, the technology is still new, and we’re far from having | |
agents that can handle complex tasks independently. It’s important to understand what the agent does well and where it | |
needs support. | |
## Hello World | |
Start with a simple "hello world" example. It might be trickier than it seems! | |
Prompt the agent with: | |
> Write a bash script hello.sh that prints "hello world!" | |
The agent will write the script, set the correct permissions, and run it to check the output. | |
You can continue prompting the agent to refine your code. This is a great way to | |
work with agents. Start simple, and iterate. | |
> Modify hello.sh so that it accepts a name as the first argument, but defaults to "world" | |
You can also use any language you need. The agent may need time to set up the environment. | |
> Please convert hello.sh to a Ruby script, and run it | |
## Building From Scratch | |
Agents excel at "greenfield" tasks, where they don’t need context about existing code and | |
they can start from scratch. | |
Begin with a simple task and iterate from there. Be specific about what you want and the tech stack. | |
For example, we might build a TODO app: | |
> Build a frontend-only TODO app in React. All state should be stored in localStorage. | |
Once the basic structure is in place, continue refining: | |
> Allow adding an optional due date to each task. | |
Just like normal development, commit and push your code often. | |
This way you can always revert back to an old state if the agent goes off track. | |
You can ask the agent to commit and push for you: | |
> Commit the changes and push them to a new branch called "feature/due-dates" | |
## Adding New Code | |
OpenHands is great at adding new code to an existing codebase. | |
For instance, you can ask OpenHands to add a GitHub action that lints your code. It might check your codebase to | |
determine the language, then create a new file in `./github/workflows/lint.yml`. | |
> Add a GitHub action that lints the code in this repository. | |
Some tasks need more context. While OpenHands can use commands like ls and grep to search, providing context upfront | |
speeds things up and reduces token usage. | |
> Modify ./backend/api/routes.js to add a new route that returns a list of all tasks. | |
> Add a new React component to the ./frontend/components directory to display a list of Widgets. | |
> It should use the existing Widget component. | |
## Refactoring | |
OpenHands does great at refactoring code in small chunks. Rather than rearchitecting the entire codebase, | |
it's more effective to break up long files and functions or rename variables. | |
> Rename all the single-letter variables in ./app.go. | |
> Split the `build_and_deploy_widgets` function into two functions, `build_widgets` and `deploy_widgets` in widget.php. | |
> Break ./api/routes.js into separate files for each route. | |
## Bug Fixes | |
OpenHands can help track down and fix bugs, but bug fixing can be tricky and often requires more context. | |
It’s helpful if you’ve already diagnosed the issue and just need OpenHands to handle the logic. | |
> The email field in the `/subscribe` endpoint is rejecting .io domains. Fix this. | |
> The `search_widgets` function in ./app.py is doing a case-sensitive search. Make it case-insensitive. | |
For bug fixing, test-driven development can be really useful. You can ask the agent to write a new test and iterate | |
until the bug is fixed: | |
> The `hello` function crashes on the empty string. Write a test that reproduces this bug, then fix the code so it passes. | |
## More | |
OpenHands can assist with nearly any coding task, but it takes some practice to get the best results. | |
Keep these tips in mind: | |
* Keep your tasks small. | |
* Be specific. | |
* Provide plenty of context. | |
* Commit and push frequently. | |
See [Prompting Best Practices](./prompting/prompting-best-practices) for more tips on how to get the most out of OpenHands. | |