# 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.

  * The [device-finder](/docs/development/idk/documentation/device_discovery.md)
    tool, which can enumerate Fuchsia devices to get their names.

  * 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 `device-finder` abstracts device listing and selection across all SDK
variants. With the right tool design, the extent of integration required should
be to run `device-finder` 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 `device-finder`, 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
(fxbug.dev/5931) 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 (fxbug.dev/5908).

