Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions USAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -756,6 +756,14 @@ tw managed-identities add -o my-org -n hpc1 -p slurm -H login.hpc.example.com
tw managed-identities credentials -o my-org -n hpc1 add -l my_linux_user -k ~/.ssh/id_rsa
```

## Agents

Run `tw agents -h` to view the supported operations: `list`, `view`, `add`, `update`, `delete`, `enable`, and `disable`. Agents must be enabled for the organization.

```bash
tw agents add -w my-org/my-workspace -n triage --instructions-file triage.md
```

## Audit logs

Run `tw audit-logs -h` to view the supported operations: `list`, `view`, and `export`. These commands require a root user.
Expand All @@ -773,11 +781,11 @@ tw audit-logs export --after 2026-09-01T00:00:00Z --before 2026-09-30T23:59:59Z
- AWS Cloud: `--log-group`. Google Cloud: `--project-id`.
- HPC platforms: `--propagate-head-job-options`.
- Seqera Compute: `--data-retention-policy`.
- `tw launch`, `tw pipelines add|update`, `tw runs relaunch`, and `tw actions add|update`: `--tower-config`.
- `tw launch`, `tw pipelines add|update`, `tw runs relaunch`, and `tw actions add|update`: `--tower-config`. List the Nextflow versions you can launch with `tw info versions`.
- `tw runs star|unstar`, `tw runs view log [--next <cursor>]`, and `tw runs delete -i <id>,<id>`.
- `tw pipelines schema`: show a pipeline's parameter schema.
- `tw actions add cron|bucket`.
- `tw studios extend|rename-checkpoint`. `--mount-data-uris` also accepts a folder inside a data link.
- `tw studios star|unstar|extend|rename-checkpoint`. `--mount-data-uris` also accepts a folder inside a data link.
- `tw data-links delete-content|download-script`.
- `tw datasets add --url`, `tw datasets update --url`, and `tw datasets disable-version`.

Expand Down
151 changes: 151 additions & 0 deletions conf/reflect-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,12 @@
"allDeclaredMethods":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.AgentsCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.AuditLogsCmd",
"queryAllDeclaredMethods":true,
Expand Down Expand Up @@ -409,6 +415,81 @@
"allDeclaredMethods":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.agents.AbstractAgentsCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true
},
{
"name":"io.seqera.tower.cli.commands.agents.AddCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"description"}, {"name":"githubAppCredentialsId"}, {"name":"instructions"}, {"name":"name"}, {"name":"serviceAccountId"}, {"name":"workspace"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.agents.AgentInstructionsOptions",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"file"}, {"name":"text"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.agents.AgentRefOptions",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"agent"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.agents.AgentRefOptions$AgentRef",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"id"}, {"name":"name"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.agents.DeleteCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"ref"}, {"name":"workspace"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.agents.DisableCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"ref"}, {"name":"workspace"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.agents.EnableCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"ref"}, {"name":"workspace"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.agents.ListCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"filter"}, {"name":"paginationOptions"}, {"name":"workspace"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.agents.UpdateCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"description"}, {"name":"githubAppCredentialsId"}, {"name":"instructions"}, {"name":"newName"}, {"name":"ref"}, {"name":"serviceAccountId"}, {"name":"workspace"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.agents.ViewCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"ref"}, {"name":"workspace"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.auditlogs.AuditLogsFilterOptions",
"queryAllDeclaredMethods":true,
Expand Down Expand Up @@ -1485,6 +1566,13 @@
"allDeclaredMethods":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.info.VersionsCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"component"}, {"name":"fusion"}, {"name":"nextflow"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.labels.AbstractLabelsCmd",
"allDeclaredFields":true,
Expand Down Expand Up @@ -2305,6 +2393,13 @@
"fields":[{"name":"checkpointId"}, {"name":"newName"}, {"name":"studioRefOptions"}, {"name":"workspace"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.studios.StarCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"studioRefOptions"}, {"name":"workspace"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.studios.StartCmd",
"allDeclaredFields":true,
Expand Down Expand Up @@ -2372,6 +2467,13 @@
"queryAllDeclaredMethods":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.studios.UnstarCmd",
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"fields":[{"name":"studioRefOptions"}, {"name":"workspace"}],
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.commands.studios.UpdateCmd",
"allDeclaredFields":true,
Expand Down Expand Up @@ -2555,6 +2657,19 @@
"allDeclaredConstructors":true,
"methods":[{"name":"<init>","parameterTypes":[] }, {"name":"setMessage","parameterTypes":["java.lang.String"] }]
},
{
"name":"io.seqera.tower.cli.responses.ComponentVersions",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true
},
{
"name":"io.seqera.tower.cli.responses.ComponentVersions$ComponentVersion",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
"methods":[{"name":"isDefault","parameterTypes":[] }, {"name":"version","parameterTypes":[] }]
},
{
"name":"io.seqera.tower.cli.responses.CredentialsAdded",
"allDeclaredFields":true,
Expand Down Expand Up @@ -2646,6 +2761,36 @@
"allDeclaredMethods":true,
"allDeclaredConstructors":true
},
{
"name":"io.seqera.tower.cli.responses.agents.AgentAdded",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true
},
{
"name":"io.seqera.tower.cli.responses.agents.AgentDeleted",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true
},
{
"name":"io.seqera.tower.cli.responses.agents.AgentUpdated",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true
},
{
"name":"io.seqera.tower.cli.responses.agents.AgentView",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true
},
{
"name":"io.seqera.tower.cli.responses.agents.AgentsList",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true
},
{
"name":"io.seqera.tower.cli.responses.auditlogs.AuditLogView",
"allDeclaredFields":true,
Expand Down Expand Up @@ -3363,6 +3508,12 @@
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true
},
{
"name":"io.seqera.tower.cli.responses.studios.StudioStarred",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true
},
{
"name":"io.seqera.tower.cli.responses.studios.StudioStartSubmitted",
"allDeclaredFields":true,
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/io/seqera/tower/cli/Tower.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import io.seqera.tower.cli.commands.AbstractCmd;
import io.seqera.tower.cli.commands.AccessTokensCmd;
import io.seqera.tower.cli.commands.ActionsCmd;
import io.seqera.tower.cli.commands.AgentsCmd;
import io.seqera.tower.cli.commands.AuditLogsCmd;
import io.seqera.tower.cli.commands.CollaboratorsCmd;
import io.seqera.tower.cli.commands.ComputeEnvsCmd;
Expand Down Expand Up @@ -63,6 +64,7 @@
subcommands = {
AccessTokensCmd.class,
ActionsCmd.class,
AgentsCmd.class,
AuditLogsCmd.class,
CollaboratorsCmd.class,
ComputeEnvsCmd.class,
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/io/seqera/tower/cli/commands/AbstractApiCmd.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import io.seqera.tower.ApiException;
import io.seqera.tower.api.ActionsApi;
import io.seqera.tower.api.AdminApi;
import io.seqera.tower.api.AgentsApi;
import io.seqera.tower.api.AvatarsApi;
import io.seqera.tower.api.ComputeEnvsApi;
import io.seqera.tower.api.CredentialsApi;
Expand All @@ -29,6 +30,7 @@
import io.seqera.tower.api.IdentitiesApi;
import io.seqera.tower.api.LabelsApi;
import io.seqera.tower.api.LaunchApi;
import io.seqera.tower.api.NextflowApi;
import io.seqera.tower.api.OrgsApi;
import io.seqera.tower.api.PipelineSchemasApi;
import io.seqera.tower.api.PipelineSecretsApi;
Expand Down Expand Up @@ -130,6 +132,7 @@ public abstract class AbstractApiCmd extends AbstractCmd {
private IdentitiesApi identitiesApi;
private LabelsApi labelsApi;
private LaunchApi launchApi;
private NextflowApi nextflowApi;
private OrgsApi orgsApi;
private PipelinesApi pipelinesApi;
private PipelineSchemasApi pipelineSchemasApi;
Expand Down Expand Up @@ -212,6 +215,10 @@ protected AdminApi adminApi() throws ApiException {
return new AdminApi(apiClient());
}

protected AgentsApi agentsApi() throws ApiException {
return new AgentsApi(apiClient());
}

protected AvatarsApi avatarsApi() throws ApiException {
return avatarsApi == null ? new AvatarsApi(apiClient()) : avatarsApi;
}
Expand Down Expand Up @@ -248,6 +255,10 @@ protected LaunchApi launchApi() throws ApiException {
return launchApi == null ? new LaunchApi(apiClient()) : launchApi;
}

protected NextflowApi nextflowApi() throws ApiException {
return nextflowApi == null ? new NextflowApi(apiClient()) : nextflowApi;
}

protected OrgsApi orgsApi() throws ApiException {
return orgsApi == null ? new OrgsApi(apiClient()) : orgsApi;
}
Expand Down
43 changes: 43 additions & 0 deletions src/main/java/io/seqera/tower/cli/commands/AgentsCmd.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* Copyright 2021-2026, Seqera.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/


package io.seqera.tower.cli.commands;

import io.seqera.tower.cli.commands.agents.AddCmd;
import io.seqera.tower.cli.commands.agents.DeleteCmd;
import io.seqera.tower.cli.commands.agents.DisableCmd;
import io.seqera.tower.cli.commands.agents.EnableCmd;
import io.seqera.tower.cli.commands.agents.ListCmd;
import io.seqera.tower.cli.commands.agents.UpdateCmd;
import io.seqera.tower.cli.commands.agents.ViewCmd;
import picocli.CommandLine.Command;

@Command(
name = "agents",
description = "Manage AI agents. Agents must be enabled for the workspace organization.",
subcommands = {
ListCmd.class,
ViewCmd.class,
AddCmd.class,
UpdateCmd.class,
DeleteCmd.class,
EnableCmd.class,
DisableCmd.class,
}
)
public class AgentsCmd extends AbstractRootCmd {
}
6 changes: 5 additions & 1 deletion src/main/java/io/seqera/tower/cli/commands/InfoCmd.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package io.seqera.tower.cli.commands;

import io.seqera.tower.ApiException;
import io.seqera.tower.cli.commands.info.VersionsCmd;
import io.seqera.tower.cli.exceptions.TowerException;
import io.seqera.tower.cli.responses.InfoResponse;
import io.seqera.tower.cli.responses.Response;
Expand All @@ -32,7 +33,10 @@

@CommandLine.Command(
name = "info",
description = "Show system info and health status"
description = "Show system info and health status",
subcommands = {
VersionsCmd.class,
}
)
public class InfoCmd extends AbstractRootCmd {
@Override
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/io/seqera/tower/cli/commands/StudiosCmd.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import io.seqera.tower.cli.commands.studios.DeleteCmd;
import io.seqera.tower.cli.commands.studios.ExtendCmd;
import io.seqera.tower.cli.commands.studios.RenameCheckpointCmd;
import io.seqera.tower.cli.commands.studios.StarCmd;
import io.seqera.tower.cli.commands.studios.UnstarCmd;
import io.seqera.tower.cli.commands.studios.ListCmd;
import io.seqera.tower.cli.commands.studios.AddAsNewCmd;
import io.seqera.tower.cli.commands.studios.StartCmd;
Expand All @@ -45,6 +47,8 @@
StopCmd.class,
UpdateCmd.class,
DeleteCmd.class,
StarCmd.class,
UnstarCmd.class,
ExtendCmd.class,
}
)
Expand Down
Loading
Loading