AI

RHEL Command-Line AI Assistant: Hands-On with Lightspeed and goose

Red Hat put a generative AI assistant directly in the RHEL command line. You ask a question in plain English, and an answer comes back in your terminal, scoped to Red Hat Enterprise Linux instead of generic Linux trivia. The piece that ties this together is RHEL Lightspeed: the c command on your machine hands your question to a small local daemon, the daemon forwards it to Red Hat’s Lightspeed service, and the response prints right where you are working.

Original content from computingforgeeks.com - post 168742

This guide wires up that assistant end to end on a registered RHEL system, then shows the three ways Red Hat exposes it: the supported command-line-assistant (the c command), the optional goose agent that talks to the same backend, and a fully offline build that runs a local model with no cloud round trip. Every command below was run on a real system, so you can follow along and see the same output.

Confirmed working on RHEL 10.2 (Coughlan) in June 2026, with command-line-assistant 0.5.0 and goose 1.23.2.

How the assistant is wired

Three components do the work, and it helps to name them before installing anything:

  • The c command is the client you type into. It is shipped by the command-line-assistant package.
  • The clad daemon (Command Line Assistant Daemon) runs in the background and brokers every request. The client never talks to the network directly.
  • RHEL Lightspeed is Red Hat’s hosted AI service. It is included with your RHEL subscription, so there is no separate API key and no third-party account.

The flow is cclad → Lightspeed → back to your terminal. Because the daemon is the only part that reaches out, the assistant only works on a system that is registered to Red Hat. That registration is also what gates the package itself, so it is the first thing to sort out.

Prerequisites

  • RHEL 10 (10.0 or later) or RHEL 9 (9.6 or later). The steps here were run on RHEL 10.2.
  • A system registered with an active subscription. A no-cost Red Hat Developer subscription covers a lab machine. If you have not installed RHEL yet, the step-by-step RHEL 10 install guide gets you to a working desktop.
  • Outbound HTTPS to cert.console.redhat.com on port 443 so the daemon can reach Lightspeed.
  • A user with sudo rights.

This assistant is a RHEL feature tied to your subscription, so the community rebuilds do not include it. If you are still choosing a distribution, the Rocky, AlmaLinux and RHEL comparison covers where they differ.

One thing worth deciding up front: this is generative AI, and your questions (plus anything you attach or pipe into it) leave the machine and go to Red Hat. That is fine for “how do I check a service” but not for production secrets. The offline build later in this guide closes that gap for sensitive environments.

Register the system, if it is not already

Skip this if subscription-manager status already reads Overall Status: Current. Otherwise register the box:

sudo subscription-manager register

Enter your Red Hat login when prompted. On RHEL 10 this enables the BaseOS and AppStream repositories under Simple Content Access, which is where the assistant lives. Confirm the repos are live with dnf:

dnf repolist

You should see the AppStream and BaseOS repositories enabled:

repo id                           repo name
rhel-10-for-x86_64-appstream-rpms Red Hat Enterprise Linux 10 for x86_64 - AppStream (RPMs)
rhel-10-for-x86_64-baseos-rpms    Red Hat Enterprise Linux 10 for x86_64 - BaseOS (RPMs)

Install the command-line assistant

The client and daemon ship in a single package from AppStream:

sudo dnf install -y command-line-assistant

That installs the c client (with a cla alias), the clad daemon, and a config file at /etc/xdg/command-line-assistant/config.toml. Start and enable the daemon so it is ready on boot:

sudo systemctl enable --now clad

Now check the version and confirm the daemon is live:

c --version
systemctl is-active clad

The version prints and the daemon reports active:

0.5.0
active
command-line-assistant 0.5.0 and goose 1.23.2 on RHEL 10.2 with clad and goose-proxy active

Ask your first question with the c command

The chat subcommand is where you spend most of your time. Pass a question as a quoted string:

c chat "How do I check if SELinux is in enforcing mode on RHEL?"

