diff --git a/data/common.yaml b/data/common.yaml
index 11d9b06014445601ec59cd4b69150c6ae6b11cae..e1414775418393cd29180542217ff61c22247ba4 100644
--- a/data/common.yaml
+++ b/data/common.yaml
@@ -25,3 +25,15 @@ aes::auth::keytab_devel: >
   6BI72YBgvod9N9z6P2iH0gFVVazciWTHVNcL4qZN4UHGDeBu5MH1wvTBZPpC
   IcAIbgvoQbriFHLJiL9HIWl6GSe6I/jp9n5veEkhHdT3M0nEEc0hbKWBaELj
   gTDWfQoET9V1Lrtv]
+
+aes::tal_cli::credentials: >
+  ENC[PKCS7,MIIBiQYJKoZIhvcNAQcDoIIBejCCAXYCAQAxggEhMIIBHQIBAD
+  AFMAACAQEwDQYJKoZIhvcNAQEBBQAEggEAii6nHpFM6+6aPuw1Qnawf77K7f
+  C5I+XqUJJBFxdiKq1VKDlcM3mme+MlB6cR7+GYYN1VRc7bQSTbmA80bdryBQ
+  zutD8KOvNWDytmdZhnDiboQEqSyuabdHjTlWRRONcENgMni5Vobmkr45JNDT
+  5PQcTdVAP9z7K0+1tcHnQFhQczkW3iBhSq47awLNQQA4EXzQRNvSbF+DogBT
+  2H62DEufNsn0Ca537PcAccRGILqJ1xS3i5h3SG0+dizx3XW1OxPXhmP+OXa/
+  /5BIgbJGSRen3BYEgQw1uXgIaQbmXa9gRWw8e9GS8eDYwXtkygTsSDyXATt2
+  VFwo8lT/XfMs2sczBMBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBCOn8Yp6O
+  diU5v1PVARi1m6gCAqYcAytahjgq8Prbq9bwqHAvw8XyNek07WiXM3WNj8VA
+  ==]
diff --git a/files/tal/on_update.sh b/files/tal/on_update.sh
new file mode 100644
index 0000000000000000000000000000000000000000..6b2493b4b6aa7538c1038afc03757f1af389ed5b
--- /dev/null
+++ b/files/tal/on_update.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/bash
+
+git submodule init
+git submodule update
+
+make
+
+cp tal ../
diff --git a/files/tal/tal-cli b/files/tal/tal-cli
new file mode 100644
index 0000000000000000000000000000000000000000..6e91c37e005604be48286c128bf8f12dbacb030a
--- /dev/null
+++ b/files/tal/tal-cli
@@ -0,0 +1,3 @@
+#!/usr/bin/bash
+
+exec sudo -u examadm /home/examadm/tal-cli/tal "$@"
diff --git a/manifests/init.pp b/manifests/init.pp
index cc1d5e8ea889ae40013ad416e6adda2a7f5ca5c6..89032e8aff60196efb82c4d4d2c37b3ce4a52b57 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -1,6 +1,7 @@
 class aes {
   include aes::examfiles
   include aes::aes_sw
+  include aes::tal_cli
   include aes::opendsa
   include aes::squid_filter
   include aes::latex
diff --git a/manifests/tal_cli.pp b/manifests/tal_cli.pp
new file mode 100644
index 0000000000000000000000000000000000000000..165d3fe09c9da0ec6fdacdfb9813dc700a6b060d
--- /dev/null
+++ b/manifests/tal_cli.pp
@@ -0,0 +1,35 @@
+class aes::tal_cli(
+  Optional[String] $credentials = undef
+) {
+
+  file { '/home/examadm/tal-cli' :
+    ensure => directory,
+    owner  => examadm,
+    group  => examadm,
+    mode   => '0700',
+    source => "puppet:///modules/${module_name}/tal/tal-cli",
+  }
+
+  file { '/home/examadm/tal-cli/.tal' :
+    ensure  => file,
+    owner   => examadm,
+    group   => examadm,
+    mode    => '0700',
+    content => $credentials,
+  }
+
+  file { '/home/examadm/tal-cli/on_update.sh' :
+    ensure => file,
+    owner  => examadm,
+    group  => examadm,
+    mode   => '0700',
+    source => "puppet:///modules/${module_name}/tal/on_update.sh",
+  }
+
+  exec { 'update-tal-repo' :
+    command => '/opt/utils/update_repo.sh /home/examadm/tal-cli/source https://oauth2:glpat-bfpVssm_zFmt1YRW7cLz@gitlab.liu.se/upp-aes/tal-cli.git master',
+    user    => examadm,
+    group   => examadm,
+    cwd     => '/home/examadm/tal-cli/source',
+  }
+}