atagen

roundabout

public
Star0
Watch0

Commit 93b435e669a5

tarball

atagen <boss@atagen.co>2026-09-27 03:59 UTC

2 files changed+377-0
docs: readme and eupl-1.2 licence
Added file: LICENSE+281 additions
@@ -0,0 +1,281 @@
1+EUROPEAN UNION PUBLIC LICENCE v. 1.2
2+EUPL © 2007-2016 European Commission
3+
4+This European Union Public Licence (the "Licence") applies to the Work (as defined
5+below) which is provided under the terms of this Licence. Any use of the Work,
6+other than as authorised under this Licence is prohibited (to the extent such use
7+is covered by a right of the copyright holder of the Work).
8+
9+The Work is provided under the terms of this Licence when the Licensor (as defined
10+below) has placed the following notice immediately following the copyright notice
11+for the Work:
12+
13+ Licensed under the EUPL
14+
15+or has attached the Licence to the Work in any other manner reasonably suitable to
16+convey the message that the Work is licensed under the EUPL.
17+
18+1. Definitions
19+
20+In this Licence, the following terms have the following meaning:
21+
22+— 'The Licence': this licence.
23+
24+— 'The Original Work': the work or software distributed or communicated by the
25+Licensor under this Licence, available as source code and also as compiled code,
26+as the case may be.
27+
28+— 'Derivative Works': any work or software that could be created by the Licensee,
29+based upon the Original Work or modifications thereof. This Licence does not define
30+the extent of modification or dependence on the Original Work required to qualify
31+a work as a Derivative Work; this extent is determined by copyright law applicable
32+in the country mentioned in Article 15.
33+
34+— 'The Work': the Original Work or any Derivative Works.
35+
36+— 'The Source Code': the human-readable form of the Work which is the most
37+convenient for people to study and modify it.
38+
39+— 'The Compiled Code': any code which has been generated from the Source Code by
40+a process of translation, transformation or compilation, in a format normally used
41+for the execution of the work.
42+
43+— 'The Licensor': the natural or legal person, public authority, agency or any
44+other entity by law responsible for distribution of the Work. Under this
45+definition, "Licensor" does not include any entity which has a right to
46+sub-license the Work under a non-exclusive, royalty-free licence (either express
47+or implied).
48+
49+— 'Contributor(s)': any natural or legal person that modifies the Work under the
50+Licence, or otherwise contributes to the creation of a Derivative Work.
51+
52+— 'The Licensee' or 'You': any natural or legal person who makes any usage of the
53+Work under the terms of the Licence.
54+
55+— 'Distribution' or 'Communication': any act of selling, giving, lending,
56+renting, distributing, communicating, transmitting, or otherwise making available,
57+on-line or off-line, copies of the Work or providing access to its essential
58+functionalities at the disposal of any other natural or legal person.
59+
60+2. Scope of the rights granted by the Licence
61+
62+The Licensor hereby grants You a world-wide, royalty-free, non-exclusive,
63+sub-licensable licence to do the following:
64+
65+— use the Work in any circumstance and for all usage,
66+— reproduce the Work,
67+— modify the Work, and develop Derivative Works based upon the Work,
68+— communicate to the public, including the right to make available or display the
69+Work or copies thereof to the public and perform publicly, as the case may be, the
70+Work,
71+— distribute the Work or copies thereof,
72+— lend and rent the Work or copies thereof,
73+— sub-license rights in the Work or copies thereof.
74+
75+These rights can be exercised on any media, supports and formats, whether now
76+known or later invented, as far as the applicable law permits so.
77+
78+In the countries where moral rights apply, the Licensor waives the right to
79+exercise the moral right of paternity of the Work to the fullest extent allowed
80+by law so as to allow for the effective exercise of the economic rights herein
81+granted.
82+
83+The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to
84+any patents held by the Licensor, to the extent necessary to make use of the
85+rights granted on the Work under this Licence.
86+
87+3. Communication of the Source Code
88+
89+The Licensor may provide the Work either in its Source Code form or as Compiled
90+Code. If the Licensor provides the Work as Compiled Code, the Licensor must also
91+provide a machine-readable copy of the Source Code of the Work along with each
92+copy of the Compiled Code provided by the Licensor or indicate, in a notice
93+following the copyright notice attached to the Work, a repository where the
94+Source Code is easily and freely accessible for as long as the Licensor continues
95+to distribute or communicate the Compiled Code.
96+
97+4. Limitations on copyright
98+
99+Nothing in this Licence is intended to deprive the Licensee of the benefits from
100+any exception or limitation to the exclusive rights of the rights owners in the
101+Original Work or Compiled Code, of the exhaustion of those rights, or of other
102+applicable limitations thereto.
103+
104+5. Obligations of the Licensee
105+
106+The grant of the rights mentioned above is subject to some restrictions and
107+obligations imposed on the Licensee. Those obligations are the following:
108+
109+Attribution right: The Licensee shall keep intact all copyright, patent or
110+trademarks notices and all notices that refer to the Licence and to the
111+disclaimer of warranties. The Licensee must include a copy of such notices and a
112+copy of the Licence with every copy of the Work he/she distributes or
113+communicates. The Licensee must cause any Derivative Work to carry prominent
114+notices stating that the Work has been modified and the date of modification.
115+
116+Copyleft clause: If the Licensee distributes or communicates copies of the
117+Original Work or Derivative Works, this Distribution or Communication will be done
118+under the terms of this Licence or of a later version of this Licence unless the
119+Original Work is expressly distributed only under this version of the Licence —
120+for example by the communication of "EUPL v. 1.2 only". In this case, the User
121+(becoming Licensee) cannot impose any further EUPL revisions on the reception of
122+the Work.
123+
124+Compatibility clause: If the Licensee distributes or communicates Derivative Works
125+or copies thereof based upon both the Original Work and another work licensed
126+under a Compatible Licence, this Distribution or Communication can be done under
127+the terms of this Compatible Licence. For the sake of this clause, "Compatible
128+Licence" refers to the licences listed in the appendix attached to this Licence.
129+Should the Licensee's obligations under the Compatible Licence conflict with
130+his/her obligations under this Licence, the obligations of the Compatible Licence
131+shall prevail.
132+
133+Provision of Source Code: When distributing or communicating copies of the Work,
134+the Licensee will provide a machine-readable copy of the Source Code or indicate a
135+repository where this Source will be easily and freely accessible for as long as
136+the Licensee continues to distribute or communicate the Work.
137+
138+Legal Protection: This Licence does not grant permission to use the trade names,
139+trademarks, service marks, or names of the Licensor, except as required for
140+reasonable and customary use in describing the origin of the Work and reproducing
141+the content of the copyright notice.
142+
143+6. Chain of Responsibility
144+
145+The original Licensor warrants that the copyright in the Original Work granted
146+hereunder does not infringe any third party's intellectual property rights.
147+
148+Each Contributor warrants that his or her modifications to the Work do not
149+infringe any third party's intellectual property rights.
150+
151+7. Disclaimer of Warranty
152+
153+The Work is provided on an "AS IS" basis, WITHOUT WARRANTIES OF ANY KIND,
154+CONCERNING THE WORK, INCLUDING WITHOUT LIMITATION ANY EXPRESS OR IMPLIED
155+WARRANTIES, SUCH AS MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
156+NON-INFRINGEMENT OF THIRD PARTY RIGHTS. NOTHING IN THIS LICENCE SHALL BE
157+UNDERSTOOD TO AFFIRM OR IMPLY ANY SUCH WARRANTIES.
158+
159+The Licensor shall not be liable for any damage of any kind caused by the Work,
160+including without limitation, lost profits, lost income, lost opportunity, or
161+other intangible losses, even if the Licensor has been advised of the possibility
162+of such damage.
163+
164+8. Limitation of Liability
165+
166+Except in the cases of wilful wrongdoing or damages directly caused to natural
167+persons, the Licensor shall in no event be liable for any direct or indirect,
168+material or moral, damages of any kind, arising out of the Licence or of the use
169+of the Work, including without limitation, damages for lost profits, work
170+stoppage, computer failure or malfunction, or any form of general or special
171+damage, even if the Licensor has been advised of the possibility of such damage.
172+
173+However, the Licensor shall be liable under statutory product liability laws as
174+far such laws apply to the Work.
175+
176+9. Additional agreements
177+
178+While distributing the Work, You may choose to conclude an additional agreement,
179+defining obligations or services consistent with this Licence. However, if
180+accepting obligations, You may act only on your own behalf and on your sole
181+responsibility, not on behalf of the original Licensor or any other Contributor,
182+and only if You agree to indemnify, defend, and hold harmless each Licensor and
183+Contributor for any liability incurred by, or claims asserted against such
184+Licensor or Contributor by reason of your accepting any such warranty or
185+additional liability.
186+
187+10. Acceptance of the Licence
188+
189+The provisions of this Licence can be accepted by clicking on an "I agree" button
190+positioned under the bottom of a window displaying the text of this Licence or by
191+affirming consent in any other similar way, in accordance with the rules of
192+applicable law. Clicking on that button indicates your clear and irrevocable
193+acceptance of this Licence and all of its terms and conditions.
194+
195+Similarly, you irrevocably accept this Licence and all of its terms and conditions
196+when you exercise any rights granted to You by Article 2 of this Licence, such as
197+the use of the Work, the creation by You of a Derivative Work or the Distribution
198+or Communication by You of the Work or copies thereof.
199+
200+11. Information to the public
201+
202+In case of Distribution or Communication of the Work by means of electronic
203+transmission (for example, by offering to download from a remote location) the
204+distribution channel or the media (for example, a website) must at least provide
205+to the public the information requested by the applicable law regarding the
206+Licensor, the Licence and the way it may be accessible, concluded, stored and
207+reproduced by the Licensee.
208+
209+12. Termination of the Licence
210+
211+The Licence and the rights granted hereunder will terminate automatically upon any
212+breach by the Licensee of the terms of the Licence.
213+
214+Should the breach be remedied within 30 days of becoming aware of it by the
215+Licensee, continuity of the licence will be restored provided that this does not
216+happen more than twice in any five year period.
217+
218+For explicit termination of the Licence by the Licensor, the Licensor must give
219+formal notice to the Licensee with no further obligation to cure any breach.
220+
221+Upon termination of the Licence:
222+
223+— the rights granted to the Licensee under the Licence will end, and
224+— the Licensee shall, within a reasonable period after the termination, cease the
225+use or distribution of the Work, save where the Licence permits the continued use
226+of the Work after termination. All sub-licences to the Work which have been validly
227+concluded by the Licensee prior to termination shall survive.
228+
229+Save for the explicit termination by the Licensor or following termination by the
230+Licensee, the Work continues to be distributed or communicated under the same
231+Licence.
232+
233+13. Miscellaneous
234+
235+Without prejudice to any negotiations or procedures, insofar as the Licensor has
236+already received from the Licensee an indemnification in respect of actions brought
237+by the Licensor, arising from the infringement of intellectual property rights on
238+the part of the Licensor, the Licensor shall lose the right to seek indemnification
239+from the Licensee in respect of these or other intellectual property rights.
240+
241+Disputes arising between the parties relating to the interpretation or execution of
242+this agreement may be brought before the courts of the place where the Licensor
243+resides, unless there is an arbitration agreement between the parties or this
244+provision is modified by an agreement in writing between the parties.
245+
246+14. Jurisdiction
247+
248+Notwithstanding any choice of law, all disputes relating to the interpretation or
249+execution of this Licence, including arbitration, shall be subject to the exclusive
250+jurisdiction of the courts where the Licensor resides, unless otherwise agreed by
251+the parties in writing.
252+
253+15. Applicable Law
254+
255+This Licence shall be governed by the law of the European Union Member State in
256+which the Licensor resides.
257+
258+Appendix
259+
260+"Compatible Licences" according to article 5 EUPL are:
261+
262+— GNU General Public Licence (GPL) v. 2, v. 3
263+— GNU Affero General Public Licence (AGPL) v. 3
264+— Open Software Licence (OSL) v. 2.1, v. 3.0
265+— Eclipse Public Licence (EPL) v. 1.0
266+— CeCILL v. 2.0, v. 2.1
267+— Mozilla Public Licence (MPL) v. 2.0
268+— GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
269+— Creative Commons Attribution-ShareAlike v. 3.0 Unported (note: this is not a Free Software Licence)
270+— Public Documentation Licence (GDL) for GFDL v. 1.3
271+— WTFPL v. 2.0
272+— zlib/libpng
273+— Do What The F* You Want To Public Licence (WTFWPL)
274+— Microsoft Public Licence (Ms-PL)
275+— Microsoft Reciprocal Public Licence (Ms-RL)
276+— Illinois Open Source Licence (NCSA)
277+— Vovida Software Licence v. 1.0
278+— Boost Software Licence v. 1.0
279+— Artistic Licence v. 2.0
280+— Fair Licence
281+— Zope Public Licence v. 2.1
Added file: README.md+96 additions
@@ -0,0 +1,96 @@
1+# roundabout
2+
3+five agents, one machine, one youtube video. roundabout makes the builds take turns.
4+
5+agents say roughly how big a build is. a tiny daemon, started on demand and gone once idle, lets it run when there's room. two heavy builds never overlap, nothing gets promised disk that isn't there, and small stuff keeps slipping through while the big one grinds. roundabout doesn't run anything itself, it just holds the door.
6+
7+## use
8+
9+the cli is `rabt`, short enough that agents don't mind typing it
10+
11+```
12+rabt run --size m -- cargo build
13+rabt run --ram 6G --cores 8 --time 10m -- nix build .#thing
14+rabt status
15+rabt suggest -- cargo build --release
16+rabt watch 7 # exits when lease 7 is done or overdue
17+rabt kill 7
18+rabt extend 7 10m
19+rabt artifacts check | list | gc [--cap] | pin <path>
20+```
21+
22+`run` exits with the build's code, 124 if `--deadline` killed it, 75 if `--max-wait` ran out.
23+
24+a granted build gets `CARGO_BUILD_JOBS`, `MAKEFLAGS`, `CMAKE_BUILD_PARALLEL_LEVEL` and a `NIX_CONFIG` with `cores`/`max-jobs` to match its grant, so it actually uses the cores it asked for and no more.
25+
26+## claude code
27+
28+```
29+nix build .#plugin
30+claude plugin marketplace add ./result
31+claude plugin install roundabout@roundabout
32+```
33+
34+the plugin brings a skill and hooks. unwrapped builds get bounced back with instructions, overdue builds get mentioned to the agent that started them, and agents over their artifact cap get told to tidy up before they stop. `rabt` needs to be on PATH for the agent too, so install `.#roundabout` alongside.
35+
36+## config
37+
38+`~/.config/roundabout/config.toml`, falling back to `/etc/roundabout/config.toml`, or `$ROUNDABOUT_CONFIG` over both. everything's optional, these are the defaults
39+
40+```toml
41+[budget]
42+ram = "75%" # of total, or "24GiB"
43+ram_reserve = "4GiB" # MemAvailable never drops below this on our account
44+cores = "100%"
45+disk_reserve = "20GiB" # per fs, capped at a tenth of it
46+disk_paths = ["/nix/store"]
47+psi_max = 40.0 # memory psi avg10 above this holds heavies back
48+
49+[heavy] # any one of these makes a build heavy
50+ram = "4GiB"
51+cores = "50%"
52+disk = "5GiB"
53+
54+[sizes.m] # s m l xl built in, add your own
55+ram = "2GiB"
56+disk = "1GiB"
57+cores = 4
58+time = "5m"
59+
60+[queue]
61+linger = "5s"
62+backfill_max_time = "2m"
63+# max_wait = "30m"
64+
65+[overrun]
66+ram = "warn" # or "throttle", systemd-run MemoryHigh on linux
67+ram_slack = 1.25
68+time_grace = 1.5 # overdue at this multiple of --time
69+remind_every = "5m"
70+
71+[enforce]
72+unwrapped = "deny" # "wrap" guesses a size for them, "allow" looks away
73+default_size = "m"
74+
75+[artifacts]
76+project_cap = "10GiB"
77+global_cap = "60GiB"
78+idle_after = "24h"
79+size_ttl = "10m"
80+over_cap = "warn" # "block" refuses new builds until cleaned
81+stop = "nudge" # "block" "warn" "off"
82+nix_gc = false
83+nix_min_free = "30GiB"
84+# extra_rules = [{ name = "zig-cache", marker = "build.zig" }]
85+
86+[nix]
87+inject = true
88+cores_per_job = 4
89+
90+[detect]
91+# extra = ["just build"]
92+```
93+
94+## license
95+
96+EUPL-1.2