diff --git a/syndicate-server/protocols/schema-bundle.bin b/syndicate-server/protocols/schema-bundle.bin
index b0f0c1b..edc2ffe 100644
--- a/syndicate-server/protocols/schema-bundle.bin
+++ b/syndicate-server/protocols/schema-bundle.bin
@@ -1,3 +1,5 @@
-´³bundle·µ³externalServices„´³schema·³version‘³definitions·³Service´³refµ„³
DaemonService„³ClearEnv´³orµµ±present´³dict·³clearEnv´³named³clearEnv´³atom³Boolean„„„„„µ±invalid´³dict·³clearEnv´³named³clearEnv³any„„„„µ±absent´³dict·„„„„„³DaemonId³any³EnvValue´³orµµ±set´³atom³String„„µ±remove´³lit€„„µ±invalid³any„„„³	DaemonDir´³orµµ±present´³dict·³dir´³named³dir´³atom³String„„„„„µ±invalid´³dict·³dir´³named³dir³any„„„„µ±absent´³dict·„„„„„³	DaemonEnv´³orµµ±present´³dict·³env´³named³env´³dictof´³refµ„³EnvVariable„´³refµ„³EnvValue„„„„„„µ±invalid´³dict·³env´³named³env³any„„„„µ±absent´³dict·„„„„„³
-DaemonSpec´³orµµ±simple´³refµ„³CommandLine„„µ±full´³refµ„³FullDaemonSpec„„„„³CommandLine´³orµµ±shell´³atom³String„„µ±full´³refµ„³FullCommandLine„„„„³EnvVariable´³orµµ±string´³atom³String„„µ±symbol´³atom³Symbol„„µ±invalid³any„„„³ReadyOnStart´³orµµ±present´³dict·³readyOnStart´³named³readyOnStart´³atom³Boolean„„„„„µ±invalid´³dict·³readyOnStart´³named³readyOnStart³any„„„„µ±absent´³dict·„„„„„³RestartField´³orµµ±present´³dict·³restart´³named³restart´³refµ„³
RestartPolicy„„„„„µ±invalid´³dict·³restart´³named³restart³any„„„„µ±absent´³dict·„„„„„³
DaemonProcess´³rec´³lit³daemon„´³tupleµ´³named³id´³refµ„³DaemonId„„´³named³config´³refµ„³
-DaemonSpec„„„„„³
DaemonService´³rec´³lit³daemon„´³tupleµ´³named³id´³refµ„³DaemonId„„„„„³
RestartPolicy´³orµµ±always´³lit³always„„µ±onError´³lit³on-error„„µ±all´³lit³all„„„„³FullDaemonSpec´³andµ´³dict·³argv´³named³argv´³refµ„³CommandLine„„„„´³named³env´³refµ„³	DaemonEnv„„´³named³dir´³refµ„³	DaemonDir„„´³named³clearEnv´³refµ„³ClearEnv„„´³named³readyOnStart´³refµ„³ReadyOnStart„„´³named³restart´³refµ„³RestartField„„„„³FullCommandLine´³tuplePrefixµ´³named³program´³atom³String„„„´³named³args´³seqof´³atom³String„„„„„³embeddedType´³refµ³	EntityRef„³Cap„„„µ³internalServices„´³schema·³version‘³definitions·³	Milestone´³rec´³lit³	milestone„´³tupleµ´³named³name³any„„„„³DebtReporter´³lit³
debt-reporter„³
ConfigWatcher´³rec´³lit³config-watcher„´³tupleµ´³named³path´³atom³String„„„„„³TcpRelayListener´³rec´³lit³relay-listener„´³tupleµ´³named³addr´³refµ³TransportAddress„³Tcp„„„„„³UnixRelayListener´³rec´³lit³relay-listener„´³tupleµ´³named³addr´³refµ³TransportAddress„³Unix„„„„„„³embeddedType´³refµ³	EntityRef„³Cap„„„„„
\ No newline at end of file
+´³bundle·µ³externalServices„´³schema·³version‘³definitions·³Process´³orµµ±simple´³refµ„³CommandLine„„µ±full´³refµ„³FullProcess„„„„³Service´³refµ„³
DaemonService„³ClearEnv´³orµµ±present´³dict·³clearEnv´³named³clearEnv´³atom³Boolean„„„„„µ±invalid´³dict·³clearEnv´³named³clearEnv³any„„„„µ±absent´³dict·„„„„„³EnvValue´³orµµ±set´³atom³String„„µ±remove´³lit€„„µ±invalid³any„„„³
+ProcessDir´³orµµ±present´³dict·³dir´³named³dir´³atom³String„„„„„µ±invalid´³dict·³dir´³named³dir³any„„„„µ±absent´³dict·„„„„„³
+ProcessEnv´³orµµ±present´³dict·³env´³named³env´³dictof´³refµ„³EnvVariable„´³refµ„³EnvValue„„„„„„µ±invalid´³dict·³env´³named³env³any„„„„µ±absent´³dict·„„„„„³CommandLine´³orµµ±shell´³atom³String„„µ±full´³refµ„³FullCommandLine„„„„³EnvVariable´³orµµ±string´³atom³String„„µ±symbol´³atom³Symbol„„µ±invalid³any„„„³FullProcess´³andµ´³dict·³argv´³named³argv´³refµ„³CommandLine„„„„´³named³env´³refµ„³
+ProcessEnv„„´³named³dir´³refµ„³
+ProcessDir„„´³named³clearEnv´³refµ„³ClearEnv„„´³named³readyOnStart´³refµ„³ReadyOnStart„„´³named³restart´³refµ„³RestartField„„„„³ReadyOnStart´³orµµ±present´³dict·³readyOnStart´³named³readyOnStart´³atom³Boolean„„„„„µ±invalid´³dict·³readyOnStart´³named³readyOnStart³any„„„„µ±absent´³dict·„„„„„³RestartField´³orµµ±present´³dict·³restart´³named³restart´³refµ„³
RestartPolicy„„„„„µ±invalid´³dict·³restart´³named³restart³any„„„„µ±absent´³dict·„„„„„³
DaemonProcess´³rec´³lit³daemon„´³tupleµ´³named³id³any„´³named³config´³refµ„³Process„„„„„³
DaemonService´³rec´³lit³daemon„´³tupleµ´³named³id³any„„„„³
RestartPolicy´³orµµ±always´³lit³always„„µ±onError´³lit³on-error„„µ±all´³lit³all„„„„³FullCommandLine´³tuplePrefixµ´³named³program´³atom³String„„„´³named³args´³seqof´³atom³String„„„„„³embeddedType´³refµ³	EntityRef„³Cap„„„µ³internalServices„´³schema·³version‘³definitions·³	Milestone´³rec´³lit³	milestone„´³tupleµ´³named³name³any„„„„³DebtReporter´³lit³
debt-reporter„³
ConfigWatcher´³rec´³lit³config-watcher„´³tupleµ´³named³path´³atom³String„„„„„³TcpRelayListener´³rec´³lit³relay-listener„´³tupleµ´³named³addr´³refµ³TransportAddress„³Tcp„„„„„³UnixRelayListener´³rec´³lit³relay-listener„´³tupleµ´³named³addr´³refµ³TransportAddress„³Unix„„„„„„³embeddedType´³refµ³	EntityRef„³Cap„„„„„
\ No newline at end of file
diff --git a/syndicate-server/protocols/schemas/externalServices.prs b/syndicate-server/protocols/schemas/externalServices.prs
index 4108d49..4280b2b 100644
--- a/syndicate-server/protocols/schemas/externalServices.prs
+++ b/syndicate-server/protocols/schemas/externalServices.prs
@@ -3,21 +3,20 @@ embeddedType EntityRef.Cap .
 
 Service = DaemonService .
 