The daemon shows a short “Asking RHEL Lightspeed” status, then prints the answer. RHEL 10.2 and 9.8 added color-coded output, so commands and snippets are visually separated from the explanation. A one-line disclaimer leads the response and a “review before use” reminder closes it:

RHEL command-line AI assistant c chat answering how to check SELinux enforcing mode with color-coded output

The answer is RHEL-specific: it reaches for getenforce and sestatus rather than generic advice. If you want plain text for piping or logging, add -p to drop the colors and the spinner animation:

c -p chat "How do I find which process is using the most memory?"

Feed it real context: pipe output and attach files

The assistant is far more useful when it can see what your system actually said. The c chat command reads from standard input automatically, so you can pipe a command’s output straight into a question:

echo "nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)" | c chat "what causes this error and how do I fix it?"

It explains the port conflict, then walks through finding the offending process with ss -tulnp and the choices for resolving it. For longer context, attach a file with -a. Here it reads the current boot’s error journal and summarizes it:

sudo journalctl -p err -b --no-pager | tail -12 | sudo tee /tmp/errs.log
c chat -a /tmp/errs.log "summarize the key errors in this log"

The summary is grounded in the actual log, not a generic example. On this lab box it picked out the PCI hot-plug and audio-codec messages and explained each:

RHEL command-line assistant c chat -a summarizing PCI hotplug and audio errors from the journal

Capture terminal output and go interactive

Typing or piping context every time gets old. The shell integration solves that. Enable capture for your current terminal, and the assistant can pull in the output of commands you have already run:

c shell --enable-capture

With capture on, you can run a command that fails and then ask about it with -w, which pulls in the most recent captured output as context:

c chat -w 1 "explain what went wrong and how to fix it"

There is also a hands-on interactive mode. Enable the bash integration once, open a new shell, and a hotkey drops you into a chat without leaving your prompt:

c shell --enable-interactive

Source the new shell and press Ctrl+G to toggle interactive mode. For a one-off back-and-forth without the shell hook, c chat -i starts an interactive session directly.

Keep and reuse conversations

Every exchange is saved, so you can come back to a useful answer later. List your chats and read the history:

c chat -l
c history

The history prints each question and answer with a timestamp and the chat it belongs to. You can also work in named sessions to keep topics apart, which is handy when you are troubleshooting two unrelated things at once:

c chat -n storage "how do I grow an XFS filesystem online?"

When you want a clean slate, clear everything:

c chat --delete-all

Add goose, the agent that runs alongside

The c command answers questions. goose is a step up: an open-source AI agent that can chain steps and call tools, and Red Hat ships a build that points at the same Lightspeed backend. It lives in the Extensions repository rather than AppStream. Much like turning on the CRB repository, you enable it with subscription-manager first:

sudo subscription-manager repos --enable rhel-10-for-x86_64-extensions-rpms

Install goose together with the Red Hat glue package that wires it to the assistant backend:

sudo dnf install -y goose goose-redhat

The goose-redhat package is the piece that ties goose to Lightspeed. It drops a login script in /etc/profile.d that, on your next shell, copies a custom provider named rhel_cla into ~/.config/goose. A companion goose-proxy service (socket-activated, so it starts on demand) bridges goose to the assistant backend. The result is that goose uses your subscription, with no external model API key to manage.

Open a fresh login shell so the provider is set up, then run a one-shot task. The run -t form is headless, which is ideal for a quick answer:

goose run -t "How do I check firewalld status on RHEL?"

goose prints the session details, including the provider and model it resolved to, then answers. The provider: rhel_cla line confirms it is going through the Red Hat backend rather than a public model:

goose run one-shot on RHEL 10.2 using the rhel_cla RHEL command-line assistant provider

Run goose with no arguments for the full interactive agent session. Where goose goes further than c is tool use: Red Hat ships a developer-preview Linux MCP server that goose can load as an extension, letting the agent inspect logs and system state through a controlled interface instead of just talking about commands. The provider config ships with that extension commented out, so you opt in deliberately.

Run it fully offline with a local model

