Create Domino Launchers - parameterized web forms for self-service job execution. Enable business users to run analyses, generate reports, and trigger batch predictions without coding. Covers parameter types, email notifications, result delivery, and access control. Use when building self-service data products or enabling non-technical users.
66
78%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/launchers/SKILL.mdThis skill helps users create and use Domino Launchers - web forms that allow non-technical users to run parameterized jobs and receive results.
Activate this skill when users want to:
A Launcher is:
# generate_report.py
import argparse
import pandas as pd
# Parse launcher parameters
parser = argparse.ArgumentParser()
parser.add_argument('--start-date', required=True)
parser.add_argument('--end-date', required=True)
parser.add_argument('--region', default='all')
args = parser.parse_args()
# Generate report
df = generate_report(args.start_date, args.end_date, args.region)
# Save results (will be available to launcher user)
df.to_csv('/mnt/results/report.csv', index=False)
df.to_html('/mnt/results/report.html', index=False)# launcher.R
args <- commandArgs(trailingOnly = TRUE)
a <- as.integer(args[1])
b <- as.integer(args[2])
if (is.na(a)) {
print("A is not a number")
} else if (is.na(b)) {
print("B is not a number")
} else {
paste("The sum of", a, "and", b, "is:", a + b)
}Command: launcher.R ${A} ${B}
# Python script with named arguments
python generate_report.py --start-date ${start_date} --end-date ${end_date} --region ${region}
# Python script with positional arguments
my_script.py -x=1 ${file} ${start_date}
# R script with positional arguments
launcher.R ${A} ${B}Note: Parameter values are enclosed in single quotes, preserving special characters. File parameters pass the file path. Multi-select parameters pass comma-separated values.
name: customer_name
type: text
label: Customer Name
required: true
default: ""name: region
type: select
label: Region
options:
- North America
- Europe
- Asia Pacific
default: North Americaname: start_date
type: date
label: Start Date
required: truename: quantity
type: number
label: Quantity
min: 1
max: 1000
default: 100name: input_file
type: file
label: Input File
accept: .csv,.xlsxAny files created in /mnt/results/ are available as results:
# Save multiple output formats
df.to_csv('/mnt/results/data.csv')
df.to_excel('/mnt/results/data.xlsx')
fig.savefig('/mnt/results/chart.png')Create email.html for custom email body:
# Generate HTML for email
html_content = f"""
<html>
<body>
<h1>Report for {args.start_date} to {args.end_date}</h1>
<p>Summary: {summary}</p>
{df.to_html()}
</body>
</html>
"""
with open('/mnt/results/email.html', 'w') as f:
f.write(html_content)Use notebooks for rich reports:
# Use papermill to execute parameterized notebook
import papermill as pm
pm.execute_notebook(
'report_template.ipynb',
'/mnt/results/report.ipynb',
parameters={
'start_date': args.start_date,
'end_date': args.end_date
}
)Configure notification recipients:
import requests, os
TOKEN = requests.get("http://localhost:8899/access-token").text.strip()
BASE = os.environ["DOMINO_API_HOST"]
response = requests.post(
f"{BASE}/v4/launchers/{{launcher_id}}/run",
headers={"Authorization": f"Bearer {TOKEN}"},
json={
"parameters": {
"start_date": "2024-01-01",
"end_date": "2024-01-31",
"region": "North America"
}
}
)
run_id = response.json()["runId"]Results link sent to configured recipients.
Each launcher run creates a job:
# Get launcher run results
results = domino.runs_get_results(run_id)import argparse
import pandas as pd
import joblib
parser = argparse.ArgumentParser()
parser.add_argument('--input-file', required=True)
parser.add_argument('--output-format', default='csv')
args = parser.parse_args()
# Load model
model = joblib.load('/mnt/artifacts/model.joblib')
# Load and score data
df = pd.read_csv(args.input_file)
predictions = model.predict(df)
df['prediction'] = predictions
# Save results
if args.output_format == 'csv':
df.to_csv('/mnt/results/predictions.csv', index=False)
else:
df.to_excel('/mnt/results/predictions.xlsx', index=False)name: Score Customer Data
command: python score_data.py --input-file ${input_file} --output-format ${output_format}
parameters:
- name: input_file
type: file
label: Customer Data (CSV)
required: true
- name: output_format
type: select
label: Output Format
options: [csv, xlsx]
default: csvUse descriptive labels users understand.
# Validate inputs in script
if args.end_date < args.start_date:
raise ValueError("End date must be after start date")print("Loading data...")
print(f"Processing {len(df)} records...")
print("Generating report...")
print("Complete!")try:
process_data()
except Exception as e:
# Save error message as result
with open('/mnt/results/error.txt', 'w') as f:
f.write(f"Error: {str(e)}")
raiseInclude help text in launcher description.
d86698d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.