     }
 
     func intake(_ scope: Scope, closure: () -> Void) {
+        ensureNotExecuting()
         tracker.intake(scope, closure: closure)
     }
 
     func intake(_ step: Step) {
+        ensureNotExecuting()
         tracker.intake(step)
     }
 
     func intake(_ it: It) {
+        ensureNotExecuting()
         tracker.intake(it)
     }
 
     func execute() {
+        isExecuting = true
         rootScope.process(underFocus: false, underPending: false)
         let result = Scope.execute([rootScope], isSomethingFocused: rootScope.hasFocus)
         let endline = endLine(totalCount: result.total, succeeded: result.succeeded, pending: result.pending)
         print(result.description + endline)
+        isExecuting = false
+    }
+
+    // MARK: Helper
+
+    private func ensureNotExecuting() {
+        guard !isExecuting else {
+            fatalError(Constant.ErrorMessage.newScopesWhileExecuting)
+        }
     }
 
     // MARK: - TrackedScope Protocol

    private let tracker: Tracker
    private let rootScope: Scope

    init(title: String, closure: () -> Void, mark: Mark) {
        rootScope = Scope(type: .topLevel, title: title, mark: mark)
        self.tracker = Tracker(rootScope: rootScope)

    static let nilGroupKey = "_____"

    struct ErrorMessage {
        static let tooManySubjectActions = "Only one \"subjectAction()\" per `it`."
        static let newScopesWhileExecuting = "Tried to add a scope during a test. This is probably caused be a test block (describe, it, beforeEach, etc.) is defined inside an `it` block."
    }

    struct OutPutPrefix {
