<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://flincth.com/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://flincth.com/" rel="alternate" type="text/html" /><updated>2026-10-01T21:10:30+00:00</updated><id>https://flincth.com/blog/feed.xml</id><title type="html">Flincth</title><subtitle>Notes on building Flincth, a Mac app that switches your whole desk and clipboard for each kind of work.</subtitle><author><name>Flincth</name></author><entry xml:lang="en"><title type="html">How My Mac Window Manager Moves Windows Without Accessibility Access</title><link href="https://flincth.com/blog/moving-mac-windows-without-accessibility-access" rel="alternate" type="text/html" title="How My Mac Window Manager Moves Windows Without Accessibility Access" /><published>2026-10-01T00:00:00+00:00</published><updated>2026-10-01T00:00:00+00:00</updated><id>https://flincth.com/blog/moving-mac-windows-without-accessibility-access</id><content type="html" xml:base="https://flincth.com/blog/moving-mac-windows-without-accessibility-access"><![CDATA[<p>A few days ago I wrote about <a href="/blog/i-got-tired-of-rearranging-my-mac-windows">why I built Flincth</a>: I was tired of rebuilding the same desktop every time I switched from coding to research to meetings.</p>

<p>This post is about how it works underneath, because the most interesting part of building it wasn’t the idea.</p>

<p>It was a constraint.</p>

<hr />

<h2 id="every-window-manager-asks-for-the-same-permission">Every window manager asks for the same permission</h2>

<p>If you have ever installed a window manager on a Mac, you have probably seen the prompt.</p>

<p><em>“This app would like to control this computer using accessibility features.”</em></p>

<p>Then you open System Settings, find Privacy &amp; Security, scroll to Accessibility, and flip a switch.</p>

<p>There’s a good reason for that. The Accessibility API is how one app reaches into another app’s windows and moves them. It is the standard tool for the job.</p>

<p>It is also one of the most powerful permissions you can give an app. Accessibility access isn’t limited to windows. It lets an app read what is on screen in other apps and act on your behalf inside them.</p>

<p>I wanted Flincth on the Mac App Store. And that is where the standard tool stopped being available.</p>

<hr />

<h2 id="the-sandbox-says-no">The sandbox says no</h2>

<p>Apps on the Mac App Store must run in the App Sandbox.</p>

<p>A sandboxed app cannot use the Accessibility API to control other applications. It doesn’t matter how politely you ask the user. The sandbox simply doesn’t allow it.</p>

<p>A few long-standing window managers on the App Store predate that rule. A new app doesn’t get that treatment.</p>

<p>So I had a choice.</p>

<p>I could ship outside the App Store, ask for Accessibility access, and build the same thing everyone else builds.</p>

<p>Or I could find out whether a window manager could be built without it.</p>

<p>I chose the second, mostly out of curiosity. It turned out to shape the whole product.</p>

<hr />

<h2 id="the-answer-was-already-on-every-mac">The answer was already on every Mac</h2>

<p>Apple’s Shortcuts app has a small, easy-to-miss group of actions under <strong>Scripting → Windows</strong>:</p>

<ul>
  <li><strong>Find Windows</strong>, which can filter by app name, size, position and window index</li>
  <li><strong>Resize Window</strong></li>
  <li><strong>Move Window</strong></li>
</ul>

<p>Shortcuts runs those actions with its own permissions. A sandboxed app is allowed to ask Shortcuts to run a shortcut.</p>

<p>That was the opening.</p>

<p>Flincth doesn’t move any window itself. It works out exactly where every window should go, then hands that plan to a shortcut called <strong>Flincth Apply</strong>, which does the moving.</p>

<p>You install that shortcut once. The app walks you through it the first time you need it, and you can open it in Shortcuts and read every action it contains. Nothing about it is hidden.</p>

<hr />

<h2 id="doing-the-hard-part-in-the-app">Doing the hard part in the app</h2>

<p>The Shortcuts actions are simple. They move one window to one position and give it one size.</p>

<p>Everything else has to happen before Shortcuts is involved.</p>

<p>When you switch to a setup, Flincth:</p>

<ol>
  <li>Works out which displays are connected and which one each region belongs to.</li>
  <li>Converts each region from its saved, display-relative shape into exact screen coordinates, allowing for the menu bar and the Dock.</li>
  <li>Finds the windows that belong to each app in the setup.</li>
  <li>Builds one list of window-and-rectangle pairs.</li>
</ol>

<p>Then it sends that whole list to the shortcut in a single run, instead of calling Shortcuts once per window.</p>

