| # Developer tool guidelines | |
| This section provides guidelines on *creating* CLI and GUI tools for | |
| Fuchsia. | |
| For information on existing tools, please refer to documentation for those | |
| tools. | |
| ## Other topics | |
| - [Command-line tool requirements](cli.md) | |
| - [CLI --help requirements](cli_help.md) | |
| - GUI Tool requirements (needs writing) | |
| ## Packaging a tool for inclusion in the Integrator Development Kit (IDK) | |
| The Integrator Development Kit (IDK) will contain: | |
| * The tool binary itself. | |
| * A document in | |
| [//docs/development/idk/documentation](/docs/development/idk/documentation) | |
| describing the contract of this tool and how to connect it to the target | |
| system. The target audience of this document is people writing integration | |
| scripts rather than being an end-user-friendly “how-to” (debugger example). | |
| ## Environment-specific SDKs | |
| The `ffx target list` command abstracts device listing and selection across all | |
| SDK variants. With the right tool design, the extent of integration required | |
| should be to run `ffx target list` to get the address and pass the address to | |
| the tool with other environment-specific flags. In the case of the debugger the | |
| tool-specific code would: | |
| * Connect to a shell (this should be a primitive provided by the | |
| environment-specific SDK) on the target and run the `debug_agent`. | |
| * Run zxdb with the address provided by `ffx target list`, passing any local | |
| settings files and symbol paths on the command-line. | |
| ## Tool requirements | |
| Tools should allow all environment parameters to be passed in via command-line | |
| arguments. Examples include the location of settings files and symbol | |
| locations. This allows different SDKs to be hermetic. | |
| Tools should be written to make writing environment-specific scripts as simple | |
| as possible. For example, the debugger should automatically retry connections | |
| (https://fxbug.dev/42137364) so the current behavior of waiting for the port to be open in | |
| the launch scripts can be removed. | |
| Tool authors are responsible for: | |
| * Writing the tool with the appropriate interface. | |
| * Providing documentation on this interface in | |
| //docs/development/idk/documentation. | |
| * Currently please reach out to get bugs filed on individual SDKs. We are | |
| working on a better process for this (https://fxbug.dev/42137108). | |