Skip to main content

Install Skills Quickstart

The fastest path is to install RETL's AI skills into the repository where the sync will live, then ask your agent to use those skills. The skills are product assets shipped with condor-retl; they are not copied from this repository's contributor skill tree.

Install RETL and skills

pip install "condor-retl[duckdb]"
retl install-skills . --pretty

By default, skills are installed into .agents/skills/ and .claude/skills/ in the target project. Unchanged files are left alone, changed skill files are refreshed from the packaged copy, and unrelated project files are preserved.

What gets installed

The installed skills cover the normal user lifecycle:

SkillUse it for
retl-start-projectStarting RETL in a new or existing project
retl-configure-backendConfiguring SQL backend and runtime-store layout
retl-create-syncCreating Source, State or Event declarations, and Syncs
retl-use-destinationsLoading destination connectors, surfaces, credentials, and targets
retl-create-local-destinationCreating private project-local destination behavior
retl-debug-syncDebugging failed, partial, or surprising sync runs
retl-runtime-operationsInspecting and repairing runtime-store state
retl-organize-projectMoving a growing RETL setup into a maintainable layout

Ask your agent to start

After installing the skills, prompt your agent with the real project context:

Use the retl-start-project skill in this repository.

Source: DuckDB at warehouse.duckdb, source schema main.
Destination: Meta Custom Audiences.
Goal: sync newsletter customers with email identifiers.
Start in dry-run mode and add the smallest checks that prove the setup works.

The agent should inspect the repository first, choose the smallest maintainable layout, configure the backend and destination, then create dry-run-first code for your actual source and destination.

Review the generated sync

The generated code should still be understandable. For a DuckDB-to-destination State sync, expect the same pieces you would write by hand:

import retl
from retl.backends.duckdb import DuckDBSqlBackend


db = DuckDBSqlBackend(
database="warehouse.duckdb",
source_schema="main",
runtime_schema="retl",
)

audience = retl.state(
name="newsletter_audience",
source=retl.source(
name="newsletter_customers",
mode="snapshot",
backend=db.source_backend(),
query="""
select customer_id, email
from customers
where email is not null
""",
),
key={"customer_id": "customer_id"},
target=retl.target("newsletter_customers"),
identifiers=[{"type": "email", "value": "email"}],
)

meta = retl.destinations.load(
"retl/meta",
binding_name="meta_primary",
credential_namespace="destinations.meta",
config_namespace="destinations.meta",
)

result = retl.runner(
name="send_newsletter_audience",
runtime_store=db.runtime_store(),
).run(
retl.sync(
name="newsletter_audience_to_meta",
declaration=audience,
destination=meta,
surface="custom_audiences",
),
dry_run=True,
)

print(result.to_text())

Next steps