<p>One detail I tested before trusting it: the coordinates Shortcuts expects are <strong>global</strong>. A window given an X position past the width of your main display lands on the second display. If it had been the other way round, every placement would have had to carry its display along with it.</p>

<hr />

<h2 id="reading-windows-without-reading-your-screen">Reading windows without reading your screen</h2>

<p>To place windows, and to put your desk back afterwards, Flincth also needs to know where windows are right now.</p>

<p>macOS has a function for that, <code class="language-plaintext highlighter-rouge">CGWindowListCopyWindowInfo</code>. It isn’t an Accessibility API and it works inside the sandbox.</p>

<p>Without Screen Recording permission it won’t tell you window titles. It still gives the position, size, owner and window number of every window. That turned out to be enough.</p>

<p>So Flincth identifies windows by app and position, not by title. I could have asked for Screen Recording to get the titles. I decided another privacy prompt was a worse trade than slightly harder window matching.</p>

<p>The result is a window manager that asks for no Accessibility access and no Screen Recording access.</p>

<hr />

<h2 id="hiding-instead-of-minimising">Hiding instead of minimising</h2>

<p>A setup isn’t only about the apps you need. It is also about the ones you don’t.</p>

<p>Minimising another app’s windows would need Accessibility again. Hiding an app doesn’t. <code class="language-plaintext highlighter-rouge">NSRunningApplication.hide()</code> works inside the sandbox with no special permission.</p>

<p>So when you switch, apps outside the setup can hide. One call per app, and it is the same thing as pressing ⌘H.</p>

<p>It turned out to be the better behaviour anyway. Hidden apps come back exactly as they were, which made one of my favourite features easy to build: <strong>Not Flincth</strong>, a single click that returns your desk to how it looked before you started switching.</p>

<hr />

<h2 id="what-i-had-to-give-up">What I had to give up</h2>

<p>Building this way has real costs, and I’d rather be upfront about them.</p>

<p><strong>It isn’t instant.</strong> Every move goes through Shortcuts, which is slower than an app moving windows directly. Switching a setup takes a moment to settle rather than happening in a single frame.</p>

<p><strong>It needs a shortcut you install.</strong> That is one more step on day one. If the shortcut goes missing, Flincth notices on the next switch and offers to install it again.</p>

<p><strong>It can’t cross desktops.</strong> No public API moves another app’s window to a different Mission Control desktop, and Shortcuts has no action for it either. Flincth places windows on the desktop you’re on, and gives each desktop its own arrangement.</p>

<p><strong>It can’t enter or leave full screen.</strong> Same reason.</p>

<p><strong>It depends on Apple.</strong> If Apple changes the Shortcuts window actions, Flincth has to adapt. There’s no back door to fall back on, by design.</p>

<hr />

<h2 id="what-i-got-in-return">What I got in return</h2>

<p>When I started, the constraint felt like a handicap. Now it feels like the point.</p>

<p><strong>Fewer permissions.</strong> Flincth never asks to control your computer. It moves windows through a shortcut you can read, and reads window positions without reading your screen.</p>

<p><strong>A sandbox around everything else.</strong> Your setups and your per-setup clipboard history live inside the app’s sandbox on your Mac.</p>

<p><strong>Apple review.</strong> Every version goes through the App Store, and so does every update.</p>

<p><strong>A simpler product.</strong> Flincth doesn’t watch your windows all day. It arranges them when you switch and then gets out of the way.</p>

<hr />

<h2 id="the-lesson-i-keep-coming-back-to">The lesson I keep coming back to</h2>

<p>Most of us reach for the most powerful API available, because it is the easiest way to make something work.</p>

<p>Taking that option away forced me to ask what the product actually needed. It needed to place windows when you switch setups. It didn’t need to control your Mac the rest of the time.</p>

<p>The narrower tool turned out to be enough.</p>

<hr />

<h2 id="try-it">Try it</h2>

<p>Flincth is on the Mac App Store as a one-time purchase, with no account and no subscription.</p>

<p>Website: <a href="https://flincth.com">flincth.com</a></p>

<p>Mac App Store: <a href="https://apps.apple.com/us/app/flincth-workspace-manager/id6809227474">Flincth – Workspace Manager</a></p>

