Caveats
While curo aims to provide a simple and flexible command runner for your projects, there are some important caveats and limitations to keep in mind:
One Level of Component Discovery per curo.toml
Each curo.toml only defines components one level deeper. Hierarchies are built by placing separate curo.toml files in subcomponent directories. Curo does not recursively search for components in nested directories unless each has its own config. Curo also has a 3 depth max as well. Root, first component and sub component.
Passing Command Arguments (-D)
- The
-D/--argsflag only works if you specify a single component. It cannot be used with multiple components at once. - These additional arguments are simply appended after the defined command; ensure your component’s script or tool will handle them as expected.
Global and Local Options
- The
--globalflag forces curo to run the top-level command for a specified component, ignoring any local overrides. - The
--localflag only works when you are inside a component’s directory. It cannot be used from outside the project/component subtree.
Component Command Precedence
By default, if both the top-level and the component define a command (like build), curo runs only the top-level version unless you use the -a/--all flag.
Environment Variable Expansion
Curo executes commands via the shell, so environment variables (like $PATH, $PWD, etc.) behave as they do in your shell. However, if your command depends on specific environment setup, make sure it is available via your shell or set in the command explicitly.
Command Chaining
Chaining commands with -n/--and does not support -D/--args.
Environment Switching (-e/--env)
Be sure that your curo.toml files actually define the requested environment (like [cicd]), otherwise you may see errors or no commands executed when using that environment.
Exclusions and Globs
The -x/--exclude flag can be used multiple times, but must exactly match a component path as curo discovers them. Pattern matching or globs are not currently supported.
Cross-Platform Considerations
Curo runs your specified shell commands as-is. If you are working in a cross-platform team (Windows, macOS, Linux), ensure your commands are portable or conditionally written.
Dependency Assumptions
Curo does not manage or install any system or language dependencies for you in your project. That is for you to set up and understand.