The new bottleneck
Sway your AI
in the right direction.
Build at the speed of AI. Stay close enough to understand it.
Follow the build↓InvitationRepository.tsBuilding invitation persistenceasync create(input: CreateInvitationInput) {const invitation = Invitation.create(input);+ return this.db.invitations.insert(invitation);}12 agent actionsView all →
- Read OrganizationService.ts
- Search “Repository”
- Read OrganizationRepository.ts
- Create InvitationRepository.ts
- Run invitation tests
AI can write code
You give it
a feature.
Add organization invitations. Admins can invite users by email. Invitations expire and can be resent.
I’ll inspect the repository and implement the feature.
It gives you
1,842 lines.
− return organization.members;
+ const invitation = await invitations.create(input);
+ await scheduler.schedule(invitation.expiresAt);
+ await email.sendInvitation(invitation);
− await email.sendInvite(input.email);
+ return invitation;
Nothing looks wrong.
That’s the problem.
All checks passed
CompileSuccessful
Tests41 / 41
Failures0
But what happened between
the prompt and the diff?
“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?
17 files changed +1,842 / −126 · Tests passing
Architectural drift
Nothing broke.
Your architecture
just changed.
Before this feature How scheduled work already ran
What the AI built Organization Invitations
One local choice becomes part of the repository.
The next agent
sees precedent.
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.
Understanding system
Where this feature fits
4 established services · 7 relevant files
Building
Building invitation persistence
Following the established repository pattern
+ Invitation entity
+ InvitationRepository
12 agent actions View all ↓
- Read OrganizationService.ts
- Search “Repository”
- Read OrganizationRepository.ts
- Create InvitationRepository.ts
- Run invitation tests
Needs you
Invitation expiration isn’t defined.
The request requires expiration, but no duration is established.
What should expiration mean for this feature?
Password reset · 15 minEmail verification · 24 hrNo invitation precedentPossible drift
A new scheduler is being introduced.
Sway found an established path for scheduled work.
OrganizationService already depends on it. No other scheduler abstraction was found.
Checkpoint ready
Invitation persistence complete
Repository coherent · safe to take over
Take over
InvitationService.tsInvitation.tsConfirmed decision Invitations expire after 7 days
Existing precedent PasswordResetToken · EmailChangeToken
Where this feature fits
4 established services · 7 relevant files
Understand
Know the system
before AI changes it.
Before the feature: one established service handles scheduled work.
Current. Proposed. Actual. See the difference before it disappears into the diff.
Intervene
Your judgment,
where it matters.
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 onexport async function createInvitation(input: InviteInput) { const createdAt = this.clock.now();+ const expiresAt =+ this.clock.now().plus({ days: 7 }); return invitations.create({ ...input, createdAt, expiresAt, });}Continuity
Today’s decisions
shape tomorrow’s code.
after 7 days
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.
Early access. Thoughtful updates only.