<p>If you build Mac apps, I’d love to hear whether you’ve run into the same wall, and how you got around it. And if you try Flincth, tell me which setup you created first.</p>]]></content><author><name>Flincth</name></author><summary type="html"><![CDATA[Building a sandboxed window manager for the Mac App Store meant giving up the one API every window manager relies on. Here is what replaced it.]]></summary></entry><entry xml:lang="en"><title type="html">I Got Tired of Rearranging My Mac Windows, So I Built Flincth</title><link href="https://flincth.com/blog/i-got-tired-of-rearranging-my-mac-windows" rel="alternate" type="text/html" title="I Got Tired of Rearranging My Mac Windows, So I Built Flincth" /><published>2026-09-28T00:00:00+00:00</published><updated>2026-09-28T00:00:00+00:00</updated><id>https://flincth.com/blog/i-got-tired-of-rearranging-my-mac-windows</id><content type="html" xml:base="https://flincth.com/blog/i-got-tired-of-rearranging-my-mac-windows"><![CDATA[<p>I spend a significant part of my day working on a Mac with multiple monitors.</p>

<p>It’s a setup I really enjoy. More screen space means I can keep my editor open, have a browser available for research, leave a terminal visible, and still have room for everything else I need throughout the day.</p>

<p>At least, that’s the theory.</p>

<p>In reality, I noticed that I was spending a surprising amount of time managing the setup itself.</p>

<p>Every time I changed what I was working on, my desktop needed to change with me.</p>

<p>When I was coding, I wanted one arrangement.</p>

<p>When I was researching something, I wanted another.</p>

<p>For meetings, writing, planning, or everyday tasks, I wanted something completely different.</p>

<p>And every time I switched context, I found myself doing the same thing:</p>

<p>Opening apps.</p>

<p>Moving windows.</p>

<p>Resizing them.</p>

<p>Dragging them between monitors.</p>

<p>Trying to remember where everything was supposed to go.</p>

<p>Then doing it all over again a few hours later.</p>

<p>Eventually I started wondering:</p>

<p>Why am I rebuilding the same desktop environments every day?</p>

<p>That question eventually became Flincth.</p>

<h2 id="window-management-wasnt-really-myproblem">Window Management Wasn’t Really My Problem</h2>

<p>There are already plenty of great window management tools for macOS.</p>

<p>They can snap a window to the left side of the screen, move it to another display, maximize it, split the screen into sections, and perform all kinds of useful window operations.</p>

<p>But I realized that my problem was slightly different.</p>

<p>I didn’t really want to manage a window.</p>

<p>I wanted to manage what I was doing.</p>

<p>Consider a typical coding setup.</p>

<p>I might want:</p>

<ul>
  <li>my IDE on the main display</li>
  <li>Terminal next to it</li>
  <li>documentation open in a browser</li>
  <li>another browser window on the second monitor</li>
  <li>communication tools somewhere accessible</li>
</ul>

<p>When I stop coding and start researching something, the ideal arrangement changes.</p>

<p>Now I might want:</p>

<ul>
  <li>a large browser window</li>
  <li>Notes</li>
  <li>reference material</li>
  <li>perhaps another browser profile</li>
  <li>fewer development tools taking up space</li>
</ul>

<p>The individual windows aren’t the important part.</p>

<p>The relationship between the apps, their positions, the displays, and the task I’m doing is what matters.</p>

<p>That led me to a different way of thinking about desktop organization.</p>

<p>Instead of asking:</p>

<p>Where should this window go?</p>

<p>I wanted to ask:</p>

<p>What should my Mac look like when I’m doing this kind of work?</p>

<p>That became the core idea behind Flincth.</p>

<h2 id="workspaces-instead-ofwindows">Workspaces Instead of Windows</h2>

<p>Flincth is built around workspaces.</p>

<p>A workspace represents an environment you use for a particular activity.</p>

<p>For example:</p>

<p><strong>Coding</strong></p>

<p>IDE + Terminal + browser arranged across your displays.</p>

<p><strong>Research</strong></p>

<p>Browser + Notes + reference applications.</p>

<p><strong>Daily</strong></p>

<p>Mail + Calendar + browser.</p>

<p><strong>Writing</strong></p>

<p>Your writing application with research material positioned alongside it.</p>

<p>You configure the environment once.</p>

<p>Then, instead of rebuilding it manually the next time you need it, you switch to that workspace.</p>

<p>Flincth takes care of arranging the applications and windows according to the layout you created.</p>

<p>The goal is simple:</p>

<p>Your desktop should adapt to what you’re doing – not the other way around.</p>

<h2 id="multi-monitor-setups-made-the-problem-moreobvious">Multi-Monitor Setups Made the Problem More Obvious</h2>

<p>The idea became particularly useful for me because I work with multiple displays.</p>

<p>A single-monitor desktop can become messy.</p>

