# Random Tips

Improve discoverability by occasionally surfacing tips to users during normal CLI usage.

## Basic Usage

Use a Meta App to display a random tip after each command invocation. This keeps tip logic in one place rather than repeating it in every command.

    import random
    import sys
    from typing import Annotated

    from cyclopts import App, Parameter

    app = App()

    tips = [
        "Use 'my-app config --help' to see all configuration options.",
        "Set the MY_APP_DEBUG=1 environment variable for verbose output.",
        "Commands can be abbreviated: 'my-app d' matches 'my-app deploy'.",
        "Suppress tips by setting MY_APP_NO_TIPS=1.",
    ]

    @app.command
    def build():
        """Build the project."""
        print("Building...")

    @app.command
    def deploy():
        """Deploy the project."""
        print("Deploying...")

    @app.meta.default
    def launcher(
        *tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
        no_tips: Annotated[bool, Parameter(env_var="MY_APP_NO_TIPS", negative="")] = False,
    ):
        app(tokens)
        if not no_tips and random.random() < 0.3:
            print(f"\n💡 Tip: {random.choice(tips)}", file=sys.stderr)

    if __name__ == "__main__":
        app.meta()

    $ python my-app.py build
    Building...

    💡 Tip: Set the MY_APP_DEBUG=1 environment variable for verbose output.

    $ MY_APP_NO_TIPS=1 python my-app.py build
    Building...