-DaemonService = <daemon @id DaemonId> .
+DaemonService = <daemon @id any> .
+DaemonProcess = <daemon @id any @config Process>.
 
-DaemonProcess = <daemon @id DaemonId @config DaemonSpec>.
-DaemonId = any .
-DaemonSpec = @simple CommandLine / @full FullDaemonSpec .
-FullDaemonSpec =
+Process = @simple CommandLine / @full FullProcess .
+FullProcess =
   & { argv: CommandLine }
-  & @env DaemonEnv
-  & @dir DaemonDir
+  & @env ProcessEnv
+  & @dir ProcessDir
   & @clearEnv ClearEnv
   & @readyOnStart ReadyOnStart
   & @restart RestartField
 .
-DaemonEnv = @present { env: { EnvVariable: EnvValue ...:... } } / @invalid { env: any } / @absent {} .
-DaemonDir = @present { dir: string } / @invalid { dir: any } / @absent {} .
+ProcessEnv = @present { env: { EnvVariable: EnvValue ...:... } } / @invalid { env: any } / @absent {} .
+ProcessDir = @present { dir: string } / @invalid { dir: any } / @absent {} .
 ClearEnv = @present { clearEnv: bool } / @invalid { clearEnv: any } / @absent {} .
 ReadyOnStart = @present { readyOnStart: bool } / @invalid { readyOnStart: any } / @absent {} .
 RestartField = @present { restart: RestartPolicy } / @invalid { restart: any } / @absent {} .