<p>A multi-monitor desktop can become very messy.</p>

<p>Once applications start moving between displays, restoring a setup manually becomes increasingly annoying.</p>

<p>Maybe your IDE belongs on your main monitor.</p>

<p>Your browser belongs on another.</p>

<p>Terminal needs to sit next to the IDE.</p>

<p>Another application needs a smaller section of the secondary display.</p>

<p>You can absolutely arrange all of this manually.</p>

<p>The problem is that you have to keep doing it.</p>

<p>And that’s the part I wanted Flincth to eliminate.</p>

<p>A workspace isn’t tied to a single window or necessarily a single display.</p>

<p>It’s intended to represent the environment across your setup.</p>

<p>That means switching what you’re doing can also mean switching how your entire multi-monitor setup is organized.</p>

<h2 id="context-switching-has-a-small-cost--repeated-constantly">Context Switching Has a Small Cost – Repeated Constantly</h2>

<p>Moving a few windows doesn’t sound like a serious productivity problem.</p>

<p>And individually, it isn’t.</p>

<p>Dragging a window takes seconds.</p>

<p>Opening an application takes seconds.</p>

<p>Resizing something takes seconds.</p>

<p>But the interesting part is how frequently those tiny interruptions happen.</p>

<p>You’re working on something.</p>

<p>You need to switch tasks.</p>

<p>Now you start preparing your computer for the new task.</p>

<p>Move this.</p>

<p>Open that.</p>

<p>Find another window.</p>

<p>Move it to the other monitor.</p>

<p>Resize it.</p>

<p>Close something else.</p>

<p>And only then do you actually start working.</p>

<p>The cost isn’t just the seconds spent dragging windows.</p>

<p>It’s the interruption.</p>

<p>I wanted switching environments to feel closer to changing modes than reorganizing a desk.</p>

<p>One shortcut.</p>

<p>New workspace.</p>

<p>Continue working.</p>

<h2 id="then-i-realized-the-clipboard-has-the-sameproblem">Then I Realized the Clipboard Has the Same Problem</h2>

<p>While building Flincth, another problem became obvious.</p>

<p>The clipboard is also usually treated as one giant global stream.</p>

<p>You copy some code.</p>

<p>Then a URL.</p>

<p>Then something from Slack.</p>

<p>Then a paragraph from an article.</p>

<p>Then another piece of code.</p>

<p>A traditional clipboard history remembers all of it chronologically.</p>

<p>That’s useful, but it ignores context.</p>

<p>If I’m working inside a coding workspace, the clipboard items I’m interested in are often related to that work.</p>

<p>If I switch to research, the useful clipboard context changes too.</p>

<p>So I added workspace-specific clipboard history.</p>

<p>Each workspace can maintain its own text clipboard history.</p>

<p>That means the workspace doesn’t just organize what’s visible on your screens.</p>

<p>It can also help organize some of the temporary information associated with that activity.</p>

<p>This turned out to fit naturally with the original idea behind Flincth:</p>

<p>Different kinds of work have different contexts.</p>

<h2 id="i-wanted-it-to-feel-like-a-macapp">I Wanted It to Feel Like a Mac App</h2>

<p>Another decision I made early was that Flincth should feel at home on macOS.</p>

<p>I didn’t want the product to feel like a web application placed inside a desktop window.</p>

<p>It’s designed as a native Mac utility and lives close to the way you already interact with macOS.</p>

<p>Workspaces can be accessed from the menu bar, and keyboard shortcuts make it possible to switch setups without interrupting your workflow.</p>

<p>I wanted Flincth to stay out of the way until you need it.</p>

<p>Configure your workspaces.</p>

<p>Use your Mac.</p>

<p>Switch when necessary.</p>

<p>That’s it.</p>

<h2 id="local-first">Local First</h2>

<p>There was also a question I kept asking while building features:</p>

<p>Does this actually need a server?</p>

<p>For most of what Flincth does, the answer was no.</p>

<p>Your workspace configuration belongs on your Mac.</p>

<p>Your clipboard history definitely doesn’t need to travel through somebody else’s server just to provide its basic functionality.</p>

<p>So Flincth doesn’t require an account or cloud service for these features.</p>

<p>Workspace and clipboard data stay locally on the Mac.</p>

<p>Apart from being a privacy decision, I like the simplicity of this approach.</p>

<p>Install the application.</p>

<p>Configure it.</p>

<p>Use it.</p>

<p>No account creation before you can organize your own desktop.</p>

<h2 id="why-i-didnt-make-it-a-subscription">Why I Didn’t Make It a Subscription</h2>