The cloud assistant sends your questions to Red Hat. For disconnected or data-sensitive systems, Red Hat offers a developer-preview build that runs a model on the host itself, so nothing leaves the machine. Two things to know before you start: this preview targets the containerized path introduced in RHEL 10.1, so use 10.1 or later for it, and Red Hat gates the offline container images to Red Hat Satellite subscribers, so the image pull can return an entitlement error on a plain Developer subscription. With an entitled login, authenticate to the registry:

podman login registry.redhat.io

Run the installer image once. It drops a small control script, rhel-cla, into ~/.local/bin:

podman run -u : --rm \
  -v $HOME/.config:/config:Z \
  -v $HOME/.local/bin:/config/.local/bin:Z \
  registry.redhat.io/rhel-cla/installer-rhel10:latest

Make sure ~/.local/bin is on your PATH, then start the local stack. The first run pulls the model and the inference runtime, so give it a few minutes:

rhel-cla start

This brings up a small pod: a ramalama model server running Microsoft’s Phi-4-mini (a quantized Q4_K_M GGUF build), plus a pgvector database for retrieval. On a host without a GPU it falls back to CPU automatically. Check that the pod is healthy:

rhel-cla status

The whole stack runs on the host. A quick podman ps shows the model server (rhel-cla-llamacpp-model) and the API container (rhel-cla-rlsapi) up next to the retrieval database, all local:

RHEL offline command-line assistant pod with the llamacpp model server and rlsapi running locally via podman

Once the API reports healthy, the assistant is ready to answer from the local model instead of the cloud, with no outbound traffic. Manage its lifecycle with the same helper, and enable a user service if you want it to come up on login:

rhel-cla enable-service
rhel-cla stop
rhel-cla uninstall

The trade-off is honest: a small local model on CPU is slower and less capable than the hosted service, but for an air-gapped fleet or a box that handles regulated data, keeping every query on the host is the point.

What leaves the box, and how to keep it private

The disclaimer on every cloud answer is not boilerplate to scroll past. With the standard c command and the Red Hat goose build, your question and any piped output or attached file are sent to RHEL Lightspeed. So treat the input like anything else you would not paste into a hosted service: no passwords, no private keys, no customer data. Two practical controls follow from that. Use the offline build above for anything sensitive, and review every generated command before running it, because the assistant is confident even when it is wrong. The footer says it plainly: always review AI-generated content prior to use.

c, goose, or the offline model: which to reach for

All three talk to the same idea, but they fit different jobs. This is how they line up once everything is wired:

ToolWhat it isBackendBest for
c (command-line-assistant)Supported Q&A clientLightspeed (cloud)Quick, RHEL-specific answers; piping logs and attaching files
goose + goose-redhatOptional agent that can use toolsLightspeed (cloud)Multi-step tasks, MCP tool use, interactive agent sessions
Offline build (rhel-cla)Developer-preview local modelPhi-4-mini on the hostAir-gapped or sensitive systems where nothing can leave the box

For day-to-day work, the c command is the one you will keep. It is supported, it is one package, and it gives RHEL-aware answers without leaving your prompt. Reach for goose when you want an agent that can act, and switch to the offline model when the data cannot. If you are weighing this against the rest of the release, the rest of what is new across RHEL 10.2 and 9.8 is worth a read, and the same assistant is available on RHEL 9.6 and later if you are not on 10 yet.

Keep reading

Claude Code Cheat Sheet – Commands, Shortcuts, Tips AI Claude Code Cheat Sheet – Commands, Shortcuts, Tips Setup and Customize OpenCode – The Open Source AI Coding Agent AI Setup and Customize OpenCode – The Open Source AI Coding Agent Open Source LLM Comparison Table (2026) AI Open Source LLM Comparison Table (2026) Claude Code Hooks: The Complete Guide AI Claude Code Hooks: The Complete Guide Claude Code Subagents: Configure Specialized AI Agents AI Claude Code Subagents: Configure Specialized AI Agents Set Up Claude Code for DevOps Engineers AI Set Up Claude Code for DevOps Engineers

Leave a Comment

Press ESC to close