diff --git a/syndicate-server/src/services/daemon.rs b/syndicate-server/src/services/daemon.rs
index 7d48baa..e6e49af 100644
--- a/syndicate-server/src/services/daemon.rs
+++ b/syndicate-server/src/services/daemon.rs
@@ -34,18 +34,18 @@ fn cannot_start<R>() -> Result<R, Error> {
     Err("Cannot start daemon process")?
 }
 
-impl DaemonSpec {
-    fn elaborate(self) -> FullDaemonSpec {
+impl Process {
+    fn elaborate(self) -> FullProcess {
         match self {
-            DaemonSpec::Simple(command_line) => FullDaemonSpec {
+            Process::Simple(command_line) => FullProcess {
                 argv: *command_line,
-                env: DaemonEnv::Absent,
-                dir: DaemonDir::Absent,
+                env: ProcessEnv::Absent,
+                dir: ProcessDir::Absent,
                 clear_env: ClearEnv::Absent,
                 ready_on_start: ReadyOnStart::Absent,
                 restart: RestartField::Absent,
             },
-            DaemonSpec::Full(spec) => *spec,
+            Process::Full(spec) => *spec,
         }
     }
 }
@@ -62,7 +62,7 @@ impl CommandLine {
     }
 }
 
-struct DaemonProcessInstance {
+struct ProcessInstance {
     name: tracing::Span,
     cmd: process::Command,
     announce_presumed_readiness: bool,
@@ -71,7 +71,7 @@ struct DaemonProcessInstance {
     restart_policy: RestartPolicy,
 }
 
-impl DaemonProcessInstance {
+impl ProcessInstance {
     fn handle_exit(self, t: &mut Activation, error_message: Option<String>) -> ActorResult {
         let delay =
             std::time::Duration::from_millis(if let None = error_message { 200 } else { 1000 });
@@ -178,13 +178,13 @@ fn run(
         Ok(())
     }))?;
 
-    enclose!((unready_configs, completed_processes) during!(t, config_ds, language(), <daemon #(service.id.0) $config>, {
+    enclose!((unready_configs, completed_processes) during!(t, config_ds, language(), <daemon #(service.id) $config>, {
         enclose!((unready_configs, completed_processes) |t: &mut Activation| {
             tracing::debug!(?config, "new config");
             counter::adjust(t, &unready_configs, 1);
             counter::adjust(t, &total_configs, 1);
 
-            match language().parse::<DaemonSpec>(&config) {
+            match language().parse::<Process>(&config) {
                 Ok(config) => {
                     tracing::info!(?config);
                     let config = config.elaborate();
@@ -194,9 +194,9 @@ fn run(
                         let mut cmd = process::Command::new(argv.program);
                         cmd.args(argv.args);
                         match config.dir {
-                            DaemonDir::Present { dir } => { cmd.current_dir(dir); () },
-                            DaemonDir::Absent => (),
-                            DaemonDir::Invalid { dir } => {
+                            ProcessDir::Present { dir } => { cmd.current_dir(dir); () },
+                            ProcessDir::Absent => (),
+                            ProcessDir::Invalid { dir } => {
                                 tracing::error!(?dir, "Invalid working directory");
                                 return cannot_start();
                             }
@@ -211,7 +211,7 @@ fn run(
                             }
                         }
                         match config.env {
-                            DaemonEnv::Present { env } => {
+                            ProcessEnv::Present { env } => {
                                 for (k, v) in env {
                                     if let Some(env_variable) = match k {
                                         EnvVariable::String(k) => Some(k),
@@ -234,8 +234,8 @@ fn run(
                                     }
                                 }
                             }
-                            DaemonEnv::Absent => (),
-                            DaemonEnv::Invalid { env } => {
+                            ProcessEnv::Absent => (),
+                            ProcessEnv::Invalid { env } => {
                                 tracing::error!(?env, "Invalid daemon environment");
                                 return cannot_start();
                             }
@@ -262,7 +262,7 @@ fn run(
                         cmd.stderr(std::process::Stdio::inherit());
                         cmd.kill_on_drop(true);
 
-                        let process_instance = DaemonProcessInstance {
+                        let process_instance = ProcessInstance {
                             name: tracing::Span::current(),
                             cmd,
                             announce_presumed_readiness,
@@ -279,7 +279,7 @@ fn run(
                     Ok(())
                 }
                 Err(_) => {
-                    tracing::error!(?config, "Invalid DaemonSpec");
+                    tracing::error!(?config, "Invalid Process specification");
                     return Ok(());
                 }
             }