<p>Subscriptions make sense for many products.</p>

<p>Services with ongoing infrastructure costs, constantly changing content, cloud processing, collaboration platforms, and other continuously delivered services can have very legitimate reasons for recurring pricing.</p>

<p>But I didn’t feel that model made sense for Flincth.</p>

<p>It’s a Mac utility.</p>

<p>You buy it.</p>

<p>You use it.</p>

<p>So I decided to launch Flincth as a one-time purchase rather than a subscription.</p>

<p>I wanted the business model to be as straightforward as the product itself.</p>

<h2 id="building-the-product-was-only-half-the-experiment">Building the Product Was Only Half the Experiment</h2>

<p>One of the more interesting things I’ve learned from launching Flincth is that building a product and getting people to discover a product are completely different disciplines.</p>

<p>As a developer, it’s tempting to think mostly about the first part.</p>

<p>You identify a problem.</p>

<p>You design something.</p>

<p>You write the code.</p>

<p>You fix bugs.</p>

<p>You polish the interface.</p>

<p>Eventually you reach the magical moment where the application works.</p>

<p>Then you ship it.</p>

<p>And suddenly you discover another problem:</p>

<p>Nobody knows it exists.</p>

<p>Flincth is now live on the Mac App Store, which means I’ve moved from the development phase into a completely different experiment: distribution.</p>

<p>I’m starting small.</p>

<p>I’m learning about App Store search optimization.</p>

<p>I’m talking to Mac users.</p>

<p>I’m sharing the story behind the product.</p>

<p>I’m experimenting with communities where people care about Mac productivity.</p>

<p>And most importantly, I’m trying to understand how real users actually use workspaces.</p>

<p>Because there is a big difference between designing something for your own workflow and watching other people incorporate it into theirs.</p>

<h2 id="the-first-100users">The First 100 Users</h2>

<p>Right now, I’m much more interested in the first 100 users than the first 100,000.</p>

<p>Those first users can answer questions analytics never will.</p>

<p>Do people understand the workspace concept immediately?</p>

<p>What workspaces do they create?</p>

<p>Do they primarily use Flincth with multiple monitors or a single display?</p>

<p>How often do they switch?</p>

<p>Which applications cause problems?</p>

<p>Does workspace-specific clipboard history actually change how they work?</p>

<p>What’s missing?</p>

<p>Those answers will shape where Flincth goes next.</p>

<p>That’s one of the things I find exciting about building an independent product.</p>

<p>The application that’s available today doesn’t have to represent the final idea.</p>

<p>It’s the starting point.</p>

<h2 id="what-i-learned-from-buildingflincth">What I Learned From Building Flincth</h2>

<p>The biggest lesson so far isn’t technical.</p>

<p>It’s that small frustrations are interesting.</p>

<p>We naturally learn to tolerate repetitive actions on our computers.</p>

<p>Move this window.</p>

<p>Resize that one.</p>

<p>Open these three applications.</p>

<p>Arrange them again tomorrow.</p>

<p>None of those actions is painful enough individually to make us stop.</p>

<p>But when something happens dozens or hundreds of times, it’s worth asking a simple question:</p>

<p>Why am I still doing this manually?</p>

<p>Flincth started with that question.</p>

<p>I don’t think window management itself is the interesting problem anymore.</p>

<p>The more interesting question is how our computers can understand the different contexts in which we use them.</p>

<p>Coding isn’t just a collection of windows.</p>

<p>Research isn’t just another collection of windows.</p>

<p>They’re environments.</p>

<p>And I think our desktops should be able to switch between those environments as easily as we switch between tasks.</p>

<p>That’s what I’m trying to build with Flincth.</p>

<h2 id="flincth-is-now-available-formacos">Flincth is now available for macOS</h2>

<p>If you work with multiple monitors, frequently switch between different kinds of work, or simply find yourself rebuilding the same desktop layouts every day, I’d love to hear how you currently handle it.</p>

<p>Website: <a href="https://flincth.com">flincth.com</a></p>

<p>You can find Flincth – Workspace Manager on the Mac App Store:</p>

<p><a href="https://apps.apple.com/us/app/flincth-workspace-manager/id6809227474">Flincth on the Mac App Store</a></p>

<p>And if you try it, I’m especially interested in one question:</p>

<p>What workspace would you create first?</p>]]></content><author><name>Flincth</name></author><summary type="html"><![CDATA[Why I stopped thinking about individual windows and started thinking about entire workspaces instead.]]></summary></entry></feed>