Sway your AI
in the right direction.

Build at the speed of AI. Stay close enough to understand it.

Follow the build
SProduct previewOrganization Invitations
Agent working
>_
Request
Understand
</>
Implement
Integrate
Build
Checkpoint
⌄ src⌄ organizationTS  InvitationService.tsTS  Invitation.tsTS  InvitationRepository.ts
InvitationRepository.tsBuilding invitation persistence
128async create(input: CreateInvitationInput) {
129const invitation = Invitation.create(input);
130+ return this.db.invitations.insert(invitation);
131}
Existing persistence pattern followed+ Invitation    + InvitationRepository
12 agent actions · View all →
12 agent actionsView all →
  • Read OrganizationService.ts
  • Search “Repository”
  • Read OrganizationRepository.ts
  • Create InvitationRepository.ts
  • Run invitation tests

The new bottleneck

AI can write code
faster than you can follow it.

01

You give it
a feature.

02

It gives you
1,842 lines.

03

Nothing looks wrong.
That’s the problem.

04

But what happened between
the prompt and the diff?

Your intent
“Add organization invitations. Admins can invite users by email. Invitations expire and can be resent.”

Between prompt and diff.

  • Created InvitationServiceNew domain boundary
  • Selected expiration behaviorWho decided this?
  • Created InvitationSchedulerDid we need this?
  • Added retry behaviorWas this specified?
  • Changed database schemaWhat depends on this?
Implementation✓ Complete

17 files changed +1,842 / −126 · Tests passing

Architectural drift

Nothing broke.

Your architecture
just changed.

Before this feature How scheduled work already ran

OrganizationServiceBackgroundJobServiceOrganizationRepository

What the AI built Organization Invitations

OrganizationServiceInvitationServiceInvitationSchedulerRetryManager
Already existedBackgroundJobService11 scheduled tasks use it

One local choice becomes part of the repository.

The next agent
sees precedent.

InvitationSchedulerNow part of the repository
ReminderServiceDigestService
Future agents reuse what already exists.

Drift compounds.

Every unreviewed decision becomes precedent for the next one.

Sway

What if you could
see it happening?

One feature. One continuous line of sight—from intent to implementation.

01

Understanding system

SSwayOrganization Invitations
Understanding system
Understanding

Where this feature fits

4 established services · 7 relevant files

ENTRYOrganizationService
ESTABLISHEDEmailService
ESTABLISHEDBackgroundJobService
PERSISTENCEOrganizationRepository
Existing patterns found before implementation begins.
02

Building

SSwayOrganization Invitations
Agent working
Live build

Building invitation persistence

Following the established repository pattern

Persistence pattern followed

+ Invitation entity

+ InvitationRepository

12 agent actions View all ↓
  • Read OrganizationService.ts
  • Search “Repository”
  • Read OrganizationRepository.ts
  • Create InvitationRepository.ts
  • Run invitation tests
03

Needs you

SSwayOrganization Invitations
Needs you
Needs you

Invitation expiration isn’t defined.

The request requires expiration, but no duration is established.

What should expiration mean for this feature?

Nearby evidencePassword reset · 15 minEmail verification · 24 hrNo invitation precedent
04

Possible drift

SSwayOrganization Invitations
Possible drift
Possible drift

A new scheduler is being introduced.

Sway found an established path for scheduled work.

IMPLEMENTATIONInvitationSchedulernew abstraction
ESTABLISHEDBackgroundJobServiceused by 11 scheduled tasks

OrganizationService already depends on it. No other scheduler abstraction was found.

05

Checkpoint ready

SSwayOrganization Invitations
Checkpoint ready
Checkpoint ready

Invitation persistence complete

Repository coherent · safe to take over

Tests41 / 41passing
NextExpirationimplement confirmed behavior
Take over
Your turn · Implement invitation expirationInvitationService.tsInvitation.ts

Confirmed decision Invitations expire after 7 days

Existing precedent PasswordResetToken · EmailChangeToken

SSwayOrganization Invitations
Understanding system
Understanding

Where this feature fits

4 established services · 7 relevant files

ENTRYOrganizationService
ESTABLISHEDEmailService
ESTABLISHEDBackgroundJobService
PERSISTENCEOrganizationRepository
Existing patterns found before implementation begins.

Understand

Know the system
before AI changes it.

Organization InvitationsArchitecture

Before the feature: one established service handles scheduled work.

EmailService
OrganizationController
OrganizationService
BackgroundJobService
OrganizationRepository

Current. Proposed. Actual. See the difference before it disappears into the diff.

Intervene

Your judgment,
where it matters.

Needs youInvitation expirationDecision required before implementation continues
S
Sway

The feature requires invitations to expire, but neither the request nor the existing system establishes a duration.

YOU
You

What does the rest of the app do?

S
Sway

Password reset tokens expire after 15 minutes. Email verification tokens expire after 24 hours. There is no invitation precedent. A shorter duration limits unused access; a longer one reduces resend friction.

YOU
You

Use 7 days.

S
Sway

Decision recorded. Invitations expire after 7 days.

Decision D-184Confirmed by developer
Invitations expire after 7 days.

Affects 3 files · 4 functions · Organization Invitations

Review

Understand the code
before you own it.

Sway prepares you to review the actual code. It does not replace it with a summary.

InvitationService.tsFeature context on
41export async function createInvitation(input: InviteInput) {
42 const createdAt = this.clock.now();
43+ const expiresAt =
44+ this.clock.now().plus({ days: 7 });
45
46 return invitations.create({
47 ...input,
48 createdAt,
49 expiresAt,
50 });
51}

Continuity

Today’s decisions
shape tomorrow’s code.

FeatureOrganization Invitations
Decision D-184Invitations expire
after 7 days
Confirmed architectureBackgroundJobService
Next featureGuest Access

The next feature doesn’t start from zero.

Early access

AI can write the code.
You still have to own it.

Join the Sway early-access waitlist.

Tell us a little more Optional

Early access. Thoughtful updates only.